Why your chatbot retrieves the right document but still answers wrong
A team shows us a dashboard: recall@5 is 0.92. The right document is almost always retrieved. And yet support staff have quietly gone back to searching the intranet. Both facts are true, and the reason is that “retrieved” and “correct” are different measurements — and only one of them was being taken.
Retrieval is a funnel, not a checkbox
Recall answers one narrow question: did the gold document appear anywhere in the candidate set? Between that and a correct answer there are at least four more gates, and each one leaks.
Multiply five gates at 90% each and you are at 59% end to end. That is roughly the number users experience, and it is why “our recall is great” and “nobody trusts it” coexist so comfortably.
The three causes we see most often
1. The chunk is retrieved but insufficient
A threshold table split across a chunk boundary is the classic case. The model receives “$5,000 — director approval” without the row above it that scoped the rule to capital expenditure. The citation is correct. The answer is wrong. No retrieval metric catches this, because retrieval did its job.
2. A stale duplicate outranks the current version
Corpora accumulate archives. Old policies often use tighter, more distinctive language than their replacements, so they score higher on lexical similarity. Without recency or status metadata in the filter, the archive wins the rank and the current document never makes the cutoff.
3. The system has no way to say “I don't know”
Given weak context, most deployed assistants answer anyway. An abstention path — triggered by a context-sufficiency score rather than by model self-report — converts a confident wrong answer into a survivable one.
A wrong answer with a correct citation is more dangerous than no answer, because it survives review.
Measure the gates separately
The fix is not a better prompt. It is scoring each stage independently so the failure has an address. A minimal per-query record looks like this:
{"query_id":"q_0412","gold_doc_ids":["policy-2026#p12"],"retrieved_ids":["policy-2019-archive#p4","faq#p1","deck#s7"],"gold_in_candidates":true,"gold_rank":7,"survived_cutoff":false,"chunk_sufficient":null,"context_conflict":true,"groundedness":0.41,"answer_correct":false,"root_cause":"retrieval_ranking"}
With gold_rank and survived_cutoff recorded, a ranking problem stops looking like a hallucination problem. Aggregate the root_cause field and you have a failure distribution — which is what tells you where to spend the next sprint.
What to do this week
Most teams discover in that fourth step that their “hallucination problem” is a metadata problem. It is cheaper to find out with 50 labelled queries than with a model migration.
One note a month on retrieval quality, evaluation, and AI security. No marketing.
Seeing this pattern in your own system? The audit measures all five gates in two weeks.
Book a free consultation