ChangeGamer

← All guides · RAG in production

Common RAG Failure Modes and How to Fix Them

Part 11 of RAG in production · 1,362 words · ~6 min read · published 2026-08-24 · updated 2026-08-24 · Markdown variant

An operator runbook for the four RAG failure classes with no dedicated deep-dive elsewhere: retrieval miss, context overload, injection via content at ingestion time, and silent quality degradation — symptom, first diagnostic, and fix for each.

In short

  • A retrieval miss has three distinct root causes — a chunk that never entered the index, an embedding-domain mismatch pushing a real chunk below the cutoff, or a vector-only search structurally missing an exact identifier — and each needs a different fix, not a single retrieval tweak.
  • Context overload happens after retrieval already succeeded: the correct passage sits inside the assembled prompt but gets diluted by chunk count, buried by the lost-in-the-middle effect, or contradicted by a duplicate source version, so the fix lives in prompt assembly, not in retrieval.
  • Prompt injection through retrieved content starts at ingestion, not at answer time — untrusted documents enter a RAG index through crawls, connectors and user uploads long before any agent reads them, so sanitization and chunk-level source attribution belong in the ingestion pipeline itself.
  • Silent degradation in a RAG system comes from three unannounced changes — an embedding model or provider updating its behavior, a growing corpus skewing which chunks make top-k, or a connector quietly failing — and none of them raise an error, so only scheduled evaluation catches them.
  • Stale answers and permission leaks are correctness failures with their own dedicated runbooks — freshness contracts and pre-filter tenant isolation, respectively — and have different root causes from the four failure classes this runbook covers in depth.

Part of the Agentic RAG in Production: The Complete Operator Guide guide.


The pillar guide names six recognizable failure classes in a field-guide table, each with a one-line symptom and diagnostic. Two of those six have a full runbook elsewhere in this cluster: a stale answer is covered by keeping a RAG index fresh, and a permission leak by permission-aware retrieval. This article expands the other four — retrieval miss, context overload, injection via content, and silent degradation — into symptom-diagnostic-fix runbooks with the mechanics the pillar's table cells only gesture at.

Why does a retriever return "no information found" when the answer exists?

A retrieval miss has three distinct root causes, and confusing them wastes an incident chasing the wrong fix. First, the chunk may never have entered the index — a parsing failure dropped a table, a crawl never reached the page, or a chunking boundary split the fact across two pieces so neither states it cleanly. Second, the chunk may be indexed but ranked below the cutoff the retriever applies, typically from an embedding-domain mismatch or a similarity threshold set too tight (RAG and retrieval for agents names this pairing directly). Third, the query may be an exact-identifier lookup — an error code, a SKU, a citation name — that vector-only search structurally misses, because semantic similarity was never designed to reward literal string matches the way a lexical index does.

The diagnostic sequence follows the same order:

  1. Query the raw store directly for the expected passage, bypassing the ranker — a keyword filter settles whether the chunk is present at all.
  2. If present, check where it ranks relative to the cutoff, and against what candidate-set size.
  3. If the query names a literal identifier, check whether lexical search ran at all.

The fix maps to which of the three it turns out to be: an ingestion or chunking fix for a missing chunk, a swapped embedding model or a reranker for a threshold problem, and hybrid retrieval — lexical plus vector, fused — for the identifier case, since no embedding-quality tuning closes that gap alone.

Context overload: when the right passage is retrieved but the answer is still wrong

Context overload is a prompt-assembly failure, not a retrieval failure — the correct passage already made the candidate set, and the model still produced a wrong, hedged, or overly cautious answer because of how those candidates were packaged into the prompt. Three mechanics produce it:

The diagnostic step for all three is the same: pull the actual assembled prompt for a failing case, not just the retrieval log, and inspect chunk count, the position of the correct chunk, and whether any two chunks conflict. Retrieval logs alone hide this class entirely, because retrieval itself succeeded.

How does untrusted content end up in a RAG index in the first place?

Content injection reaches a RAG system at ingestion, before any agent or generation step touches a chunk. A document enters through a web crawl, a third-party connector (ticketing system, shared drive, partner feed), or a direct user upload, and none of those channels can be assumed free of instruction-like text — a support ticket can contain "ignore prior instructions," a scraped page can carry hidden text invisible to a human but plain to a parser. Once chunked and embedded, that text is indistinguishable from any other passage in the index unless something marked it untrusted on the way in.

Two ingestion-time controls address this, distinct from runtime guardrails applied when an agent later reads the content:

