Skip to content
RETRIDGE
← RAG Engineering Notes
AI Engineering Published Feb 2026 · 9 min read

Why your chatbot retrieves the right document but still answers wrong

Retridge Engineering
RAG & evaluation practice

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.

Where the answer is lost
Gold chunk is in the candidate set recall@k
…and survives the rerank cutoff rank position
…and actually contains the full answer chunk sufficiency
…and is not contradicted by a neighbour context conflict
…and the model uses it rather than its priors groundedness

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

01 Take 50 real queries from logs — including the complaints. Not 50 you wrote.
02 Label the gold chunk for each, not just the gold document.
03 Log rank position and whether it survived the cutoff, per query.
04 Read ten failures by hand. Assign a root cause to each. Patterns appear fast.
05 Only then change something — and re-run the same 50 queries.

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.

RAG Engineering Notes

One note a month on retrieval quality, evaluation, and AI security. No marketing.