The core idea
Wrong RAG answers fall into recall, ranking, or context construction. Classify first—then fix. If you skip triage, you'll burn time on optimizations that don't move the needle.
When a RAG system gives a wrong answer, most teams do the same thing: tweak prompts, increase k, add more documents, hope it improves. That's expensive roulette—and it usually fails because the fix was aimed at the wrong layer.
The right move is to classify first, then fix. In production, wrong RAG answers almost always fall into one of three buckets:
- Recall failure: you didn't retrieve the right source
- Ranking failure: you retrieved it, but it was ranked too low or dropped before the model saw it
- Context construction failure: you retrieved okay-ish content, but assembled a misleading context (dupes, contradictions, wrong sections)
This guide gives you 12 signals to classify the failure in minutes, the minimum logging schema you need, and the fix order that yields the highest ROI. No more guesswork.
Context
Part of the LLM Audit hub: LLM Production Audit Framework. See also: Why RAG Still Hallucinates When Retrieval Looks Fine, RAG Optimization Service (fix order), 9 Production Symptoms + Self-Assessment, GenAI vs AI System Audit, RAG Low Recall case study, RAG Context Construction case study.
The 3-bucket model (use this before you "optimize")
Before you touch prompts, k, or rerankers, run every wrong answer through this lens. The wrong bucket leads to the wrong fix—and weeks of wasted effort.
Bucket A — Recall failure (you missed the right thing)
The right doc exists in your corpus, but retrieval never surfaced it. Common causes: embedding mismatch, chunk granularity, query-doc gap, or missing hybrid/lexical search.
Bucket B — Ranking failure (you got it, but buried it)
The right doc is in the candidate set, but doesn't make it into the final context sent to the model. Reranker mis-calibration, selection heuristics, or context budget rules are usually to blame.
Bucket C — Context construction failure (you assembled a misleading context)
Chunks are correct-ish but stitched poorly: duplicates, contradictions, missing constraints, or wrong sections. The model gets confused—and so do users.
Fast triage decision tree (60 seconds)
Use this flow before you touch prompts or "increase k." It tells you which layer is actually failing: recall, ranking/selection, or context construction.
RAG Wrong Answer Triage
Answer these 4 yes/no questions using your traces.
-
Does the correct source exist in your corpus?
If NO → Not a RAG tuning problem. It's coverage (missing docs) or freshness/indexing.
Fix: source coverage + indexing/re-embed pipeline + cache invalidation.
-
Was that source retrieved in the top N candidates?
If NO → Bucket A: Recall failure.
Fix: query rewrite, hybrid search, metadata filters, chunk granularity, embedding alignment.
-
Was it selected into the final context sent to the model?
If NO → Bucket B: Ranking/selection failure.
Fix: rerank quality, selection heuristics, context budget rules, diversity/dedupe.
-
Does the final context contain the key constraint (numbers/dates/exceptions) and is the answer citing it?
If context is misleading/contradictory → Bucket C: Context construction failure.
Fix: dedupe, contradiction checks, doc versioning, "most recent wins", chunk quality scoring.
If context is correct but answer is wrong → Generation/constraints failure.
Fix: prompt hierarchy cleanup, cite-or-refuse rules, output validation, safer model routing.
Rule of thumb
If you can't answer the 4 questions from traces, your next "optimization" will be expensive roulette.
The 12 signals (triage checklist)
Use these signals when inspecting a wrong answer. Each one points toward recall, ranking, or context construction—and tells you where to look in your traces next.
Signal 1 — "No citation" or citation is unrelated
If your answer cites nothing or cites content that doesn't support the claim, it's likely recall or context construction. Quick check: does any retrieved chunk contain the key constraint the user asked about?
Signal 2 — The answer contains confident specifics not present in the retrieved text
If numbers, dates, policy exceptions, or guarantees appear with no evidence in context → context construction or generation overreach. Fix direction: output validation + "evidence-first" answer formatting + citation verification.
Signal 3 — Top retrieved chunks are thematically close but miss the exact requirement
Example: user asks "refund after 30 days," retrieval pulls "refund policy" but not the clause about 30 days. That's often recall failure due to: embedding mismatch, chunk granularity mismatch, missing query rewrite.
Signal 4 — Retrieved chunks include the exact answer, but it's not in the final prompt context
If your pipeline does multi-step retrieval (retrieve → rerank → select), this is classic ranking failure or selection heuristics bug. Tell: "We saw it in logs, but it didn't make it to the model."
Signal 5 — You see duplicated chunks or repeated paragraphs in context
Dupes consume context window and suppress diversity → context construction failure. Common causes: bad dedupe strategy, overlapping chunking, retrieval returns near-duplicates.
Signal 6 — Context contains contradictory chunks (two versions of the policy)
Contradictions force the model to guess → context construction failure or freshness issue. Fix direction: doc versioning + freshness routing, conflict detection, "most recent policy wins" logic.
Signal 7 — Wrong answers cluster around specific intents or document types
If failures spike for "pricing," "legal," "troubleshooting," or "multi-step procedures," that's a clue the system is not robust across cohorts. Often indicates chunking strategy mismatch (doc-type specific).
Signal 8 — Wrong answers spike after content updates
If changing docs breaks answers, you likely have: stale index, missing re-embedding pipeline, caching returning old retrieval results. That's a freshness variant of recall/context issues.
Signal 9 — The model's answer is correct for a similar question but wrong for a more specific one
Often recall: embeddings pull generic chunks, missing specific exception clauses. Fix direction: hybrid search, query expansion, structured filters (product, region, plan tier).
Signal 10 — Increasing k improves recall but makes answers worse
If higher k helps find relevant bits but answer quality drops, you're in context construction failure: too much context, irrelevant chunks increase confusion, contradictions. Fix direction: tighter selection + reranking, context size budgets, chunk quality scoring.
Signal 11 — Reranking improves relevance but cost/latency explodes
This indicates your reranking is applied too broadly. It's not "reranking is bad," it's "reranking needs routing." Fix direction: route reranking only when retrieval confidence is low or the intent is high-risk.
Signal 12 — The retrieved evidence supports the correct answer, but the model still answers wrong
This is where generation is the culprit (not retrieval): instruction conflicts, formatting/policy constraints, model choice, lack of "cite-or-refuse" behavior. Fix direction: prompt hierarchy cleanup + output validation + "refuse if not evidenced" rules.
What to log to diagnose in minutes (minimum schema)
Triage is only as fast as your traces. If you want to classify failures in hours instead of weeks, log these per request:
- Query + intent label (if you have it)
- Candidate retrieval list: doc ids, chunk ids, similarity scores
- Final selected context: chunk ids + ordering
- Reranker scores (if used)
- Prompt hash/version + model id
- Answer + citations produced
- Validation outcomes (schema pass/fail, citation checks)
- Latency breakdown per stage
- Cost breakdown (tokens, rerank calls, tool calls)
This is enough to classify recall vs ranking vs context construction reliably.
The fix order (highest ROI first)
Fixing the wrong layer burns time and budget. When teams fix RAG systematically, this sequence usually delivers the best ROI:
Fix order ladder (ROI-first)
Don't jump to hybrid search or reranking everywhere. Fix in this order to stop regressions and avoid silent spend.
If you skip #1, you'll burn time on "optimizations" that don't move the needle.
Mini case studies (what fast triage unlocks)
Increasing k improved recall—but answers got worse
The team kept raising k and adding docs. They were actually in Bucket C (context construction).
- Top-N retrieval overlap with "gold doc": improved as k ↑
- Citation validity: 76% (many answers cited irrelevant chunks)
- Common trace pattern: near-duplicates + contradictions squeezed out the key exception clause
- Dedupe + diversity selection (cap near-duplicates)
- Context budget by doc type (procedures/policies get tighter budgets)
- Contradiction flag: prefer latest version, drop older policy snippets
- Citation validity: 90% +14 pts
- Wrong-answer rate on policy cohort: down ~30%
Right chunk was retrieved—but never reached the model
Classic Bucket B (ranking/selection): "it's in the candidate set, but buried."
- Gold chunk in top_k candidates: 84%
- Gold chunk in final context: 41%
- Trace tell: rerank applied everywhere → cost up, but selection still favored long generic chunks
- Rerank routing: only rerank when retrieval confidence is low / intent is high-risk
- Selection heuristic: prefer shorter "constraint-dense" chunks over generic sections
- Hard rule: always include top-1 "exception clause" chunk when detected
- Gold chunk in final context: 68% +27 pts
- Cost per successful task: −18% (rerank no longer everywhere)
Note: numbers are illustrative. The structure is the point—baseline by cohort, controlled changes, and distribution-aware before/after evidence.
A simple self-test you can run today (10 queries)
Don't wait for perfect instrumentation. Pick 10 real production queries that users marked wrong—or that you know are wrong—and answer these four questions for each:
- Did the correct source exist in the corpus? (Y/N)
- Was it retrieved in top N? (Y/N)
- Was it selected into final context? (Y/N)
- Did the answer cite it correctly? (Y/N)
By the end, you'll see which bucket dominates. That single insight will tell you where to focus first—and save you from chasing the wrong fix.
The triage worksheet (10 queries, 10 minutes)
Turn this into a repeatable process. Use a simple worksheet that forces the 4 yes/no questions for each wrong answer—and captures the bucket label and fix direction. Here's the structure:
Worksheet columns
Example rows for the 4 yes/no triage questions
| Query | Correct source exists? | Retrieved in top N? | Selected into context? | Cited correctly? | Bucket label | Notes / fix |
|---|---|---|---|---|---|---|
| "Refund after 30 days?" | Y | N | — | — | A: Recall | Add query rewrite + policy exceptions index |
| "Does plan X include feature Y?" | Y | Y | N | — | B: Ranking | Rerank routing + constraint-dense selection |
| "What's the SLA for tier 2?" | Y | Y | Y | N | C: Context | Dedupe + contradiction handling |
Ready to triage at scale?
Use the worksheet above as a template. For a triage worksheet, failure taxonomy, and logging checklist, see the RAG Reliability hub. Or let us run a RAG audit and ship fixes with before/after evals.
Next steps
Take action
Run the 10-query self-test today. If you need a full audit with baseline, failure taxonomy, and fix roadmap, we can help.
FAQ
Questions readers usually ask next
What are the most common causes of wrong answers in RAG systems?
Most wrong RAG answers fall into three buckets: recall failure (missed the right source), ranking/selection failure (retrieved it but didn't include it in final context), and context construction failure (context is misleading due to duplicates, contradictions, or missing constraints). If the context is correct but the answer is still wrong, it's a generation/constraints problem (prompt hierarchy, cite-or-refuse, model routing).
How can I tell recall failure vs reranking failure?
Check traces: if the correct doc/chunk is not in the top-N candidate retrieval list, it's recall failure. If it is in candidates but not selected into the final context sent to the model, it's ranking/selection failure (reranker/heuristics/context budget).
Why does increasing k sometimes make RAG answers worse?
Higher k can improve recall but introduce irrelevant or contradictory chunks. If answer quality drops as k increases, you're usually in context construction failure: too much context, duplicates, contradictions, and weak selection rules. Fix with tighter selection, budgets, dedupe, and contradiction handling.
What should I log to debug RAG issues quickly?
Minimum per-request logging: query + intent/cohort labels, candidate retrieval list (doc/chunk ids + scores), final selected context (chunk ids + order), reranker scores (if used), prompt/version + model id, answer + citations, validation outcomes, stage-level latency, and cost breakdown (tokens, rerank/tool calls, retries). This is enough to classify failures reliably.
What's the highest-ROI order to fix RAG wrong answers?
Usually: (1) instrumentation + triage, (2) chunking/doc hygiene, (3) selection + context budgets, (4) route rerank/query rewrite, (5) hybrid search + metadata filters, (6) output validation + cite-or-refuse. Skipping instrumentation leads to expensive, slow guesswork.
When is the model (generation) the real culprit, not retrieval?
If the final context clearly contains the key constraint and evidence for the correct answer, but the model still answers wrong (or violates format/policy), it's a generation/constraints issue. Fix with prompt hierarchy cleanup, stronger evidence-first formatting, validation, and safer model routing.
Want a RAG audit with before/after evals?
We run RAG audits, classify failures, and ship fixes with measurable before/after evidence. See our RAG Low Recall and RAG Context Construction case studies.
Last updated
March 9, 2026





