Kaneki Logo

Ilyass Ezzam

(KanekiEzz)โ€ขAI Engineer & Full Stack Developer

โ† Back to posts
AI EngineeringRAGMachine LearningSoftware ArchitectureDistributed SystemsLLM

Production RAG Architecture: From Prototype to Production System

2 September 2026ยท40 min read
Production RAG Architecture

Why Tutorial RAG Is Not Production RAG

Every RAG tutorial starts with the same pipeline:

Architecture diagramQueryEmbeddingVector searchContextLLMAnswer

That pipeline is correct. It is also dangerously incomplete.

The moment you take that pipeline to production you immediately face questions no tutorial addresses: What happens when a document changes? How do you ensure one tenant's traffic does not destroy performance for everyone else? How do you handle scanned PDFs? What happens when the retrieved context is insufficient? How do you prevent the system from leaking documents across permission boundaries? How do you control costs when reranking and LLM calls add up at scale?

A production RAG system is a distributed system built around retrieval and generation. The actual architecture looks like this:

Architecture diagramOnline pathOffline pathUsersDocumentsAPI gatewayJob queueRate limitingRaw storageLoad balancerText extractionAutoscalingContent hashOrchestratorChunkingRetrieval serviceMetadata enrichGeneration engineEmbeddingsValidationBlue-green indexingStreaming answerVector database

These two paths โ€” the online query path and the offline ingestion path โ€” must be architected and operated independently. Confusing them is one of the most common early design mistakes.

1. Infrastructure & Gateway

The infrastructure layer is the perimeter of the system. Its job is to protect internal services from uncontrolled traffic, enforce tenant isolation, and provide the operational controls that make everything else manageable.

Component Responsibility Why It Matters
API Gateway Authentication, routing, request validation Single enforcement point for AuthN/AuthZ before requests reach services
Rate Limiting Per-tenant request throttling Prevents a single tenant from saturating retrieval or LLM capacity
Load Balancer Traffic distribution across instances Removes single points of failure; enables horizontal scaling
Autoscaling Dynamic instance provisioning Handles burst traffic without over-provisioning at baseline
Tenant Quotas Per-plan limits on documents, storage, queries Economic and resource fairness across tenant tiers
Tenant Isolation Data and compute separation between tenants Security and correctness โ€” no cross-tenant data leakage

The Noisy Neighbor Problem

In a multi-tenant RAG platform, one badly-behaved tenant can degrade performance for every other tenant on the system.

Imagine a tenant that uploads 50 million documents in one day, or a tenant whose users send 10,000 complex queries per hour. Without isolation, their ingestion jobs saturate the queue workers, their retrieval queries monopolize the vector DB connection pool, and their LLM calls exhaust the token budget โ€” and every other tenant experiences a slowdown they cannot explain and you cannot justify.

The architecture mitigates this through layered isolation:

  • Rate limiting at the API gateway per tenant ID
  • Per-tenant job queues with bounded concurrency for ingestion workers
  • Per-tenant query quotas enforced before hitting retrieval
  • Dedicated vector indexes for large tenants where shared indexes become impractical
  • Resource limits on background workers to cap CPU/memory per job

In a multi-tenant RAG system, protecting the system from one tenant's traffic and data growth is just as critical as retrieval quality. A system that returns excellent answers only when under low load is not a production system.

2. Multi-Tenancy

Multi-tenant RAG has two distinct problems: data isolation (ensuring tenants cannot see each other's documents) and performance isolation (ensuring tenants cannot degrade each other's query latency).

Shared Index vs. Dedicated Index

Most systems start with a shared vector index where each document is tagged with a tenant ID and all queries are filtered by that tenant ID at retrieval time. This works well at small and medium scale.

Architecture diagramVector database (shared)tenant_id = Adoc vectorstenant_id = Bdoc vectorstenant_id = Cdoc vectors

The problem with shared indexes becomes apparent under load: a tenant with 10 million documents creates index pressure that affects retrieval latency for a tenant with 10,000 documents on the same partition. The solution is to migrate large tenants to dedicated indexes:

