Retrieval Cache Invalidation в 2026: как кэшировать RAG без выдачи вчерашней правды

Retrieval cache invalidation в 2026: как обновлять cached snippets, query results и answer-support context при смене документов, индексов и metadata.

Retrieval cache invalidation в 2026 нужна потому, что кэш в RAG улучшает latency и cost, но очень легко начинает хранить неправильную версию реальности. Cached query results, snippets, reranked lists и answer-support bundles могут оставаться в ходу уже после обновления документов, metadata, tenant scopes или целого индекса. В итоге система выглядит быстрой, но grounded quality quietly деградирует.

Кэш в RAG - это не только final answer cache. Часто кэшируются retrieval hits, reranking results, summaries и support snippets. И каждый такой слой может устареть по-своему.
Самый вредный anti-pattern - считать retrieval cache чисто performance-слоем. Если invalidation плохо спроектирована, кэш становится silent source of stale knowledge.

Короткая версия

Хорошая cache invalidation в 2026 обычно включает:

  1. Version-aware cache keys
  2. Document-change invalidation
  3. Scope-aware caching
  4. TTL plus explicit busting
  5. Post-invalidation monitoring

Что особенно важно

  • TTL сама по себе не решает freshness;
  • cache key должен учитывать corpus/index version и tenant scope;
  • invalidation нужна не только при новых документах, но и при metadata/filter changes;
  • retrieval cache и answer cache нельзя считать одним и тем же слоем.
Без техники
Индекс обновили, но cached retrieval bundle продолжает приносить старые snippets ещё несколько часов.
С техникой
Cache keys учитывают release version и tenant scope, а document updates триггерят targeted invalidation. Скорость сохраняется без stale bleed-through.
ПромптCache invalidation intuition
Почему TTL недостаточно для retrieval cache?
Ответ модели

Потому что stale knowledge может быть недопустима уже через минуту после важного update. Для некоторых изменений нужна явная invalidation, а не ожидание естественного истечения срока.

1. В RAG кэш существует на нескольких слоях

Часто кэшируются:

  • retrieval candidate sets;
  • reranked top-k;
  • support snippets;
  • query rewrites;
  • final grounded answer bundles.

Каждый слой имеет свою semantics freshness и не должен invalidat-иться одинаково.

2. Cache key должен знать контекст retrieval

Полезные поля:

  • tenant scope;
  • route;
  • corpus or index version;
  • retrieval config;
  • metadata filter profile;
  • language or locale.

Без этого кэш будет reuse-ить результаты за пределами их истинной валидности.

Если cache key не меняется при смене индекса, tenant scope или filter policy, вы, скорее всего, кэшируете не результат запроса, а случайный слепок старой retrieval-конфигурации.

3. Document change invalidation нужна отдельно от TTL

Особенно полезно explicit busting при:

  • update or delete document;
  • deprecate policy;
  • change tenant visibility;
  • rebuild index;
  • retag metadata;
  • change reranker config.

Это предотвращает ситуацию, когда technically new corpus уже есть, а operationally система ещё живёт на старом support context.

4. Targeted invalidation лучше полного purge

Полный cache wipe иногда нужен, но чаще полезнее:

  • invalidate by document lineage;
  • invalidate by tenant;
  • invalidate by route;
  • invalidate by retrieval release id;
  • invalidate only reranking layer.

Так можно не терять весь performance gain ради локального обновления.

5. После invalidation важно смотреть не только hit rate

Полезные сигналы:

  • stale retrieval complaints;
  • grounding recovery after update;
  • post-invalidation latency jump;
  • cache miss surge by route;
  • unsupported-claim delta;
  • tenant-specific regressions.

Иначе cache ops выглядят "успешно", хотя product behaviour стал хуже.

6. Что особенно часто ломают команды

TTL-only thinking

Нет event-driven invalidation.

Shared cache across contexts

Tenant or route scope ignored.

Final-answer-centric design

Retrieval bundles живут отдельно и не инвалидируются.

Full purge by default

Performance unnecessarily collapses.

No version tags in keys

Old and new retrieval states смешиваются silently.

7. Какие метрики полезны

Минимальный cache-invalidation dashboard обычно включает:

  • cache hit rate by retrieval layer;
  • stale-hit incident rate;
  • invalidation lag after document update;
  • cache reuse across wrong scope attempts;
  • latency delta after invalidation events;
  • grounding recovery time.

Плюсы

  • Version-aware invalidation сохраняет и speed, и freshness
  • Targeted busting уменьшает unnecessary cache churn
  • Scope-aware keys снижают silent cross-context reuse
  • Layered cache model делает RAG behaviour предсказуемее

Минусы

  • Нужно поддерживать richer cache metadata and events
  • Слишком сложная invalidation logic сама может стать источником bugs
  • Hit-rate metrics без quality signals вводят в заблуждение
  • Полезно отдельно тестировать invalidation после every retrieval release

Пример retrieval cache key

{
  "tenant_scope": "tenant_42",
  "route": "support_grounded_answer",
  "index_release": "kb_release_2026_04_06",
  "filter_profile": "active_policy_only",
  "query_hash": "q_18291"
}

Практический checklist

1. Include version and scope in cache keys
2. Invalidate on document and metadata changes explicitly
3. Separate retrieval cache from answer cache
4. Prefer targeted busting over global purges when possible
5. Track stale-hit incidents, not just hit rate

Практический совет: хороший retrieval cache ускоряет доступ к актуальному знанию. Плохой cache ускоряет доступ к устаревшей версии мира. Для пользователя разница огромна, даже если latency chart красивый в обоих случаях.

Проверьте себя

1. Почему TTL недостаточно для retrieval cache?

2. Что cache key должен учитывать особенно часто?

3. Какой anti-pattern особенно вреден?