Assistants
Create and configure assistants, Purpose and scope, Key facts, instructions, hallucination modes, and model overrides.
An assistant is the unit you customize, give knowledge to, and embed. Each assistant has a private dashboard id and a public publicId (looks like asst_…) used by the widget and public chat API.
Create and manage
- Sign up / sign in
- Open Dashboard → create an assistant (name, description, welcome message, instructions)
- Configure Settings, Knowledge, Customize, and Install
publicId is a public capability, not a secret. Anyone who knows it can open the widget and chat against that assistant unless you restrict it with the domain allowlist, visitor rate limits or signed widgets (assistant Settings → Security).
Instructions and welcome
| Field | Role |
|---|---|
| Welcome message | First bubble visitors see |
| Instructions | System guidance for answers (tone, what to refuse, citation style) |
Keep instructions concrete (“Answer only from the knowledge base. Cite with [1].”) rather than vague.
Scope and Profile
The assistant's Profile page defines what the assistant helps with and the facts it can always rely on. Text chat and Voice (preview) share the same profile.
Purpose
What does this assistant help visitors with? is the Purpose: a short statement of the assistant's domain, for example "Helps visitors learn about Jane's software projects, experience and availability for freelance work." Optional fields:
- Represents: the person or organization the assistant speaks for.
- Redirect for unrelated requests: the reply visitors get when they ask for something outside the Purpose. Without it, ChatAI writes a short redirect from the Purpose.
- General assistant: allow any topic: turns off scope enforcement, so every request is in scope. The default is a focused assistant.
Suggest a Purpose drafts one from your Instructions; you can edit and save it. The page shows which statement is Currently enforced, in this order:
- Your saved Purpose.
- A suggested Purpose, only while the Instructions it was suggested from are unchanged.
- Your custom Instructions, when no Purpose is saved.
- The assistant name and description only.
When you edit the Instructions after saving a Purpose, the page shows Instructions changed since this Purpose was saved so you can review it.
How scope is enforced
Every text message and every factual Voice turn goes through the same Scope Router before an answer is generated:
- In scope: answered normally from Knowledge.
- Out of scope: the visitor gets the redirect instead of an answer. Later messages cannot widen the scope: insisting ("just answer this one") is redirected again.
- Partial: a message that mixes an in-scope question with an unrelated one gets an answer to the in-scope part only.
Only the Purpose defines the domain. Instructions can narrow it (for example "never discuss pricing") but never widen it. Knowledge does not define scope on its own: document titles, Key facts and retrieved passages only help recognize names and terms that belong to the Purpose, so uploading an unrelated document does not make its topic in scope.
As a second line of defense, a selective output check re-reads risky replies (partial requests, weak grounding, injection signals, Flexible mode, a recent redirect) against the Purpose before delivery. It is on by default (OUTPUT_SCOPE_CHECK). Out-of-scope turns are recorded with the owner-only out_of_scope outcome; public chat responses report them as conversational, and visitors only see the redirect.
Key facts
Key facts are short, owner-approved facts the assistant can always use, such as names, email addresses, hours or locations.
- Generate suggestions from Knowledge (later Refresh suggestions) asks a background worker to propose facts with a quote from the source document. Nothing is published until you approve it; you can also reject suggestions or Add a fact by hand.
- A suggestion that Replaces a published fact, or that disagrees with another source (Conflicting information), is flagged for review.
- Facts whose source document changed or was deleted are Hidden: source changed or removed until you review them again.
- Suggestions whose names, emails or URLs do not appear in the quoted source are rejected automatically.
Published Key facts help the assistant recognize terms and answer accurately. A separate optimization that answers basic identity, contact and hours questions straight from Key facts without retrieval is controlled by PROFILE_ANSWER_ROUTE, which is off by default; leave it off unless you have evaluated it for your model.
The Profile page and its background worker can be turned off instance-wide with ASSISTANT_PROFILE=false.
Hallucination modes
| Mode | Behavior |
|---|---|
| Strict | Prefer refusal when context is thin |
| Balanced | Default middle ground |
| Flexible | Allow more extrapolation when retrieval is weak |
Tune with RAG guardrails on Settings (require context, verify citations, refuse on low confidence).
Model overrides (v0.6+)
Instance defaults come from env (AI_PROVIDER, AI_MODEL, EMBEDDING_PROVIDER, EMBEDDING_MODEL). Per assistant you can override chat and embedding provider/model in Settings when credentials exist on the instance.
Constraints:
- Embedding overrides must keep the same dimension width as the instance (
EMBEDDING_DIMENSIONS, default1536, matchingchunks.embedding) - Missing provider credentials → chat/ingest returns 503
See Providers.
RAG settings
Per-assistant toggles (defaults favor quality):
- Hybrid search (vector + keyword)
- Reranking
- Query expansion
- Chunking mode (
standardorparent_child— reprocess after changing) - Online eval sample rate
- Guardrails
Details: RAG and debugger.