Architecture diagramVector databaseTenant Adedicated indexShared DBtenants B, D, ETenant Cdedicated index
Strategy When to Use Tradeoffs
Shared index + tenant filter Most tenants, small-medium corpora Simple ops; shared noisy neighbor risk
Per-namespace partitioning Medium tenants with distinct access patterns Good isolation; manageable index count
Dedicated indexes Large enterprise tenants Full isolation; higher operational overhead

Permission Metadata on Documents

Every document stored in the vector index must carry metadata about its ownership and access policy. Permission filtering must happen inside the retrieval query, not as a post-processing filter after documents are returned.

Retrieving documents and then discarding unauthorized ones is both inefficient and can create subtle security bugs when the return count is used to infer the existence of documents a user is not supposed to know about.

3. Ingestion Pipeline

The ingestion pipeline transforms raw documents into searchable vectors. It must be asynchronous, fault-tolerant, idempotent, and observable.

Architecture diagramDocument uploadreturns HTTP 202 immediatelyJob queueRedis / SQS / KafkaRaw storageS3 / GCS / BlobText extraction + OCRContent hash checkChunkingMetadata enrichmentEmbedding generationIndex validationVector DB write

Why Ingestion Must Be Asynchronous

Document processing is not a fast operation. A 100-page PDF can require OCR over scanned pages (seconds per page), text cleaning, chunking into hundreds of pieces, embedding each chunk, and writing to the vector database with metadata.

The upload request must return immediately with an accepted status and a job ID. Any architecture that makes the HTTP upload request wait for full processing will time out under realistic documents.

Queue Architecture

The queue is not just a convenience โ€” it is a reliability and backpressure mechanism:

  • Retry on failure: if an OCR worker crashes mid-job, the job is not lost
  • Dead letter queue: persistently failing jobs are isolated and can be inspected
  • Concurrency control: per-tenant concurrency limits prevent one tenant from flooding workers
  • Priority lanes: small documents can be prioritized over large batch ingestions
  • Backpressure: queue depth signals when to scale workers horizontally

4. Document Extraction

Extraction quality is the upstream determinant of everything downstream. The relationship is linear and unforgiving:

Architecture diagramBad extractionBad chunksBad embeddingsBad retrievalInsufficient contextBad answeror hallucination
Format Challenge Approach
PDF (digital) Complex layouts, headers/footers, multi-column PyMuPDF, pdfplumber, layout-aware parsing
PDF (scanned) No machine-readable text OCR (Tesseract, AWS Textract, Google Document AI)
HTML Navigation noise, ads, boilerplate Readability extraction, semantic tag selection
Word / DOCX Tables, embedded images, styles python-docx, Pandoc conversion
Markdown Code blocks, frontmatter Structure-preserving parser
Spreadsheets Tabular data without narrative context Row/column serialization with headers

Modern document AI services (AWS Textract, Google Document AI) go beyond raw character recognition โ€” they identify tables, form fields, and document structure. For knowledge-heavy documents, investing in high-quality extraction pays off every time a retrieval query hits those documents.

5. Content Hashing

Re-processing a document that has not changed wastes embedding API cost, compute time, and index write capacity. Timestamps are insufficient because they change on file copy, download, or metadata update without any actual content change.

Architecture diagramDocument arrivesCompute SHA-256 of contentCompare with stored hashchanged?yesnoReprocessfull pipelineSkipno cost

For very large documents, chunk-level hashing allows incremental updates: only the chunks that changed need to be re-embedded and re-indexed. This becomes meaningful at scale when documents are frequently updated (living knowledge bases, quarterly reports with appended sections).

6. Chunking

Chunking is not preprocessing. It is one of the most consequential architectural decisions in a RAG system because the chunks are what the retrieval system returns to the LLM as context. Chunks that are too large dilute relevance. Chunks that are too small lose necessary context.

Strategy Description Best For
Fixed-Size Split on character/token count with overlap Simple corpora, fast baseline
Recursive Split on paragraphs โ†’ sentences โ†’ characters Prose documents with clear structure
Semantic Group sentences by embedding similarity Documents with topic shifts within sections
Proposition-Based Extract atomic factual claims High-precision QA over dense factual content
Structure-Aware Respect headings, lists, code blocks Technical docs, Markdown, DOCX

