Bot knowledge grounding audit
A fluent wrong answer is usually two failures stacked: retrieval did not surface
the right source, and generation asserted anyway. Teams tune the model when the
KB is empty, or expand the KB when search returns the wrong chunk. Measure retrieval
and generation separately or you will fix the wrong layer.
Retrieval quality is the ceiling on answer quality. Perfect generation cannot
exceed what relevant, correct sources contain.
Failure taxonomy
For each bad or unsupported answer, classify root cause:
| Class |
Definition |
Typical fix |
| Missing KB |
No documented answer exists |
Content programme |
| KB present, not retrieved |
Right doc exists; search missed it |
Embeddings, chunking, query rewrite |
| Wrong chunk retrieved |
Related but incorrect passage ranked first |
Chunk boundaries, metadata filters, reranker |
| Right chunk, wrong generation |
Source supports a different conclusion |
Prompt, model, citation enforcement |
| Fabrication with citation |
Cites real doc that does not support claim |
Generation + review; often worse than no cite |
| Correct deferral missed |
Should hand off; retrieved noise encouraged answer |
Prompt + retrieval threshold |
Cite grounding failures with evidence: conversation id, customer question (redacted),
chunk ids or URLs retrieved, what the bot claimed, and what the source actually says.
Measure retrieval without generation
Run retrieval-only evaluation on a labelled query set:
- Query — from real customer phrasing, not only article titles.
- Expected document(s) — human-labelled relevant sources.
- Metrics — recall@k (is the right doc in the top k?), MRR, nDCG if graded
relevance is ordinal.
Report by language, product area, and query type (how-to vs policy vs account-specific).
Retrieval can look healthy at k=5 and still fail in production if the bot only passes
k=1 to the model, or if metadata filters exclude the right locale.
Measure generation given retrieval
Fix retrieval logs, then re-run or replay:
- Supported — claim entailed by retrieved text.
- Unsupported — claim not in retrieved set.
- Contradicted — claim conflicts with retrieved text.
This split tells you whether to invest in search or in "answer only from context"
prompting.
Missing KB vs wrong chunk
Signals for missing KB:
- Repeated questions on the same driver with fabrication or hand-waving
- Human agents consistently use macros or tribal knowledge not in search index
- Retrieval returns empty or irrelevant with low scores across paraphrases
Signals for wrong chunk:
- Retrieved docs are thematically related (same product, wrong scenario)
- Correct doc exists in corpus but ranks below an outdated article
- Chunk cuts mid-table or mid-exception list
Run a coverage map: top contact drivers × "documented / partial / absent" ×
"retrievable when documented". A documented but unretrievable answer is a search bug.
Stratified sampling for grounding audit
Do not sample uniformly. Over-weight:
- Regulated, fees, eligibility, timelines
- Drivers with high repeat contact after bot resolution
- Languages with known thin content
- Cases where the bot cited something
For each sampled answer:
- List retrieved chunks (ranked).
- Judge support per key claim.
- Assign taxonomy class above.
Traps
- Citation as proof — link present, claim wrong. Always read chunk text.
- Stale KB — retrieval correct for old policy. Track doc version in eval.
- Account-specific questions — no KB will answer; correct behaviour is deferral.
Score deferral separately from retrieval recall.
- English eval on multilingual bot — retrieval indices differ per language.
- Synthetic queries — easy article titles inflate recall@k vs real phrasing.
Present results to the user
- Scope — bot, corpus snapshot id, languages, sample design.
- Retrieval metrics — recall@k and segments; query set size and limitations.
- Generation-given-retrieval — supported / unsupported / contradicted rates.
- Failure taxonomy table — counts by class with representative cited examples
(ids, minimal quotes, redacted).
- Coverage map — drivers where KB is absent vs unretrievable vs healthy.
- Priority fixes — ordered by customer risk and which layer owns them.
- What was not measured — account-specific paths, tools/API grounding, live corpus
drift since snapshot.
1---2name: cx-bot-knowledge-grounding3description: Use to audit retrieval and grounding as the ceiling on bot answer quality — separating missing knowledge from wrong chunks, and measuring retrieval apart from generation. Trigger for "why does the bot make things up", "RAG audit", "wrong article cited", "retrieval quality", "bot answers not in the KB", "grounding failures", or KB gaps vs search failures.4---56# Bot knowledge grounding audit78A fluent wrong answer is usually two failures stacked: **retrieval did not surface9the right source**, and **generation asserted anyway**. Teams tune the model when the10KB is empty, or expand the KB when search returns the wrong chunk. **Measure retrieval11and generation separately** or you will fix the wrong layer.1213Retrieval quality is the **ceiling** on answer quality. Perfect generation cannot14exceed what relevant, correct sources contain.1516## Failure taxonomy1718For each bad or unsupported answer, classify root cause:1920| Class | Definition | Typical fix |21| --- | --- | --- |22| **Missing KB** | No documented answer exists | Content programme |23| **KB present, not retrieved** | Right doc exists; search missed it | Embeddings, chunking, query rewrite |24| **Wrong chunk retrieved** | Related but incorrect passage ranked first | Chunk boundaries, metadata filters, reranker |25| **Right chunk, wrong generation** | Source supports a different conclusion | Prompt, model, citation enforcement |26| **Fabrication with citation** | Cites real doc that does not support claim | Generation + review; often worse than no cite |27| **Correct deferral missed** | Should hand off; retrieved noise encouraged answer | Prompt + retrieval threshold |2829**Cite grounding failures with evidence**: conversation id, customer question (redacted),30chunk ids or URLs retrieved, what the bot claimed, and what the source actually says.3132## Measure retrieval without generation3334Run retrieval-only evaluation on a labelled query set:3536- **Query** — from real customer phrasing, not only article titles.37- **Expected document(s)** — human-labelled relevant sources.38- **Metrics** — recall@k (is the right doc in the top k?), MRR, nDCG if graded39 relevance is ordinal.4041Report by **language, product area, and query type** (how-to vs policy vs account-specific).4243Retrieval can look healthy at k=5 and still fail in production if the bot only passes44k=1 to the model, or if metadata filters exclude the right locale.4546## Measure generation given retrieval4748Fix retrieval logs, then re-run or replay:4950- **Supported** — claim entailed by retrieved text.51- **Unsupported** — claim not in retrieved set.52- **Contradicted** — claim conflicts with retrieved text.5354This split tells you whether to invest in search or in "answer only from context"55prompting.5657## Missing KB vs wrong chunk5859Signals for **missing KB**:6061- Repeated questions on the same driver with fabrication or hand-waving62- Human agents consistently use macros or tribal knowledge not in search index63- Retrieval returns empty or irrelevant with low scores across paraphrases6465Signals for **wrong chunk**:6667- Retrieved docs are thematically related (same product, wrong scenario)68- Correct doc exists in corpus but ranks below an outdated article69- Chunk cuts mid-table or mid-exception list7071Run a **coverage map**: top contact drivers × "documented / partial / absent" ×72"retrievable when documented". A documented but unretrievable answer is a search bug.7374## Stratified sampling for grounding audit7576Do not sample uniformly. Over-weight:7778- Regulated, fees, eligibility, timelines79- Drivers with high repeat contact after bot resolution80- Languages with known thin content81- Cases where the bot cited something8283For each sampled answer:84851. List retrieved chunks (ranked).862. Judge support per key claim.873. Assign taxonomy class above.8889## Traps9091- **Citation as proof** — link present, claim wrong. Always read chunk text.92- **Stale KB** — retrieval correct for old policy. Track doc version in eval.93- **Account-specific questions** — no KB will answer; correct behaviour is deferral.94 Score deferral separately from retrieval recall.95- **English eval on multilingual bot** — retrieval indices differ per language.96- **Synthetic queries** — easy article titles inflate recall@k vs real phrasing.9798## Present results to the user991001. **Scope** — bot, corpus snapshot id, languages, sample design.1012. **Retrieval metrics** — recall@k and segments; query set size and limitations.1023. **Generation-given-retrieval** — supported / unsupported / contradicted rates.1034. **Failure taxonomy table** — counts by class with representative cited examples104 (ids, minimal quotes, redacted).1055. **Coverage map** — drivers where KB is absent vs unretrievable vs healthy.1066. **Priority fixes** — ordered by customer risk and which layer owns them.1077. **What was not measured** — account-specific paths, tools/API grounding, live corpus108 drift since snapshot.