The difference between a demo chatbot and an agent a support leader will put in front of customers is one behaviour: what it does when it does not know. A model left to its own parameters will produce a confident, fluent, wrong answer about your refund policy. Botmanor's runtime is built so that the model is asked the question with your documents already in front of it — and told, in the same breath, to say so when your documents do not contain the answer.
The mechanics are ordinary and that is the point. An agent declares a RAG capability and a list of knowledge bases. On every turn, the runtime embeds the user's message with the embedding model that knowledge base was built with, searches that base's own vector collection, and takes the top passages — a handful per base when several are linked, capped overall so the prompt stays bounded and the cost stays predictable. Those passages are numbered and prepended to the agent's own system prompt under a standing instruction: use this context where it is relevant, and if it does not contain the answer, say so honestly rather than fabricating one.
Retrieval is deliberately conservative about failure. Only knowledge bases whose index has finished building are consulted — a base still ingesting is skipped rather than half-searched. If a base cannot be queried at all, because its embedding credential is unconfigured or the vector store hiccups, the turn degrades to an ungrounded answer and logs the reason instead of failing the whole conversation. A bot that answers slightly worse is better than a bot that returns an error to a customer.
The knowledge side is a real pipeline, not an upload box. Documents are chunked with a configurable strategy — fixed windows, recursive splitting, semantic, Markdown-aware, or code-aware — embedded in batches through the workspace's own provider, and stored with per-chunk vectors whose dimensions are validated against the knowledge base's declared dimensions. A mismatch is rejected at ingest rather than discovered later as silently poor recall.
Two honest boundaries. First, the vector layer runs on Botmanor's own Postgres-backed store by default: exact cosine similarity over a bounded scan, which is correct at team-and-department scale and explicitly not an approximate-nearest-neighbour engine — the store sits behind a driver interface so a dedicated vector database can be plugged in without touching the agent runtime. Second, retrieved passages currently shape the answer but are not yet returned to the caller as structured citations; surfacing the source list in the API and the UI is the next step on this path, and Botmanor says so rather than implying footnotes it does not yet emit.
Today the live-turn grounding runs in the execution layer, but linking a knowledge base to an agent is API-only in the current UI and citations are not yet rendered. Because a real user cannot complete the full story by clicking through the web app alone, this page is presented as a narrative pattern rather than a clickable "Do it yourself" section.
Ready to make this your story?



