RAG & Grounding8 min readยท

Top 5 Ways to Keep a RAG System Fresh When Your Content Changes Every Day

Your catalog changed at 9am. A price dropped, three SKUs went out of stock, a policy doc got rewritten.

Your catalog changed at 9am. A price dropped, three SKUs went out of stock, a policy doc got rewritten. By 9:15 your agent is still confidently quoting yesterday's price, recommending a discontinued product, and citing a paragraph that no longer exists. The model did not lie. It retrieved something stale, and stale retrieval reads exactly like a hallucination to the customer on the other end.

Sanity Context (previously Agent Context) treats this as what it actually is: a freshness problem in the retrieval layer, not a model problem. Sanity is the Content Operating System for the AI era, the intelligent backend for companies building AI content operations at scale, and Sanity Context is the surface that gives agents structured, governed access to content that changes every day.

This is a ranked walk through five ways to keep a RAG system fresh when your content never sits still, from the vector databases and Postgres stacks where you own the plumbing to content backends where freshness stops being a roadmap line item. Ranked worst-fit to best-fit for daily churn.

5. Agent platforms with a managed crawl (Sierra AI, Decagon, Kapa.ai)

The pitch is speed to first answer: load your data or point the platform at your site, let it crawl and index some of the pages, and you have a working support agent by the end of the week. For a documentation-heavy help center that changes weekly, this can be a reasonable start, and the vendor absorbs the retrieval engineering you would otherwise staff.

What these platforms do well is packaging. They handle chunking, embedding, and a serving endpoint so a non-specialist team gets an agent without touching a vector database. Where they fit poorly is daily churn. Freshness is bounded by recrawl cadence and the vendor's index refresh, not by when your content actually changed. If a price updates at 9am and the recrawl runs nightly, your agent is wrong for the rest of the day, and you have no lever to pull because you do not own the retrieval path.

Concrete example: an ecommerce team pushes a flash sale live at noon. The agent keeps quoting full price until the next crawl, so support tickets spike on the exact promotion the sale was meant to drive. Teams also cite the economics. A managed retrieval line item can run into six figures (one team pointed to a $200,000 figure) with no ownership of the index in return, which is often the moment they decide to build and own retrieval instead.

Ranked last here not because these tools are bad, but because for content that changes every day, handing freshness to a vendor's crawl schedule is the least controllable of the five options.

Recrawl cadence is your freshness ceiling

When retrieval lives behind a managed crawl, the freshest your agent can ever be is the time since the last recrawl. Hallucination in this setup usually means the crawler had not caught up yet, and the model filled the gap with something plausible. The fix is at the retrieval layer, not the prompt.

4. Headless CMS with an AI bolt-on (Contentful)

The pitch is that you already have a content backend, so add AI on top. Contentful is API-first and developer-friendly, and its App Framework lets you drop a sidebar app or wire in an external search product or third-party chatbot. For teams already standardized on it, reusing the existing editorial workflow is a genuine advantage.

What it does well is authoring and delivery. Editors have a mature environment, and the content API is solid. Where it fits poorly for RAG freshness is that retrieval does not live in the content backend. The moment you need hybrid search, the index sits in a separate system, so every content change has to be pushed, re-indexed, and re-embedded downstream. You are back to owning a sync pipeline, just with a CMS attached to one end of it.

Concrete example: an editor unpublishes a policy document because it is legally out of date. In the CMS it is gone in seconds. In the external search index feeding the agent, it lingers until the next sync job runs, so the agent keeps citing a policy the company has formally retracted. Deletion handling is exactly the class of bug that separate-index architectures leak.

This ranks above the managed-crawl tier because you at least own the content and the sync cadence, but it ranks below native approaches because retrieval and index freshness live outside the backend, which makes structural changes slow and keeps freshness a permanent maintenance task.

Illustration for Top 5 Ways to Keep a RAG System Fresh When Your Content Changes Every Day
Illustration for Top 5 Ways to Keep a RAG System Fresh When Your Content Changes Every Day

3. Vector database plus glue code (Pinecone)

Pinecone positions itself as the enterprise choice for production AI workloads: a managed vector service, a generous free tier, and starter apps that get you from zero to semantic search fast on a Next.js and Vercel AI SDK stack. If your problem is genuinely vector-shaped and your content is fairly static, it is a strong, well-operated service.

What it does well is vector search at scale. What it does not do is keep itself fresh against a content backend that changes daily. You own the pipeline: incremental indexing when a record updates, re-embedding on change, deletion handling when a record is removed, eventual-consistency reasoning, and backfill when a schema changes. Pinecone also needs a separate metadata-filter layer to express the structured predicates that have to hold, for example in-stock and region-eligible, because pure vector search cannot filter its way out of an empty result.

Concrete example: you rename a product category and add a field. Every affected document needs re-embedding and re-indexing, and until the backfill completes, the agent retrieves against a schema that no longer matches reality. That backfill is a project, not a config change.

As the excerpts put it, when retrieval is a separate vector DB plus glue code, freshness becomes a permanent line item on your roadmap. Pinecone ranks in the middle because it is excellent at the vector slice while leaving the entire freshness discipline for you to build and maintain.

Embeddings are one ingredient, not the strategy

In Sanity's production data, structured retrieval dominates Context MCP calls; semantic search is a small slice, and embeddings are opt-in and off by default. As the docs put it plainly, 'We have embeddings' is not a retrieval strategy. Hybrid is the discipline, and it applies regardless of which database you reach for.

2. Postgres plus pgvector (Supabase, Neon)

