Как обновлять базу знаний RAG, не останавливая систему

Демо живёт на статичном корпусе, продакшн — на меняющемся. Разбираем инкрементальное обновление вместо полной переиндексации, подмену индекса без рестарта, удаление документов и то, какие метрики показывают деградацию поиска раньше, чем о ней сообщат пользователи.

8 мин чтения

Почему обновление — отдельная инженерная задача

На демонстрации корпус загружают один раз, и вопрос обновления не возникает. В работе документы меняются каждый день, и система, которая отвечает по прошлой редакции регламента, хуже, чем отсутствие системы: она звучит так же уверенно, но подсказывает отменённое правило.

Поэтому обновление проектируется вместе с поиском, а не добавляется потом. Три вопроса, на которые нужен ответ до запуска: как документ попадает в индекс, как он из него исчезает и что видит пользователь в момент, когда индекс меняется.

Инкрементальное обновление вместо полной переиндексации

Полная переиндексация корпуса — операция на часы и заметные деньги на эмбеддингах, и делать её при изменении одного документа незачем. Рабочая схема: хеш содержимого на уровне документа и на уровне куска, пересчитываются только изменившиеся куски, остальные остаются как есть.

У этого есть неочевидное следствие: нарезка должна быть детерминированной. Если один и тот же документ режется каждый раз по-разному, хеши не совпадут и «инкрементальное» обновление превратится в полную переиндексацию под другим названием.

Подмена индекса без рестарта

Перезапуск сервиса ради обновления базы — не решение, а откладывание проблемы: он роняет открытые сессии и делает обновления редкими, потому что каждое становится событием. Стандартный приём — версионированный индекс и указатель на него: новая версия собирается рядом, проверяется, потом указатель переключается атомарно, а старая версия держится до конца текущих запросов.

Ключевое здесь — проверка до переключения, а не после. Индекс, собранный с ошибкой в конвейере, переключается так же гладко, как правильный, и обнаруживается только по жалобам.

Удаление: то, о чём вспоминают последним

Документ убрали из хранилища, а его куски остались в индексе — и система продолжает отвечать по тому, чего уже нет. В чувствительных доменах это не неудобство, а нарушение: сотрудник видит данные, доступ к которым отозван.

Минимально рабочая схема: источник истины — хранилище документов, индекс — производная от него; удаление и изменение прав распространяются тем же конвейером, что и добавление, и проверяются тем же тестом. Права доступа при этом хранятся в метаданных куска и применяются фильтром до поиска, а не отсечением в ответе.

Что меняется в качестве поиска при обновлении

После пополнения индекса новые фрагменты могут вытеснить старые из первых результатов поиска по похожим запросам. Отдельная ловушка — смена модели эмбеддингов: старые и новые векторы несопоставимы, и такой переход требует полной пересборки, а не дозаписи.

  • Доля вопросов, где нужный фрагмент попал в топ выдачи, — до и после обновления, на одном и том же наборе.
  • Доля ответов с пустой выборкой: рост означает, что что-то отвалилось на конвейере.
  • Возраст самого свежего документа в индексе — простейший индикатор того, что обновления вообще идут.
  • Стоимость обновления: сколько кусков пересчитано на одну правку документа.

Что достаточно на старте

Не всякому проекту нужно обновление в реальном времени. Если регламенты меняются раз в квартал, ночной пересбор с проверкой перед переключением закрывает задачу полностью и стоит несопоставимо дешевле в поддержке.

Разница между «раз в сутки» и «в тот же час» — это настройка конвейера, а не другая архитектура. А вот разница между «есть удаление» и «нет удаления» архитектурная, и закладывать её нужно сразу.

Коротко

Инкрементальное обновление работает только при детерминированной нарезке.
Индекс версионируется и переключается указателем: рестарт ради обновления — отложенная проблема.
Удаление и права доступа идут тем же конвейером, что и добавление, иначе система отвечает по отозванным данным.
Смена модели эмбеддингов — это полная пересборка индекса, а не дозапись.

Вопросы

Можно ли обновлять индекс без остановки сервиса?

Да, и это стандартная практика: новая версия индекса собирается рядом, проходит проверку на наборе вопросов, после чего указатель переключается атомарно. Открытые запросы дорабатывают на старой версии. Рестарт нужен только при смене схемы хранения.

Как часто нужно пересобирать индекс целиком?

По событию, а не по расписанию. Полная пересборка нужна при смене модели эмбеддингов, изменении правил нарезки или схемы метаданных. Во всех остальных случаях достаточно инкрементального обновления изменившихся документов.

Что происходит с ответами в момент обновления?

При версионированном индексе — ничего: пользователь до переключения получает ответы по старой версии, после — по новой. Проблемы начинаются там, где куски дописываются в живой индекс без версии: тогда часть выдачи собирается по старому состоянию, а часть по новому.

Как заметить, что после обновления стало хуже?

Прогонять один и тот же набор вопросов до и после переключения и сравнивать долю попаданий нужного фрагмента в топ выдачи. Это дешевле любой ручной проверки и ловит регрессию до того, как её заметят пользователи.

Нужно ли хранить историю версий документов?

В регулируемых доменах — да, и вместе с датой вступления в силу в метаданных куска. Это позволяет отвечать «по состоянию на дату» и объяснять, почему ответ был именно таким, что в спорной ситуации важнее самого ответа.

Читать дальше

OpenAI Agent Builder закрывается: как перенести агента и ничего не сломать

OpenAI отключает Agent Builder 30 ноября 2026 года. Официальных путей два: Agents SDK, если агент живёт в вашем приложении, и ChatGPT Workspace Agents, если он нужен сотрудникам внутри ChatGPT. Экспорт в код есть, но граф процесса он не переносит. Поэтому миграция - это прежде всего проверка: собрать примеры реальных запросов до отключения и прогнать их на новой версии.

ИИ-агенты для бизнеса: какие задачи им поручать

ИИ-агенты для бизнеса полезны там, где нужно разбирать текст, выбирать следующий шаг и работать в нескольких системах. Начните с одного процесса: определите результат, разрешённые действия и способ проверки. Ниже - сценарии и таблица, с которыми можно отобрать задачу для пилота.

Сколько стоит ИИ-агент для бизнеса

Цена ИИ-агента складывается из разработки и расходов на работающий процесс. Тариф модели покрывает лишь часть затрат: остаются интеграции, повторные попытки, сопровождение и ручная проверка. Чтобы сравнить предложения, сначала определите результат, за который готовы платить.

Внедрение ИИ в бизнес: с чего начать пилот

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

Нужна база знаний, которая не устаревает через месяц? Спроектируем обновление вместе с поиском.