Why RAG Can’t Answer Questions That Need Two Documents
Single-shot retrieval against a question that requires composition — detection, and the architectures that handle it.
A multi-hop RAG failure is when the correct answer requires chaining evidence from two or more documents, but a single retrieve-then-generate pass returns an incomplete or wrong answer. That is different from a wrong chunk of a one-document answer, and different from retrieving nothing at all (missing document). Tang and Yang’s MultiHop-RAG benchmark (COLM 2024; arXiv:2401.15391) put 2,556 such queries against a news knowledge base — each with supporting evidence spread across 2 to 4 documents — and found existing single-shot RAG inadequate on both retrieval and answering.
Before you rebuild the stack as “agentic” or “graph,” inspect the retrieved set against the gold evidence set for the failing query. The question is not whether RAG “supports multi-hop” in the abstract — it is which of two causes fired on this query: the second document never entered the context, or the documents were there and the model still failed to compose them.
What is a multi-hop question in RAG?
A multi-hop question in RAG is a query whose answer cannot be derived from a single piece of supporting evidence — the system must retrieve and reason over multiple chunks, usually from multiple documents. Tang and Yang (2024) contrast that with a single-hop question such as “What is Google’s profit margin in the third-quarter reports for 2023?”, where one evidence span is enough.
Their MultiHop-RAG dataset labels four query types (Table 3): inference (816 queries, 31.92%), comparison (856, 33.49%), temporal (583, 22.81%), and null (301, 11.78%) — null queries have no answerable evidence and test whether the model refuses instead of hallucinating. Evidence-count mix (Table 4): 42.18% of queries need two pieces of evidence, 30.48% need three, and 15.56% need four. A canonical comparison example from the paper (and Cobus Greyling’s 2024 write-up of it): “Which company among Google, Apple, and Nvidia reported the largest profit margins in their third-quarter reports for 2023?” — three reports, one comparison. The fix architectures for that class of question live on multi-hop RAG; this page is the failure diagnosis.
First, is it multi-hop or just a wrong chunk?
A failing multi-document answer has three mutually exclusive signatures. Most debugging guides either report aggregate Hits@K on MultiHop-RAG or list “multi-hop” as one bullet among ten failure modes. The faster path is a per-query branch: label the gold evidence document ids G, take the retrieved ids R at production k, and compute evidence_recall = |G ∩ R| / |G|. That single ratio rules the causes in or out before you change code.
| Signature | What you see | Detection (run this first) | Next |
|---|---|---|---|
| 1 · Hop-miss | Some gold evidence docs in top-k, at least one missing | 0 < evidence_recall < 1 | §hop-miss below |
| 2 · Composition miss | Every gold evidence doc is in the prompt; answer still wrong | evidence_recall = 1 AND answer ≠ gold | §composition below |
| 3 · Not multi-hop | The answer lives in one document that never appeared, or a wrong single chunk came back | |G| = 1, or evidence_recall = 0 with a single gold | Wrong chunk / Missing document |
Why does single-shot retrieval miss the second document?
Single-shot retrieval misses the second document because similarity search ranks chunks against the query, not against the information the first hit implies — so Doc A can enter top-k while Doc B, which the answer also needs, never does.
Symptom
The user asks which of three companies had the best Q3 margin. The retriever returns Apple’s filing (or a near match) and never surfaces Nvidia’s. The model answers confidently from one report.
Detection
For a labelled multi-hop query, measure evidence_recall = |G ∩ R| / |G| at production k. A value strictly between 0 and 1 is a hop-miss: part of the evidence set was retrieved, not the whole chain.
Cause
Naive retrieve-then-generate runs one similarity query. Dense and sparse retrievers optimise lexical or semantic closeness to that query string; they do not plan a second hop from the first evidence. Tang and Yang (2024) ran LlamaIndex RAG with 256-token chunks: even voyage-02 plus bge-reranker-large reached only Hits@10 0.7467, and Hits@4 fell to 0.6625 (Table 5) — production context windows usually keep k in that low range. HopRAG (Liu et al., ACL Findings 2025) reports BGE recall saturating near 0.45 on MuSiQue, 2WikiMultiHopQA and HotpotQA, with over 60% of retrieved passages only indirectly relevant.
Fix
Add another retrieval step conditioned on the first result — query decomposition into single-document sub-queries (query decomposition) or iterative multi-hop retrieval with an explicit stop (multi-hop RAG). Raising k alone is a ranking diagnostic for wrong chunk, not a substitute for fetching a second document.
The gold evidence is all in the context — why is the answer still wrong?
When every gold evidence chunk is already in the prompt and the answer is still wrong, the failure is composition — the model did not chain the facts — not retrieval.
Symptom
You can point at two (or more) retrieved passages that jointly entail the answer, and the model still picks one hop, invents a bridge, or answers only half the comparison.
Detection
evidence_recall = 1 and the answer does not match gold. If the passages contradict each other, that is conflicting sources; if the needed span sits unused in the middle of a long context, see lost in the middle.
Cause
Multi-hop answering needs relational reasoning across evidence, not just presence. Tang and Yang (2024, Table 6): with the best retrieved chunks, GPT-4 accuracy was 0.56; with ground-truth evidence it rose to 0.89 — still not perfect. On gold evidence, Llama-2-70B reached 0.32 and Mixtral-8x7B-Instruct 0.36. Kuldeep Paul’s production failure catalogue (2025) names the same pattern: systems retrieve the necessary facts and still fail multi-hop inference. Barnett et al. (2024) list incomplete multi-document answers as failure point 7 even when the missing facts were in context.
Fix
Do not swap the embedding model first — retrieval already succeeded. Use iterative retrieve-and-reason, verification, or an agentic control loop that checks whether the composed answer used every required evidence piece. Those designs are on multi-hop RAG and agentic RAG.
How do you detect that a query needs more than one hop?
You detect a multi-hop requirement by labelling the gold evidence set and measuring whether production retrieval covers it — not by reading the answer’s confidence. Kuldeep Paul (2025) recommends evaluation sets where ground truth names which documents hold which reasoning steps; Tang and Yang (2024, §2.3) define Hit@K as the fraction of gold evidence that appears in the top-K retrieved set — that is evidence_recall under another name.
Four practical checks, in order:
- Label G. For each failing query, record the document (or chunk) ids a human needs to answer it. Building that set is golden test set work; Hits/MAP definitions sit on retrieval metrics.
- Score evidence_recall at production k. Partial coverage → hop-miss; full coverage with a wrong answer → composition miss; empty coverage with a one-document gold → not multi-hop.
- Bridge test. If two facts only join through a shared entity or topic (Tang and Yang’s bridge-entity / bridge-topic), treat the query as multi-hop even when each fact alone looks easy.
- Single-hop rewrite. Split into “What is X?” and “What is Y?”; if each sub-query retrieves its gold and a composed answer works, the original question was multi-hop.
Log the query, retrieved ids, similarity scores, and which gold ids hit — the same trace you would use on RAG tracing. Without G labelled, aggregate answer accuracy cannot tell hop-miss from composition miss.
What architectures fix multi-hop RAG failures?
Multi-hop RAG failures are fixed by architectures that retrieve more than once or reason over structured links — not by a larger top-k on the same single query. Depth for each design lives on its own node; this section only routes by cause.
- Query decomposition — split the compound question into single-document sub-queries, retrieve for each, then compose. Primary lever for hop-miss. See query decomposition.
- Iterative multi-hop retrieval — retrieve, reason, retrieve again, with an explicit stopping criterion so the loop cannot spin. Primary page for this failure’s fix: multi-hop RAG.
- Agentic control — the model decides whether, what, and how many times to retrieve. Use when hop count is unpredictable. See agentic RAG.
- Graph / logic-aware hops — passages linked by relations or pseudo-queries (HopRAG’s retrieve-reason-prune; GraphRAG). Use when the corpus has stable entities and relations. See GraphRAG.
- IRCoT — interleave chain-of-thought with retrieval so each thought can fetch the next fact. See IRCoT.
Rule of thumb: hop-miss needs another retrieval step; composition miss needs better reason-and-verify even when evidence_recall is already 1. Tang and Yang (2024, §4.3) flag query decomposition and LLM agents as the natural next experiments after their naive LlamaIndex baseline — they do not claim a single winner.
How do you measure multi-hop failures on an eval set?
You measure multi-hop failures by scoring evidence-set coverage and answer correctness together, then naming the cause — not by answer accuracy alone. The function below takes a labelled gold evidence set and the ids your retriever returned; it prints hop-miss, composition-miss, or not-multi-hop. Wire the same checks into CI on regression testing once the labels live in a golden test set. Public sets such as MultiHop-RAG and HotpotQA are catalogued under RAG benchmarks.
Before you trust the numbers
MultiHop-RAG’s Hits@10 0.7467 and GPT-4 accuracies 0.56 / 0.89 (Tang and Yang, 2024) are news-domain ceilings on that benchmark, not universal constants. Calibrate thresholds on your own labelled multi-hop slice before you change architecture.
def diagnose_multi_hop(gold_ids, retrieved_ids, *, answer_correct, k=None):
"""Name hop-miss vs composition-miss vs not-multi-hop for one labelled query.
gold_ids -> iterable of evidence document/chunk ids required for the answer
retrieved_ids -> ranked list from your retriever (production top-k, or wider for debug)
answer_correct -> True if the generated answer matches your gold label
k -> optional cutoff; defaults to len(retrieved_ids)
"""
G = set(gold_ids)
if not G:
print("NO GOLD EVIDENCE labelled — cannot diagnose multi-hop")
return
R = list(retrieved_ids) if k is None else list(retrieved_ids)[:k]
R_set = set(R)
hit = G & R_set
evidence_recall = len(hit) / len(G)
print(f"evidence_recall={evidence_recall:.2f} "
f"(hit {len(hit)}/{len(G)} gold ids in top-{len(R)})")
if len(G) == 1 and evidence_recall == 0:
print("CAUSE not-multi-hop -> see /failures/wrong-chunk or /failures/missing-document")
return
if evidence_recall == 0:
print("CAUSE not-multi-hop or total miss -> inspect indexing; not a hop-composition case yet")
return
if evidence_recall < 1:
missing = sorted(G - R_set)
print(f"CAUSE hop-miss (missing {missing}) -> multi-hop retrieval / query decomposition")
return
if not answer_correct:
print("CAUSE composition-miss (all gold evidence present) -> multi-hop / agentic reason+verify")
return
print("PASS evidence complete and answer correct")
Each branch matches one row of the differential table above. Delete the causes you have already ruled out; keep the labelled gold_ids — without them the script cannot distinguish a hop-miss from a composition miss.
What is a multi-hop question in RAG?
A multi-hop question needs evidence from two or more documents (or evidence pieces) before the answer can be composed. Tang and Yang’s MultiHop-RAG benchmark (2024) holds 2,556 such queries with supporting evidence spread across 2 to 4 documents, split into inference, comparison, temporal, and null types.
Why can't single-shot RAG answer questions that need two documents?
Single-shot retrieve-then-generate runs one similarity query against the user question. Chunks that answer the second hop are often not close to that query string, so they never enter top-k. On MultiHop-RAG, even voyage-02 with a strong reranker only reached Hits@10 of 0.7467 (Tang and Yang, 2024).
How do I tell a multi-hop failure from a wrong chunk?
Label the gold evidence set G and the retrieved set R. If the answer needs only one document and that document is missing or the wrong chunk came back, it is a wrong-chunk or missing-document failure. If |G| ≥ 2 and evidence_recall = |G ∩ R| / |G| is between 0 and 1, it is a multi-hop hop-miss. If evidence_recall is 1 and the answer is still wrong, it is a composition miss.
Is multi-hop a retrieval problem or a reasoning problem?
It can be either. Partial evidence_recall means retrieval never fetched the full chain. Full evidence_recall with a wrong answer means composition failed — Tang and Yang (2024) saw GPT-4 at 0.56 accuracy on retrieved chunks versus 0.89 on ground-truth evidence. Measure both before you change the stack.
What benchmark should I use for multi-hop RAG?
MultiHop-RAG (Tang and Yang, COLM 2024; 2,556 queries over a news knowledge base) is built specifically for RAG multi-hop retrieval and generation. Classic multi-document QA sets such as HotpotQA and 2WikiMultiHopQA stress reasoning but overlap more with LLM pre-training data. Catalogue of what each set tests: /evaluation/benchmarks/.
What architecture should I implement first for multi-hop failures?
Match the cause. Hop-miss needs another retrieval step — start with query decomposition (/retrieval/query-decomposition/) or iterative multi-hop retrieval with a stop condition. Composition miss needs stronger reason-and-verify even when all gold evidence is present — agentic loops or interleaved retrieval (IRCoT) are the next step. Primary fix page: /architectures/multi-hop/.