Overlap between consecutive chunks (typically 10โ€“20% of chunk size) prevents information loss at chunk boundaries. Without overlap, a sentence split across two chunks may appear in neither when retrieved individually.

Chunking strategy is a hyperparameter of the retrieval system. Treat it like one โ€” evaluate retrieval quality under different strategies before committing to production.

7. Embeddings & Embedding Versioning

Each chunk is transformed into a dense vector using an embedding model. That vector is what the retrieval system searches over.

Architecture diagramText chunkEmbedding modelFloat vector[0.021, -0.483, 0.107, ...]Vector database

The Embedding Version Problem

Embedding models change. Providers release new versions. Teams switch providers. The embedding space of one model is not compatible with another.

If you update your embedding model without re-indexing all documents, you create a split vector space:

Architecture diagramOld documentsModel V1Space ANew documentsModel V2Space BQuerySpace Bold documents are invisible: their vectors live in a different space

This failure is silent. Retrieval still returns results โ€” they just progressively exclude your older documents, creating a recency bias that is extremely difficult to debug without explicit embedding version tracking.

Production requirements for embedding management:

  • Tag every stored vector with the model name and version that produced it
  • Track the embedding model version in a central registry
  • Trigger a full re-indexing event when the model changes, via blue-green indexing
  • Never mix vectors from different models in the same index partition
  • Test retrieval quality before and after any model migration

8. Blue-Green Indexing

When you need to change anything fundamental about your vector index โ€” embedding model, chunking strategy, metadata schema, dimension count โ€” you cannot safely modify the live production index in place. Documents disappear mid-migration. Queries return inconsistent results. There is no rollback path.

Blue-green indexing solves this by treating the index like an immutable deployment artifact:

Architecture diagramIndex V1LIVE โ€” 100% trafficBuild new indexin backgroundIndex V2SHADOW โ€” 0% traffic, new modelOffline evaluationcompare precision/recall vs V1Canaryroute 5% of traffic to V2Full cutoverV2 serves 100% of trafficKeep V1rollback window, TTL 72h

Changes that require blue-green indexing: embedding model version change, vector dimension change, chunking strategy change, metadata schema change that affects filtering.

Changes that do not require blue-green indexing: adding new documents (incremental insert), updating document metadata not used in retrieval filters, changing retrieval parameters at query time.

9. Retrieval Service

The retrieval service is the latency-critical path of the system. Every millisecond added here directly increases user-facing latency. It must be designed for both speed and correctness.

Architecture diagramQuerySemantic cachecheck firstPermission filter constructionHybrid searchvector + BM25 in parallelResult fusionRRF or weighted mergeCross-encoder rerankingtop candidates onlyTop-K chunks

10. Semantic Caching

Before running the full retrieval pipeline, check whether a semantically similar query has already been answered. This is not keyword matching โ€” it is embedding-based similarity over a cache of recent queries.

Architecture diagramIncoming queryEmbed queryCosine search over query cachesimilarity > threshold?yesnoReturn cached resultnear-zero latencyRun full retrieval pipeline

In applications with predictable query distributions (help desks, FAQ systems, customer support), cache hit rates of 30โ€“60% are realistic.

Cache Isolation Requirements

The cache is not universally safe to share across tenants. If Tenant A queries "What is our refund policy?" and the answer is cached, Tenant B must not receive that cached result even if they ask the exact same question โ€” because the cached retrieval result contains Tenant A's documents.

Cache keys must incorporate tenant ID and user permission scope. A cache hit is only valid if the retrieved documents in the cache are accessible to the requesting user.

11. Permission-Aware Retrieval

Authorization in RAG is not an afterthought. It is a hard architectural requirement.

Architecture diagramUserIdentity resolutionJWT / sessionTenant + user + group membershipsBuild permission filterApply filter inside vector querypre-filterOnly authorized docs enter ANN searchResults returned
Approach Method Risk
Pre-filter (correct) Permission filter applied inside the ANN query Safe โ€” unauthorized docs never enter search space
Post-filter (dangerous) Retrieve broadly, then discard unauthorized results Leaks information about document existence; wastes compute

Post-filtering leaks information: if you retrieve 100 documents and discard 95 as unauthorized, the user can infer that 95 relevant documents exist in the system. In regulated environments (legal, medical, financial), this is a security violation even if no document content is disclosed.