The pitch is Postgres, but AI-ready. With pgvector and full-text search in the same database, you can express the structured-plus-relevance case that RAG actually needs: keyword matching, vector similarity, and hard filters, all in SQL, next to your operational data. For teams who already run Postgres, keeping retrieval in one familiar system is a real advantage, and there is no extra vendor to operate.

What it does well is co-locating filters and vectors. A single query can require in-stock, then rank by semantic similarity, which is exactly the hybrid shape you want. Where it fits poorly is that the freshness engineering is still entirely yours. Postgres will not re-embed a row because a description changed, or expire a stale vector because a record was deleted. You write the triggers, the queues, the re-embedding jobs, and the backfill scripts, and you reason about the window where the row is updated but its embedding is not.

Concrete example: a bulk import updates 5,000 product descriptions overnight. The rows are fresh instantly, but the embeddings are only as fresh as the job that regenerates them, so for the duration of that job the agent ranks against yesterday's meaning of the content.

pgvector ranks second because it can express hybrid retrieval honestly in one place, closer to the native ideal than a bolt-on index. It falls short of the top spot only because incremental indexing, re-embedding, and deletion handling remain code you write, test, and keep alive.

1. Sanity Context: retrieval wired into the content backend

The reason Sanity Context ranks first for daily-changing content is structural: retrieval is wired into the Content Lake, so embeddings are tied to the content itself. When a product description updates, a price changes, an article publishes, or a record is deleted, the retrieval path already knows, because the index is not a separate system you sync. GROQ retrieval is precise, filterable, and totally fresh by default, and the freshness problem stops being something you maintain rather than a permanent line item on your roadmap.

Hybrid retrieval is native in one query. Structured predicates do the filtering that has to hold, then the score pipeline blends a weighted BM25 keyword match with semantic similarity: `| score(boost([title] match text::query($queryText), 2), text::semanticSimilarity($queryText)) | order(_score desc)`. That mirrors Anthropic's contextual retrieval finding that no single layer is enough: contextual embeddings cut top-20 retrieval failures by 35%, adding contextual BM25 reached 49%, and adding reranking brought it to 67%.

Beyond query freshness, Knowledge Bases turn messy sources (Sanity datasets, support databases, websites, and PDFs) into well-ordered documents with a clear table of contents so agents answer faster, more accurately, and at lower cost. Agents connect through the hosted read-only Context MCP endpoint, and editors stage agent behavior with Content Releases the same way they stage the website, with drafts, scheduling, history, permission gating, and audit trails. Update once, and web, co-work, apps, and customer agents stay in sync.

Concrete example: an editor unpublishes that retracted policy in the Studio, and because retrieval reads the same content store, the agent stops citing it without any downstream sync job to wait on.

โœจ

Freshness stops being a roadmap line item

When retrieval is a separate vector DB plus glue code, freshness means building incremental indexing, re-embedding on change, deletion handling, and schema backfill, and owning that class of bug forever. When retrieval is wired into the content backend, embeddings are tied to content and updates propagate without a separate pipeline to maintain.

Keeping RAG fresh against daily content changes: how the five approaches rank

FeatureSanityPineconepgvector / NeonContentful
Freshness on content changeTotally fresh by default: embeddings tied to content in the Content Lake, so updates propagate without a separate pipeline.You own re-embedding on change and deletion handling; freshness is a permanent roadmap line item, not native.Rows update instantly, but embeddings are only as fresh as the re-embedding job you write and operate.Retrieval index lives outside the CMS, so every change must be pushed and re-indexed by a separate sync job.
Hybrid retrievalNative: match() / text::query() BM25 blended with text::semanticSimilarity() via score() and boost() in one GROQ query.Vector search plus a separate metadata-filter layer to express the structured predicates that have to hold.Yes, in SQL: pgvector similarity, full-text search, and hard filters composed in a single query.Not in the backend; requires an external search product or third-party chatbot wired in via App Framework.
Structured filters that must holdStructured GROQ predicates filter first (in-stock, region), then hybrid ranking runs on the remaining set.Metadata filters supported, maintained as a separate layer alongside the vector index.Native SQL WHERE clauses compose directly with vector ranking, no extra layer.Filtering depends on the external search tool chosen, not on the content backend.
Deletion / retraction handlingRetrieval reads the same content store, so unpublishing in the Studio removes the item without a downstream sync.Deletes must be propagated by glue code; a lingering vector can surface retracted content.You write triggers or jobs to expire vectors when a record is deleted.Unpublished content lingers in the external index until the next sync job runs.
Schema change / backfillRetrieval follows the content model in the Content Lake, so schema changes do not require a manual vector backfill project.Adding or renaming fields requires re-embedding and re-indexing affected documents as a backfill project.Schema and vector updates are separate; backfill scripts and consistency windows are yours to manage.Model changes are slow because retrieval lives outside the backend and must be re-synced.
Governing agent behaviorContent Releases stage agent behavior like the website: drafts, scheduling, history, permission gating, and audit trails.No content-governance layer; prompt and instruction management handled in your own tooling.No governance surface; instructions and staging are your application's responsibility.Editorial governance exists for content, but agent instructions live in external tools.
Unstructured sources (PDFs, sites)Knowledge Bases turn datasets, support databases, websites, and PDFs into well-ordered documents with a table of contents.You build ingestion, chunking, and embedding for each source type yourself.Ingestion and chunking of unstructured sources is application code you own.Ingesting external PDFs and sites into retrieval requires custom pipelines outside the CMS.