Hasina Razafintsalama

Hasina RAZAFINTSALAMA

← Back to Blog
AI & RAG

RAG in Production: Monitoring, Costs, and Maintenance

Getting a RAG pipeline to work in a demo is the easy part. Running one reliably in production is a different job: cost visibility, index maintenance, embedding-model migration, and alerting on silent retrieval failures.

2026-07-11·11 min

The architecture patterns (hybrid retrieval, re-ranking, agentic RAG) get a system working well. Running it reliably is a separate set of problems: knowing what each query costs, keeping the index in step with a changing corpus, and catching failures that throw no error but quietly return nothing useful.

The main failure mode: silent retrieval failure

Most RAG production incidents are not the LLM being wrong. They are the retrieval step returning an empty set or irrelevant chunks, after which the model answers from its own training data or hedges, and nothing in the logs looks broken. Treat retrieval health as a first-class signal: alert on empty result sets, on a drop in average retrieval score, and on a sudden change in how often the model says it does not know.

Metrics to track

Measure retrieval and generation separately, per query, attributed to a user or tenant. A slow or expensive query is either a slow vector search or a slow LLM call, and without separate numbers you are guessing which stage to fix.

MetricWhat it tells youAlert when
Retrieval p95 latencyVector search or index healthIt rises without a traffic change
Generation p95 latencyLLM provider healthIt rises across all queries
Empty retrieval rateIndex staleness or a broken filterIt goes above your baseline
Tokens per query (avg)Chunking or prompt regressionIt jumps after a deploy
Cost per queryOverall efficiencyIt drifts up week over week
"I do not know" rateRetrieval qualityIt moves sharply in either direction

Where the money goes, and the levers

Three cost centres: embeddings at ingestion (one-off per document, cheap), the vector database (fixed, self-hosted or managed), and per query one embedding call plus one generation call. The generation call dominates. The levers, in order of impact: cache frequent and near-identical questions, trim the retrieved context and the prompt, use a smaller model for simple queries and reserve the large one for hard ones, and cap the number of retrieved chunks.

Index maintenance: the corpus changes, the index must too

Re-embed incrementally when documents change; never re-embed the whole corpus on every update, that cost scales badly. Remove deleted documents from the index rather than leaving stale results behind, and schedule a full rebuild periodically as a safety net against silent drift between the source and the index.

Migrating the embedding model without downtime

Vectors from different embedding models are not comparable, so switching models means re-embedding the entire corpus. Do it as a blue-green switch: build the new index in parallel, validate it against your evaluation set, then flip a config value to cut traffic over. Never mutate the live index in place.

python
# Versioned index name, switched via config, never mutated in place
ACTIVE_INDEX = "documents_v2"  # was "documents_v1" before the model change

def get_collection():
    return vector_store.get_collection(ACTIVE_INDEX)

Rate limiting, backpressure, and a circuit breaker

Protect your provider quota with per-user and per-key rate limits, and return a clear 429. Queue burst traffic instead of dropping it. Add a circuit breaker that falls back to a cached or degraded response when the provider itself is down or throttling you, so one upstream outage does not become your outage.

Evaluation does not stop at launch

Keep a small set of canary questions with known good answers and run them on a schedule against production. They catch drift that aggregate metrics miss: a document that fell out of the index, a chunking change that quietly hurt one topic, a provider model update that shifted behaviour.

Most RAG production incidents are the retrieval pipeline silently returning nothing useful, not the LLM being wrong. Alert on retrieval health as seriously as you alert on API uptime.

FAQ

What is the main failure mode of a RAG system in production?
Silent retrieval failure: the retrieval step returns an empty or irrelevant set, and the model then answers from its training data or hedges, with nothing in the logs looking broken. Monitor empty result rate, average retrieval score, and the rate at which the model says it does not know.
How much does a RAG system cost to run in production?
Embeddings at ingestion are a cheap one-off. The recurring costs are the vector database (fixed) and, per query, one embedding call plus one generation call, with generation dominating. At modest volume it is tens to low hundreds of dollars a month; caching and prompt trimming keep it flat as usage grows.
How do I reduce the cost of a RAG system?
In order of impact: cache frequent and near-identical questions, trim the retrieved context and the prompt, route simple queries to a smaller model and keep the large one for hard questions, and cap the number of retrieved chunks. Model choice and caching move the bill the most.
How do I keep a RAG index up to date?
Re-embed incrementally as documents change, remove deleted documents from the index rather than leaving stale entries, and run a full rebuild on a schedule as a safety net against drift between the source and the index.
How do I change embedding model without breaking everything?
Vectors from different models are not comparable, so you must re-embed the whole corpus. Build a new versioned index in parallel, validate it against your evaluation set, then switch traffic with a config change. Never mutate the live index in place.

A RAG system that works in a demo and one that survives production are different engineering problems. The gap between them is almost entirely monitoring, index maintenance, cost control and failure handling, not smarter prompts.

Need help with this topic? AI & RAG Integration

Discover this service