Dense vector search and sparse keyword search have complementary failure modes. Production retrieval systems use both.

Architecture diagramQueryVector searchdense / semanticBM25sparse / lexicalResult fusion

Vector search excels at semantic understanding. It correctly retrieves documents that express the same concept with different words. "How do I cancel my subscription?" will match a document titled "Terminating your account" even without lexical overlap.

BM25 excels at exact term matching. It is the correct tool for queries involving:

  • Product IDs and SKUs: SKU-8472-XL
  • Error codes: ECONNREFUSED, ORA-01403
  • Ticket numbers: JIRA-1234
  • Usernames and identifiers
  • Exact technical terms and acronyms
  • API method names: getUserProfile

A pure vector search system will fail on these queries because embedding models generalize away exact identifiers. Production systems combine both.

13. Result Fusion

Dense and sparse search return results with incompatible scores (cosine similarity vs. BM25 relevance score). Before reranking, these must be merged into a single ranked candidate list.

Reciprocal Rank Fusion (RRF) is the standard approach. It uses the rank position of each document in each result list (not the raw score), which makes it robust to score scale differences:

Architecture diagramVector resultsBM25 resultsRRF fusionCandidate set

14. Cross-Encoder Reranking

Retrieval is designed to be fast and broad. Reranking is designed to be slow and precise. These are deliberately separate stages.

Architecture diagramHybrid searchTop 100 candidatesfast, approximateCross-encoder modelevaluates query + document jointlyTop 5 re-ranked resultsslow, preciseGeneration

Bi-encoder (used in vector search): the query and document are embedded separately. Fast, but the model cannot see the interaction between them.

Cross-encoder: the query and document are passed together as a pair. The model scores relevance with full attention across both. Dramatically more accurate, but cannot scale to millions of documents.

Use bi-encoders for the broad retrieval pass (milliseconds over millions of documents), then use cross-encoders only over the small candidate set (tens of milliseconds over ~100 documents). Do not run a cross-encoder over 10,000 documents.

15. Orchestrator / Agent Layer

The orchestrator sits between the infrastructure layer and the retrieval/generation services. Its job is to decide, for each query, what the system should do next.

Architecture diagramUser queryAnalyze queryneed retrieval?noyesGenerate directlyRetrieveEvaluate contextcontext quality?goodweakmissingGenerateRewrite queryretry, limit: 2Web searchthen generate

What the orchestrator decides on every request:

  • Does this query need retrieval? Conversational queries, math, and general knowledge within the model's training may not require retrieval.
  • Which knowledge source? Internal corpus, a specific tenant namespace, web search, or a combination.
  • Is the retrieved context sufficient? After retrieval, evaluate whether the context contains enough information to answer.
  • Should the query be rewritten? If retrieval returns weak results, a rewriter can produce a more specific or decomposed query.
  • Which model should answer? Based on query complexity and retrieved context size, select from the model routing options.
  • Should the answer be regenerated? If the faithfulness check fails, trigger a retry.

16. Query Rewriting

The first retrieval attempt often fails because user queries are vague, conversational, ambiguous, missing domain-specific terminology, or dependent on prior conversation context.

Architecture diagramโ€œWhat about the pricing for enterprise?โ€Query rewriterโ€œWhat are the enterprise tier pricing, features, and seat limits?โ€Retry retrieval with improved query

Query rewriting strategies:

  • HyDE: generate a hypothetical answer and use its embedding as the retrieval query
  • Query decomposition: break a multi-part question into sub-queries and retrieve for each
  • Terminology expansion: add domain synonyms and related terms
  • Conversation contextualization: incorporate recent turns to resolve ambiguous references

Always enforce a retry limit (typically 2โ€“3 attempts). Without a limit, a query that consistently fails retrieval will trigger an infinite rewrite loop that burns LLM tokens and adds unbounded latency.

17. Retrieval Evaluation (Online)

After retrieval, the system evaluates the quality of the retrieved context before passing it to generation. This is an online, per-query check โ€” not offline batch evaluation.

Architecture diagramRetrieved chunksContext evaluatorchecks relevance, coverage, confidenceoutcome?Goodproceed to generationWeakrewrite query and retryMissingfall back to web search