Sanitization at ingest is necessary but not sufficient alone: architectural patterns like Dual LLM and LLM Map-Reduce isolate untrusted content from tool-calling surfaces even after it clears ingestion, because "architecture reduces what an injection can reach; guardrails and checklists reduce how often one succeeds in the first place" (prompt injection design patterns). This runbook covers the ingestion layer; for what happens when retrieved content drives tool calls and downstream actions, see agentic RAG patterns.

Silent degradation: why RAG quality drifts without an obvious break

RAG quality degrades silently when one of three things changes without anyone watching, and none throws an application error — the system keeps answering, just with a slowly worsening hit rate. First, the embedding model or its provider changes behavior: a provider ships an update behind the same API identifier, and every query now scores against vectors produced by a slightly different function than the ones already indexed. Second, the corpus grows in ways that skew competition for top-k slots — a chunk once third out of five hundred candidates now ranks thirtieth out of fifty thousand, with nothing about the chunk itself having changed. Third, an ingestion connector breaks quietly — a schema change, an expired credential, a quota limit — and stops feeding new content while old content keeps answering fine, so the system looks healthy except for the growing gap of what it never learned.

The diagnostic for all three is a scheduled evaluation pass against a fixed golden set, run on a recurring cadence rather than only when a change ships, tracking recall@k and precision@k over time so a slow decline shows as a trend line instead of a complaint. This runbook does not re-derive how to build that harness — see evaluating a RAG system for golden-set and CI mechanics. Routing systems carry a narrower version of this same problem: a difficulty classifier can go stale after an upstream chunking or model change and misroute traffic between tiers unnoticed — see RAG cost and latency for that specific case.

What about stale answers and permission leaks?

Stale answers and permission leaks belong to this field guide but have their own dedicated runbooks, because their causes and fixes are architecturally distinct from the four above. A stale answer is a freshness problem, addressed by keeping a RAG index fresh with per-source staleness contracts and sync-lag monitoring. A permission leak is an authorization problem, addressed by permission-aware retrieval with pre-filters derived from the authenticated principal, applied before ranking. Treating either as a retrieval-quality or content-trust issue, as the four classes above are, misdirects the fix.

Turning this into an operator runbook

Two habits keep every failure class here fast to diagnose rather than slow to reconstruct after the fact. Log retrieval traces — the query, matched chunks with scores, and filters applied — with the same discipline as application logs, since every diagnostic step above depends on reconstructing what a query actually retrieved, not what it should have. And keep a standing incident table mapping each failure class to its owning team, diagnostic query, and typical fix, so the first responder to a wrong-answer page is not starting from a blank page. As of August 2026 that table is the cheapest artifact in this cluster to build — write it once, next to the pillar's production readiness checklist, and add a row whenever a new failure class earns one.

Frequently asked questions

What's the difference between a retrieval miss and context overload in RAG?
A retrieval miss means the correct passage never made it into the candidate set the model saw, so the failure is upstream in indexing or ranking; context overload means the correct passage was retrieved successfully but the assembled prompt still produced a wrong or hedged answer because of chunk count, position, or contradiction. Fixing a retrieval miss touches the index or the retriever; fixing context overload touches prompt assembly.
How do I tell if a RAG failure is an ingestion gap or a ranking problem?
Query the index directly for the expected passage, bypassing the ranker entirely — a keyword filter or exact-ID lookup against the raw store answers whether the chunk exists at all. If it is absent, the fault is ingestion or chunking; if it is present but never surfaces near the top of retrieval results, the fault is ranking, and the fix is a wider candidate set, a better-fitted embedding model, or hybrid lexical search.
Where should content sanitization happen in a RAG pipeline?
At ingestion, before a document is chunked and embedded, not only at generation time when an agent reads the retrieved text. Stripping instruction-like patterns and recording each chunk's source at ingest time catches untrusted content before it becomes part of the searchable index, and it gives incident response a way to trace a bad answer back to the specific connector or document that introduced it.
How often does RAG quality degrade without anyone noticing?
Silent degradation is common enough that it needs a standing, scheduled check rather than a one-time launch review — embedding providers update models, corpora grow and shift what competes for the same top-k slots, and ingestion connectors fail quietly on schema changes or rate limits, none of which raises an application error on its own.

#rag #reliability #failure-modes #observability #agents #production

Put this corpus inside your own agents

This guide is free and stays free. The reference corpus behind it — machine-readable contracts, verified primary sources, continuously refreshed — is the paid product: a €5 starter key unlocks every premium reference for one agent via API; a €25 corpus license delivers the full corpus as RAG / fine-tuning data with an explicit AI-use grant; the €150 enterprise license adds commercial redistribution rights.

Agents: this page as Markdown · JSON · offers at /api/pricing.json · payment methods at /api/payment.json · single-resource access via HTTP 402 (how that works)