RAG Strategies & Embedding Models
Two separate variables tested independently: retrieval strategy (four alternatives to naive RAG) and embedding model (five models across three providers). Then a third set of experiments combining them — where the results got surprising.
The short answer
Retrieval strategy matters more than any other single variable tested. The most effective approach — agent retrieval, where the LLM searches iteratively — achieves the best results in the entire dataset for undefined jargon (95%), coreference (87%), and scope hedging (73%).
Among fixed strategies, parent-document retrieval consistently recovers 11–20pp on undefined-terms failures. Contextual retrieval makes coreference worse across all providers. Strategy and embedder combinations don't always stack — they can conflict.
One failure mode resists everything: quantifier vagueness (documents that replace specific values with vague approximations) stays near 56–58% regardless of strategy, embedder, or retrieval architecture. The agent searches more but finds nothing — the specific value was never written down.
What each strategy does
Naive RAG
The baseline
Embed the raw question, retrieve the most similar chunks by cosine similarity. Simple, fast, widely used.
HyDE
Broader retrieval
Generate a hypothetical documentation excerpt that would answer the question, then embed that instead of the raw question. Answer-shaped text finds answer-shaped chunks better than question-shaped text.
Multi-query
Rephrase & union
Generate 3 rephrased versions of the question, retrieve for each, union the results. Hedges against any single phrasing failing to match the document's vocabulary.
Parent-document ★
Best for jargon
Retrieve using small paragraph chunks (precise matching), but pass the full parent heading section to the AI (more context). Small chunks for finding; large chunks for reading.
Contextual retrieval ⚠
Amplifies pronoun errors
Before embedding, prepend a one-sentence document-level summary to each chunk. Helps when chunks lack context — but makes pronoun ambiguity worse, because the summarization step has to resolve pronouns and can get them wrong.
Results (claude-haiku, api-sdk-complex)
Scores are average percentage of questions answered correctly. Bold = best for that row. Click any score to see the underlying AI responses.
| Document version | Naive RAG | Contextual | Parent-doc | HyDE | Multi-query |
|---|---|---|---|---|---|
| Clean doc | 100% | 98% | 92% | 100% | 94% |
| Passive voice | 93% | 96% | 92% | 99% | 88% |
| Pronoun ambiguity | 69% | 56% ↓ | 69% | 74% | 74% |
| Undefined jargon | 65% | 76% | 85% ★ | 73% | 66% |
| Vague quantities | 56% | 57% | 57% | 58% | 55% |
| Hedged instructions | 54% | 56% | 60% | 60% | 53% |
Contextual retrieval — confirmed across 3 providers
The coreference finding wasn't a fluke. Every provider tested showed worse scores with contextual retrieval on the coreference-degraded document.
| Model | Naive RAG | Contextual | Change |
|---|---|---|---|
| claude-haiku | 69% | 56% | −13pp |
| gpt-4o-mini | 64% | 57% | −7pp |
| gemini-2.5-flash | 68% | 66% | −2pp |
Parent-document — confirmed across 3 providers
The undefined-terms improvement from parent-document retrieval held across all three providers.
| Model | Naive RAG | Parent-doc | Change |
|---|---|---|---|
| claude-haiku | 65% | 85% | +20pp |
| gpt-4o-mini | 62% | 73% | +11pp |
| gemini-2.5-flash | 61% | 76% | +15pp |
Embedding model comparison — complex doc (naive RAG)
The embedding model is a separate variable from retrieval strategy. Five models were first compared using naive RAG on the complex document with claude-haiku. Two results stood out:
| Version | OpenAI small | OpenAI large | Voyage code-3 | Voyage 3.5 | |
|---|---|---|---|---|---|
| Clean doc | 100% | 100% | 100% | 100% | 100% |
| Passive voice | 93% | 99% | 98% | 92% | 99% |
| Pronoun ambiguity | 69% | 76% ★ | 74% | 74% | 75% |
| Undefined jargon | 65% | 71% | 65% | 75% ★ | 75% ★ |
| Vague quantities | 56% | 58% | 58% | 58% | 58% |
| Hedged instructions | 54% | 55% | 60% | 60% | 61% |
OpenAI large leads on pronoun ambiguity (+7pp) — higher-dimensional representations handle "it could mean either credential" better. Both Voyage models lead on undefined jargon (+10pp over OpenAI small) — their technical training data handles abbreviations that look like code identifiers.
Those haiku findings were then cross-validated with gpt-4o-mini and gemini-2.5-flash on the two most informative embedders:
Voyage 3.5 jargon gains are model-dependent
| Model | OpenAI small | Voyage 3.5 | Change |
|---|---|---|---|
| claude-haiku | 65% | 75% | +10pp |
| gemini-2.5-flash | 61% | 68% | +7pp |
| gpt-4o-mini | 62% | 66% | +4pp |
Voyage 3.5 improves jargon retrieval across all three models, but the magnitude varies significantly — from +10pp for haiku down to +4pp for gpt-4o-mini. The coreference benefit (+3–4pp) is more consistent. The large haiku gain shouldn't be assumed to generalize.
OpenAI large hurts jargon for gpt-4o-mini and gemini
| Model | OpenAI small | OpenAI large | Change |
|---|---|---|---|
| claude-haiku | 65% | 71% | +6pp |
| gemini-2.5-flash | 61% | 55% | −6pp |
| gpt-4o-mini | 62% | 52% | −10pp |
OpenAI large's precision embeddings help haiku retrieve more relevant jargon chunks — but actively hurt gpt-4o-mini and gemini. This isn't just the parent-doc interaction found earlier; it's the embedder itself conflicting with how these models process retrieved content. OpenAI large's coreference benefit (+5–6pp) held consistently across all three models. It is a precision tool: good for disambiguation, risky for vocabulary coverage.
The vague writing floor holds across all embedders and all models (54–61% on the complex document). No embedder recovers information that isn't in the document.
Embedding model comparison — short doc (naive RAG · claude-haiku)
The same three embedders tested on the short document tell a different story about vague writing:
| Version | OpenAI small | OpenAI large | Voyage 3.5 |
|---|---|---|---|
| Clean doc | 100% | 100% | 100% |
| Passive voice | 100% | 100% | 100% |
| Pronoun ambiguity | 89% | 89% | 92% |
| Undefined jargon | 85% | 85% | 89% |
| Vague quantities | 80% | 85% | 85% |
| Hedged instructions | 83% | 84% | 88% |
On the complex document, all five embedders bottomed out at 54–61% on vague writing — a hard floor. On the short document, both Voyage 3.5 and OpenAI large gain +5pp on quantifier vagueness over OpenAI small. The floor is a complexity effect, not an inherent ceiling. A short, single-topic document gives the LLM enough nearby context to partially recover from missing specifics. The complex document — with facts distributed across sections — doesn't. OpenAI large's +7pp coreference benefit from the complex doc doesn't appear here; the short doc has only one credential type, so pronoun ambiguity is a smaller problem.
Strategy × embedder: they don't always stack — and sometimes conflict
Independently optimizing retrieval strategy and embedding model, then combining them, does not reliably produce the expected gains.
Parent-doc + Voyage 3.5: neutral on jargon, complementary elsewhere
Parent-document retrieval (+20pp on undefined terms) and Voyage 3.5 (+10pp on undefined terms) seem like they should be complementary. They aren't — at least not for jargon:
| Version | Parent-doc (OpenAI small) | Parent-doc (Voyage 3.5) | Change |
|---|---|---|---|
| Clean doc | 92% | 100% | +8pp |
| Pronoun ambiguity | 69% | 74% | +5pp |
| Undefined jargon | 85% | 86% | +1pp |
| Hedged instructions | 60% | 60% | 0pp |
The +1pp on undefined terms is effectively nothing. Parent-doc fixes jargon by giving the LLM more context at generation time — once the full parent section is in the prompt, the model can infer abbreviation meanings from surrounding sentences. Voyage 3.5 fixes jargon by improving retrieval matching. When you already have the larger context window, better retrieval adds almost no marginal value for jargon.
Where they are complementary: clean doc hits 100% (+8pp) and pronoun ambiguity improves +5pp. Those failure modes benefit from both better retrieval and more context — they aren't addressing the same problem.
Parent-doc + OpenAI large: the benefit reverses ⚠
OpenAI large gains +7pp on coreference in naive RAG. Parent-doc is strategy-neutral on coreference. Combining them was expected to at least preserve OpenAI large's coreference benefit — instead it erases it:
| Version | Naive (OpenAI large) | Parent-doc (OpenAI small) | Parent-doc (OpenAI large) |
|---|---|---|---|
| Clean doc | 100% | 92% | 99% |
| Pronoun ambiguity | 76% | 69% | 68% ↓ |
| Undefined jargon | 71% | 85% | 75% ↓ |
| Vague quantities | 58% | 57% | 57% |
| Hedged instructions | 55% | 60% | 58% |
Coreference: OpenAI large's +7pp advantage from naive RAG disappears with parent-doc (76% → 68%). In naive RAG, higher-dimensional embeddings retrieve a precise chunk that helps disambiguate pronouns. With parent-doc, retrieval expands to a full section — which introduces more ambiguous pronoun references rather than fewer.
Undefined jargon: Parent-doc + OpenAI large (75%) is −10pp worse than parent-doc + OpenAI small (85%). OpenAI large's precision retrieves the "closest match" parent section — which may not be the section containing the abbreviation definitions. OpenAI small's fuzzier matching casts a wider net that more often captures those definitions.
The takeaway: embedder precision and context expansion are in tension for some failure modes. The same property that makes OpenAI large better at naive RAG (precision) makes it worse than OpenAI small when paired with a strategy that depends on broader context retrieval. Optimizing strategy and embedder separately, then combining, does not produce the expected sum.
What the agent experiment reveals about retrieval failure
Most deployed RAG systems are not agentic. The majority do a single fixed retrieval pass and answer from whatever came back. The agent experiment is useful not primarily as a deployment target, but as a diagnostic: it separates which failures are structurally recoverable from which aren't. That distinction matters because it determines what users actually experience when retrieval goes wrong.
Note: the haiku results that follow are striking, but cross-validation with two other models shows the gains are haiku-specific — gemini-2.5-flash actually regresses on jargon with agent retrieval. See cross-validation below.
What users experience when fixed RAG fails
| Writing problem | What users experience in most systems | Does agentic RAG help? |
|---|---|---|
| Undefined jargon | Silent failure. The relevant section is never retrieved. The model answers from partial context — or falls back on training data. | Yes — 3–4× search calls infer vocabulary iteratively (+30pp) |
| Pronoun ambiguity | Confident wrong answer. The model commits to one reading of "it" and describes it in detail. Users act on an authoritative answer that is incorrect. | Partially — agent searches for each credential separately (+18pp) |
| Vague quantities | Confabulated value. The model is trained on vast data that includes timing values and limits. When retrieval finds no specific number, the model synthesizes a plausible one — stated confidently, not flagged as a guess. | No — the value was never written down (+2pp, noise floor) |
| Scope hedging | Hedged useless answer. Retrieval succeeds, but the model propagates the hedge — users get "it generally depends on your setup" instead of a clear instruction. | Partially — agent finds corroborating context across the doc (+19pp) |
| Passive voice | No meaningful degradation. | N/A |
Accuracy scores by mode (claude-haiku · api-sdk-complex)
The numbers behind the table above. Agent RAG used a search(query) tool callable up to four times per question — it issues a query, reads results, and can refine its phrasing before answering.
| Version | Naive RAG | Agent RAG | Change |
|---|---|---|---|
| Clean doc | 100% | 93% | −7pp |
| Passive voice | 93% | 93% | 0 |
| Pronoun ambiguity | 69% | 87% ★ | +18pp |
| Undefined jargon | 65% | 95% ★ | +30pp |
| Scope hedging | 54% | 73% | +19pp |
| Vague quantities | 56% | 58% | +2pp |
The 95% on undefined jargon is the best result in this entire dataset for claude-haiku — better than parent-doc + Voyage 3.5 (86%), better than any fixed strategy or embedder combination. The agent discovers vocabulary iteratively: it searches for an unknown abbreviation, finds a chunk that uses it in context, then searches again for what to do with it. It never needs to match the jargon on the first try.
Agent retrieval gains are haiku-specific
Cross-validation with gpt-4o-mini and gemini-2.5-flash reveals that haiku's gains do not generalize. The jargon improvement — the headline result above — is driven almost entirely by one model:
| Model | Naive RAG | Agent RAG | Change |
|---|---|---|---|
| claude-haiku | 65% | 95% | +30pp |
| gpt-4o-mini | 62% | 68% | +6pp |
| gemini-2.5-flash | 61% | 57% | −4pp |
Gemini regresses. This suggests the jargon recovery mechanism — iterative vocabulary inference across multiple search calls — is haiku-specific behavior, not a property of agentic retrieval in general. Haiku's smaller context window may force tighter, more targeted queries that happen to work well for abbreviation lookup. Gemini's larger context window may lead it to retrieve noisier chunks across its multiple passes, compounding vocabulary mismatches rather than resolving them.
The coreference (+18pp) and scope hedging (+19pp) haiku results also need cross-validation before generalizing. The finding that vague quantities are unrecoverable (+2pp) held consistently across all three models and does generalize.
Confabulation is the hidden risk
Vague quantities are the highest-priority documentation problem — not because of the accuracy score, but because the failure mode is invisible to users. A model that can't find a specific rotation interval doesn't say "I don't know." It says "rotate every 30 days" with the same confidence it would use if that number were actually in the doc. Users have no signal that they received a synthesized answer rather than a retrieved one.
Scope hedging fails differently. Users get "it generally depends on your setup" — an answer they know they can't act on. Frustrating, but visible. Confabulated values are actionable-seeming and wrong.
The two vague writing types are not the same problem
Scope hedging
54% → 73% (+19pp). "Requests should generally include X where applicable" — the information is hedged but present. The agent finds corroborating chunks: examples, related error codes, conditional requirements. Enough context exists across the document to clarify the hedge. Failure mode is visible to users; an agentic system can often work around it.
Vague quantities
56% → 58% (+2pp). "Rotate periodically." The specific value — "every 90 days" — was replaced and does not exist anywhere in the document. No number of searches can find information that was never written down. The model fills the gap from training data. Users receive a confident specific answer that was never sourced from the actual doc.
Agentic retrieval has real costs
Even when agent retrieval works, it is not free. Undefined jargon required 3–4 search calls per question — roughly 3–4× the latency and budget of a single-pass system. On a clean document, agent mode scores 7pp lower than naive RAG (93% vs 100%), because iterative searching introduces noise: the agent occasionally retrieves suboptimal chunks across its multiple passes.
The implication for production systems: agent retrieval solves vocabulary mismatch well, but the per-query cost scales directly with how often your documents use undefined jargon. That cost is avoidable — it is documentation debt made visible as infrastructure overhead.
Priority order for documentation writers
| Priority | Writing problem | Why |
|---|---|---|
| 1 — Fix first | Vague quantities ("periodically", "roughly quarterly") | Causes confident wrong answers in all systems. No retrieval fix exists. Users can't detect the failure. |
| 2 | Pronoun ambiguity ("it", "this") | Causes confident wrong answers. Most systems don't recover; agentic systems partially do. |
| 3 | Undefined jargon / unexplained abbreviations | Silent failure in most systems. Fixable in agentic systems at 3–4× search call cost. |
| 4 | Scope hedging ("where applicable", "generally") | Produces hedged answers users know they can't act on. Partially fixable with agent retrieval. |
| 5 — Low priority | Passive voice | No meaningful impact on AI accuracy. |