Актуальность knowledge base в RAG: ingest, versioning и reindex
Knowledge base freshness в RAG: как обновлять документы, удалять устаревшие версии, держать metadata и не превращать retrieval в поиск по мёртвым знаниям.
RAG ломается не только тогда, когда retriever находит нерелевантные документы. Он ломается и тогда, когда retriever находит вчерашнюю правду. Knowledge base freshness в 2026 - это не "как часто мы запускаем reindex", а дисциплина вокруг полного жизненного цикла знаний:
документ появился;
документ изменился;
старая версия устарела;
retrieval должен понимать, какая версия сейчас authoritative;
ответ не должен опираться на мёртвый контент.
Именно поэтому свежесть KB лучше мыслить как operational layer между source-of-truth и retrieval, а не как чисто индексную задачу.
Knowledge base freshness похожа на работу с документацией компании. Важно не только добавить новую страницу, но и убрать старую, пометить deprecated policy и не дать поиску советовать пользователю инструкцию двухлетней давности.
Если ваш ingest умеет только add new chunks, а не update / delete / supersede, RAG почти неизбежно начинает отвечать смесью актуальных и устаревших правил.
новые документы добавляются, а старые не снимаются;
chunks не связаны с document version;
policy pages и product docs не имеют effective date;
retriever не умеет учитывать freshness metadata;
stale content остаётся в top-k из-за сильного lexical overlap.
Без техники
Команда просто догружает новые chunks в индекс. Через месяц в retrieval живут три версии одной policy, и модель отвечает композитом из них.
С техникой
Каждый документ имеет version ID, effective date, статус active/deprecated, а ingest умеет supersede старые chunks и удалять stale variants из retrieval path.
ПромптFreshness intuition
Почему `добавить новый документ` недостаточно для quality RAG?
Ответ модели
Потому что retriever может продолжать находить старую версию, если она лучше матчится по словам или раньше попала в индекс. Без versioning и cleanup система получает конфликтующее знание.
В production knowledge base почти никогда не живёт в режиме "один раз загрузили и забыли". Значит, ingest должен уметь:
upsert changed documents;
delete obsolete chunks;
mark deprecated content;
пересчитывать summaries и metadata;
переиндексировать affected documents, а не always весь corpus.
Особенно важны deletion и supersession. Иначе stale policies продолжают жить в поиске бесконечно.
Если документ меняет business meaning, а не только опечатку, лучше создавать новую version lineage, а не quietly переписывать старый chunk set без traceability.
def ingest_document(doc):
current = load_active_version(doc.document_id)
if current and current.hash == doc.hash:
return "skip"
if current:
mark_deprecated(current.version_id)
delete_old_chunks(current.version_id)
new_version = write_new_version(doc)
embed_and_upsert(new_version)
return "updated"
Практический совет: отделяйте document changed от embeddings rebuilt. Это два разных operational события. Тогда проще видеть, где именно накапливается freshness lag: в source sync, chunking, embedding queue или index cutover.
Проверьте себя
1. Почему append-only ingest часто вреден для RAG?
2. Какой metadata-field особенно важен для freshness-aware retrieval?