This evaluation can be lightweight (threshold on reranking scores) or model-based (a small classifier or LLM judge). For latency-sensitive applications, prefer threshold-based approaches with LLM-based evaluation reserved for ambiguous cases.

18. Web Search Fallback

Private knowledge bases are never complete. Questions about recent events, external companies, new product releases, or general world knowledge will not be answered by an internal corpus.

Architecture diagramQuery against internal corpusContext: missingweb search allowed for this tenant?yesnoWeb search โ†’ generationclearly citing web sourceReturn โ€œI donโ€™t knowโ€honest, no hallucination

Web fallback must be policy-controlled. Some tenants or query types should never reach external sources (regulated industries, confidential-only systems). The orchestrator must check the tenant's web search policy before triggering it.

19. Generation Engine

Once retrieval has provided sufficient context, the generation engine prepares, routes, generates, validates, and streams the response.

Architecture diagramRetrieved chunksContext shapingcompress, order, deduplicatePrompt assemblyPrompt cache checkModel routerLLMFaithfulness checkfaithfulness passed?passfailStream answerRetry / rewrite

20. Context Shaping

Retrieval quality is necessary but not sufficient for good generation. The retrieved chunks must be shaped into an effective context window before being sent to the LLM.

  • Deduplication: if two chunks from the same section were retrieved, sending both wastes tokens without adding information.
  • Ordering: place the most relevant chunk first. LLMs attend more strongly to content at the beginning and end of the context window.
  • Compression: a compression model can extract only the sentences directly relevant to the query, reducing token count without losing the answer.
  • Token budget management: the total context (system prompt + retrieved chunks + conversation history + query) must fit within the model's context window with room for the response. Exceed it and the model truncates โ€” usually from the middle.

21. Model Routing

Not every query requires the most capable and expensive model.

Architecture diagramQueryModel routerquery complexity?Simple factual lookupโ†’ fast, cheap modelModerate reasoningโ†’ mid-tier modelComplex multi-stepโ†’ most capable model

Model routing can reduce LLM cost by 40โ€“70% in applications where the majority of queries are simple factual lookups, while maintaining quality for queries that genuinely require more capable models.

22. Prompt Caching

Prompt caching is distinct from semantic retrieval caching and solves a different problem.

Cache Type What Is Cached Benefit
Semantic cache Retrieval results for similar queries Avoids re-running retrieval pipeline
Prompt cache KV cache for repeated prompt prefixes at the LLM provider Reduces input token processing cost for long system prompts

When the same prompt prefix is sent repeatedly, the provider can reuse the KV cache from the first call, reducing TTFT and cutting input token cost significantly. This is most impactful for RAG systems with large system prompts or where the same document chunks are frequently included in context.

23. Faithfulness & Hallucination Detection

A production RAG system should not blindly trust the LLM to stay grounded. A faithfulness check verifies that generated claims are supported by the retrieved evidence before the response is streamed.

Architecture diagramGenerated answerFaithfulness checkeach claim checked against retrieved chunksall claims supported?yesnoStream answerRetry generationwith stronger grounding instruction

Implementation options:

  • NLI (Natural Language Inference): a smaller, fast model trained to detect entailment between a retrieved chunk (premise) and a generated claim (hypothesis). Low latency, cheap to run.
  • LLM-as-judge: send the generated answer plus retrieved context to an LLM and ask it to assess faithfulness. More accurate, higher cost and latency.
  • Citation-forcing: instruct the model to cite the source chunk for every claim. If a claim has no valid citation, flag it.

24. Streaming

Streaming does not reduce the time until the last token is generated. It reduces the time until the first token reaches the user.

For a response that takes 3 seconds to generate: without streaming, the user waits 3 seconds and sees the full answer appear at once. With streaming, the user sees the first word in ~300ms and reads the answer as it is written. The actual computation time is identical. The perceived latency is dramatically different.

25. Where Production RAG Actually Breaks

A production RAG system can fail in ways not caught by unit tests or integration tests. These failure modes require architectural mitigation, not just better code.

