How it works
Drop markdown files in areferences/ folder. At rasa train, every .md file
is embedded into a local vector index that ships inside the model. At runtime
the agent gets a built-in search_knowledge tool and calls it when a question
needs looking up.
integrations.yml. If a
references/ folder exists, the tool appears.
Markdown is the indexed format: every **/*.md file under a references/
folder, with empty and whitespace-only files skipped.
Both locations feed one index
Files at the agent root and files underskills/<id>/references/ are indexed
together into a single searchable store, and every search_knowledge call
covers all of it whatever skill is active. The two locations are there to keep
your files organised alongside the skill they belong to.
Write each document so it stands on its own, then. A retrieved chunk arrives
without the folder it came from, so a fees document that opens with “Billing
fees for postpaid plans” is usable in a way that one opening with “The
following fees apply” is not.
What happens in a turn
- The user asks something.
- The model calls
search_knowledgewith a natural-language query. - Matching snippets come back as a tool message, each with its source file.
- The model answers from those snippets, or calls
search_knowledgeagain with a refined query.
- After a search, the skill’s own tools are withheld for the rest of the
turn.
activate,search_knowledge, andcannot_helpremain, plusresolve_tool_confirmationwhen a confirmation is pending, so a grounded answer doesn’t accidentally re-drive the active skill. The skill’s tools come back on the next turn. cannot_helpis withheld until a search has run. When a knowledge base exists, the agent cannot decline a request before retrieval has had a chance to answer it.
Choosing the embedding model
By default the index uses the built-in OpenAI embeddings. To choose another, declare a model group and name it:integrations.yml
agent.yml
rasa train and loaded at serve time with the same
embedder, so keep the named model group in integrations.yml for as long as the
trained model is in use. Renaming or removing it means retraining.