← All notes

RAG & Retrieval

Building Production RAG Systems

Building Production RAG Systems

Retrieval-augmented generation (RAG) has become the go-to pattern for grounding LLMs in domain-specific knowledge. But moving from a prototype to a production system requires careful attention to embedding quality, retrieval relevance, and evaluation practices.

The Core RAG Loop

At its simplest, RAG is:

  1. Indexing: Chunk documents, embed them, store in a vector database
  2. Retrieval: User query → embed → find similar chunks
  3. Generation: Combine retrieved chunks + query → LLM → response

The quality of your final response is bounded by the quality of what you retrieve.

Embedding Models Matter

Your choice of embedding model directly impacts retrieval quality. Some considerations:

  • Dimensionality: Smaller dims = faster retrieval, larger dims = richer representations
  • Domain specificity: Generic embeddings (OpenAI) vs. domain-tuned (BGE, E5)
  • Multilingual needs: Models like BGE-M3 handle 100+ languages

Evaluating Embeddings

Don't just assume your embedding model is good. Measure:

  • Mean Reciprocal Rank (MRR): Position of first relevant result
  • Hit Rate: Percentage of queries with at least one relevant result in top-k
  • mAP (Mean Average Precision): Weighted average of precision at each position

Set baselines and iterate. A 10% improvement in retrieval quality often translates to 20%+ improvement in final answer quality.

The Chunking Problem

How you split documents drastically affects what you can retrieve:

  • Too small: Lost context, increased retrieval noise
  • Too large: Can't fit in context, may dilute signal

Most teams end up with overlap-aware chunking — chunks of 512-1024 tokens with 20% overlap.

Evaluation at Scale

Production RAG needs continuous evaluation:

  • Golden dataset: Hand-curated Q&A pairs grounded in your docs
  • Automated metrics: Embed reference answers, compute similarity
  • Daily runs: Track 1M+ inferences/day, aggregate by query pattern
  • Explainability: Show stakeholders why each answer was given

Without this, you ship broken retrievals silently.

Common Pitfalls

  1. Cache staleness: Updated docs aren't reflected in vector DB
  2. Embedding drift: Models change, old embeddings become misaligned
  3. Context window overflow: Retrieved chunks exceed LLM context limits
  4. No relevance filtering: Bad retrievals make LLM hallucinate more

Next Steps

Start with a small golden dataset (50-100 examples), measure your MRR/Hit Rate, then iterate on embedding model and chunking strategy. Don't scale to millions of documents until retrieval quality is locked in.