Failure Mode What Happens Architectural Mitigation
Noisy Neighbor One large tenant saturates retrieval or ingestion capacity for all others Per-tenant rate limits, dedicated indexes, concurrency caps on workers
Ingestion Failure Worker crashes mid-document; document is partially indexed or not indexed Idempotent jobs, dead letter queue, job status tracking with re-queueing
Ingestion Drift Old documents chunked with v1 strategy; new documents with v2; quality degrades silently Embed chunking version in chunk metadata; blue-green reindex when strategy changes
Embedding Version Mismatch Query uses model V2; half the index uses model V1 vectors; old docs become unretrievable Embedding version tagging; blue-green indexing on model change; retrieval quality monitoring
Bad Retrieval Semantically similar documents returned but do not contain the answer Cross-encoder reranking; retrieval quality evaluation; query rewriting
Permission Leak A user retrieves a document they are not authorized to see Pre-filter enforcement at query time; never post-filter; access control audits
Insufficient Context Retrieval returns too few relevant chunks; LLM cannot answer correctly Context sufficiency evaluation; query rewriting; web fallback
Hallucination LLM generates a plausible-sounding answer not supported by retrieved chunks Faithfulness check; NLI-based claim verification; retry on failure
Retry Loop Query rewriting and retrieval retry loop runs indefinitely; cost explodes Hard retry limit (2โ€“3 max); circuit breaker; fallback to "I don't know"
Cost Explosion Expensive operations run far more times than expected Model routing; semantic caching; retry limits; per-tenant cost budgets
Vector DB Outage Retrieval is unavailable; all queries fail Circuit breaker; fallback to BM25 only; graceful degradation messaging
Queue Failure Ingestion queue is unavailable; uploaded documents are not processed Queue durability (persistent, not in-memory); dead letter queue; status API for callers
Stale Index Documents updated at source but not re-indexed; retrieval returns outdated content Event-driven ingestion on document change; content hash comparison; freshness metadata
Context Window Overflow Retrieved chunks + system prompt exceed model context limit; content silently truncated Token budget enforcement in context shaping; dynamic top-k based on chunk size
Latency Spike A single slow external dependency causes cascading latency for all queries Per-component timeouts; P95/P99 latency monitoring; timeout-triggered fallbacks

26. Observability

A RAG system is a pipeline with multiple components, each of which can degrade independently. Observability must span the entire pipeline, not just the LLM call.

Signal Type Why It Matters
Retrieval latency (P50/P95/P99) Metric Detect vector DB degradation before users notice
Retrieval relevance score distribution Metric Detect embedding drift or chunking degradation
Generation latency (TTFT, total) Metric Separate LLM latency from retrieval latency
Faithfulness check pass rate Metric Alert when hallucination rate rises
Semantic cache hit rate Metric Measure cache effectiveness; guide strategy tuning
LLM token usage (input/output per query) Metric Cost tracking; alert on unexpected token growth
Per-tenant latency breakdown Metric Identify noisy neighbors; enforce SLAs per tier
Ingestion job success/failure rate Metric Alert on pipeline failures before users report missing docs
Queue depth Metric Trigger autoscaling of ingestion workers
Query-to-answer trace Trace End-to-end visibility for debugging a specific query
Rewrite attempts per query Metric Alert on repeated retrieval failures; detect bad query patterns
Web fallback trigger rate Metric Indicates gaps in corpus coverage

Every query should produce a distributed trace that captures: time spent in each pipeline stage, the cache hit/miss decision, which documents were retrieved and their scores, which model was selected, and whether faithfulness passed. When a user reports a bad answer, the trace lets you answer: was retrieval the problem? Was the model the problem? Did context shaping lose the relevant chunk?

27. Evaluation

Evaluation is not the same as monitoring. Monitoring tracks system health in real time. Evaluation measures whether the system is actually doing its job correctly.

Offline Evaluation

Run periodically โ€” before deployments, after corpus changes, after model changes:

Metric Measures
Retrieval Precision@K What fraction of top-K results are relevant?
Retrieval Recall@K What fraction of relevant docs were retrieved in top-K?
MRR (Mean Reciprocal Rank) Is the most relevant document ranked first?
Answer Faithfulness Are all generated claims supported by retrieved context?
Answer Relevance Does the answer actually address the question?
Context Precision Are the retrieved chunks actually used in the answer?

