← Back to Blog

There's no single "best" RAG approach

"What's the best RAG approach" is the wrong first question. RAG has several

distinct architectures, and each one solves a different failure mode. The

right approach depends on which failure you're actually hitting, not on

picking the fanciest technique available.

Naive RAG: chunk, embed, retrieve, generate

Split documents into chunks, embed them, retrieve top-k by similarity, stuff

into the prompt, generate. This is where everyone starts, and it's genuinely

fine for small, homogeneous document sets with clear, well-phrased queries.

It breaks down on ambiguous queries, documents with mixed content types

(tables, code, prose), and anything where the literal wording of the

question doesn't closely match the wording in the source text.

Hybrid search: semantic + keyword

Pure vector similarity misses exact-match cases — an error code, a product

SKU, a proper noun — that keyword search (BM25) catches trivially. Hybrid

search runs both and combines the results, which noticeably improves recall

on queries containing specific identifiers that embeddings alone tend to

fuzz over.

Re-ranking

Retrieve a larger candidate set (say, top 20) with a fast method, then apply

a slower, more accurate cross-encoder re-ranker to reorder just those 20

before picking the final top-k. This catches cases where a chunk is

topically similar but not actually the best answer — the two-stage

retrieve-then-rerank pattern consistently outperforms single-stage

retrieval in eval, at the cost of one extra model call.

Query transformation

Users don't always phrase questions the way source documents phrase

answers. Rewriting the query (expanding it, decomposing a multi-part

question into sub-queries, or generating a hypothetical answer to embed

instead of the raw question — HyDE) before retrieval often closes that gap

without touching the index itself.

Agentic RAG

For questions that need multiple retrieval passes — "compare X and Y" needs

two separate lookups, not one — a single retrieve-then-generate pass isn't

enough. An agentic loop that decides whether it has sufficient information

and issues additional retrieval calls when it doesn't handles multi-hop

questions that flat RAG can't — the same pattern behind the

Smart Document Management System

on this site.

How to actually choose

Start naive. Instrument it — log queries, retrieved chunks, and whether the

answer was actually grounded in what was retrieved. The failure pattern you

actually observe tells you which upgrade path is worth the added complexity:

missed exact-match terms → hybrid search; topically-close-but-wrong retrieval

→ re-ranking; questions needing information from multiple places → agentic

RAG. Adding all of it upfront without evidence of which failure you have is

how RAG systems get overengineered before they're even reliable.