Online Evaluation

Running continuously on sampled live traffic:

  • Implicit feedback: did the user follow up with a clarification? (signal of a bad answer)
  • Explicit feedback: thumbs up/down on answers
  • Retrieval score distributions: are scores drifting over time?
  • Faithfulness check pass rate on sampled responses
  • Human review queue for low-confidence answers

You cannot evaluate a RAG system by asking "Does the answer look good?" That is a demo standard, not a production standard. Production evaluation requires measurable metrics over representative query sets, tracked over time, with alerts when they degrade.

28. Cost Control

RAG is an economic system. Every operation in the pipeline has a cost, and those costs compound across the number of queries.

Architecture diagramPer-query cost stackQuery embeddingSemantic cache check~zero on HITVector DB queryBM25 queryCross-encoder rerankingQuery rewrite (LLM)if triggeredWeb searchif triggeredLLM generationFaithfulness check

A query that triggers 2 retrieval retries + web search + a powerful model can cost 10โ€“20x more than a simple cached query.

Lever Cost Reduction Quality Impact
Semantic caching High (30โ€“60% of queries cached in some apps) None (cache serves identical results)
Prompt caching Medium (reduces input token cost) None
Model routing High (40โ€“70% LLM cost reduction) Minimal if routing is accurate
Retry limits High (prevents 5โ€“10x cost multipliers) Slight increase in "I don't know" rate
Re-embed only changed docs High for frequently updated corpora None
Batch ingestion Medium (batch embedding APIs are cheaper) None
Per-tenant cost budgets Prevents runaway costs per tenant Graceful degradation when budget exhausted

The goal is to optimize the four-dimensional tradeoff:

Architecture diagramQualityLatencyReliabilityCost

Maximizing all four simultaneously is impossible. The architecture should make the tradeoff explicit and configurable rather than implicitly collapsing it to "always use the best model with no caching."

29. Complete Architecture

Online Path

Architecture diagramUsersInfrastructure & gatewayauth, rate limiting, autoscaling, tenant isolationOrchestrator / agentanalyze, decide, rewrite, retry, web policyRetrieval serviceWeb searchpolicy-controlledGeneration enginecontext shaping, model router, LLM, faithfulness, streamingAnswer

Retrieval Service Detail

Architecture diagramRetrieval serviceSemantic cachePermission filter (pre-filter)Vector searchBM25RRF fusionCross-encoder rerankingTop-KTenant indexes

Offline Path

Architecture diagramDocument uploadHTTP 202 accepted immediatelyJob queuedurability, retry, DLQ, priority lanesRaw storageS3 / GCSText extraction / OCRContent hash checkskip if unchangedChunkingstrategy + overlapMetadata enrichmentEmbedding generationversioned, taggedBlue-green indexingbuild, validate, switchVector databaseper-tenant isolation

30. Production Mindset

The core of RAG has not changed:

Architecture diagramDocumentsChunksEmbeddingsRetrievalContextLLMAnswer

That core is what tutorials teach, and tutorials are correct.

What tutorials do not teach is the layer that must exist around that core for the system to work reliably, securely, and economically at scale:

Layer What it does
Infrastructure Controls access, traffic, and tenant isolation
Async ingestion Decouples document processing from query serving
Content hashing Avoids unnecessary re-processing
Chunking strategy Determines retrieval unit quality
Embedding versioning Prevents silent retrieval degradation
Blue-green indexing Enables zero-downtime index evolution
Semantic cache Eliminates repeated retrieval cost
Permission filters Enforces authorization at query time
Hybrid search Handles both semantic and lexical queries
Cross-encoder rerank Improves precision after broad retrieval
Orchestration Adaptive query handling, not rigid pipelines
Query rewriting Recovers from failed retrieval attempts
Context shaping Maximizes generation quality within token limits
Model routing Balances quality and cost per query
Prompt caching Reduces LLM input processing cost
Faithfulness checks Detects hallucinations before streaming
Observability Makes the pipeline debuggable
Evaluation Measures whether the system actually works
Cost control Makes the system economically viable

None of these are optional enhancements. In a production RAG system serving real users with real data under real load, each one addresses a failure mode that will occur.

Thank you!
โ† All postsBrowse tags โ†’