ИИ отвечает по старому прайсу: как обновлять документы в RAG
Цена изменилась в понедельник. Новый прайс загрузили во вторник. В среду помощник уверенно назвал старую стоимость и приложил ссылку на документ, которого сотрудники уже не видят в общей папке. Модель выглядит виноватой, но расследование часто приводит к более прозаической причине: старые фрагменты остались в поисковом индексе.
RAG добавляет к ответу найденные сведения, однако актуальность этих сведений нужно организовать отдельно. Загрузка новой версии не всегда заменяет старую, а удаление исходного файла не обязательно удаляет его поисковые представления. Разберём жизненный цикл документов на примере базы знаний с Qdrant. Сам принцип пригодится и для других векторных хранилищ.
Содержание
- Сначала выясняем, откуда пришла цифра
- Документу нужен паспорт
- Новую редакцию сначала готовим отдельно
- Полное переиздание через новую коллекцию
- Удаление — отдельное событие
- История разговора умеет возвращать прошлое
- Проверка, которую можно повторять после каждой публикации
- Ресурсы VPS под обновляемую базу знаний
Разместите обновляемую базу знаний
На VPS MAATRIX можно запустить Qdrant и приложение для поиска по документам. Для пилота рассмотрите 4 vCPU и 8 GB RAM, отдельно рассчитав объём индекса и копий.
Подобрать VPS под задачуСначала выясняем, откуда пришла цифра
Сохраните проблемный вопрос, ответ и список фрагментов, переданных модели. Нужны идентификаторы документов, версии и текст найденных отрывков. Если приложение этого не показывает, добавьте диагностический режим для администратора. Без него обсуждение качества легко превращается в спор о характере нейросети.
Повторите поиск отдельно от генерации ответа. Если старая цена уже содержится в найденном контексте, начинайте с индекса и правил отбора. Если контекст актуален, а модель называет другое число, исследуйте промпт, историю разговора, кеш и обработку ответа. Не меняйте сразу все компоненты: после этого будет трудно понять, какое изменение помогло.
Проверьте, не цитируется ли старая цифра в исторической справке или другом действующем документе. Слово «актуальный» не может означать «самый новый файл в папке». В договоре старые условия иногда остаются действующими для конкретного клиента. Поэтому сначала определите бизнес-правило выбора версии.
Для учебного прайса правило простое: у каждой товарной позиции есть одна опубликованная редакция для заданного периода и аудитории. Исторические редакции доступны только по специальному запросу. Это правило принадлежит вашему приложению, а не алгоритму сходства векторов.
Документу нужен паспорт
До разбиения текста присвойте источнику устойчивый document_id. Новая редакция сохраняет этот идентификатор, но получает другую version. У каждого фрагмента должен быть собственный идентификатор и связь с документом. Тогда можно найти все части одной редакции, даже если после обработки изменилось их количество.
В метаданных храните контрольную сумму исходного файла, статус публикации, время действия, организацию и права доступа. При необходимости добавьте язык, тип документа и адрес оригинала. Дату загрузки отделяйте от даты вступления в силу: прайс на следующий месяц можно подготовить сегодня, но выдавать его как текущий ещё рано.
| Поле | Зачем оно нужно |
|---|---|
document_id | Связывает редакции одного источника |
version | Отличает старый текст от нового |
content_hash | Позволяет заметить повторную загрузку |
status | Отделяет черновик от опубликованного материала |
valid_from, valid_to | Ограничивают период действия |
tenant_id | Помогает разделить данные организаций |
Это пример вашей схемы, а не обязательные имена полей Qdrant. В хранилище такие сведения размещают в payload и используют при фильтрации. Возможности фильтров описаны в документации Qdrant. Для часто используемых полей настройте подходящие индексы по рекомендациям своей версии.
Новую редакцию сначала готовим отдельно
Получив новый файл, вычислите его контрольную сумму и сравните с уже обработанной версией. Если содержимое не изменилось, не создавайте ещё один набор фрагментов. Повторная загрузка и новая редакция — разные события.
Распознайте текст, проверьте таблицы и сформируйте фрагменты. Запишите версию конвейера и модели эмбеддингов. Затем загрузите новую редакцию как подготовленную, но ещё не доступную обычному поиску. При ошибке посередине пользователь продолжит получать прежний согласованный набор, а не половину нового прайса.
Сравните число фрагментов, контрольные строки и несколько характерных вопросов. Не требуйте одинакового количества частей: новая версия могла стать короче. Важно, чтобы все нужные разделы присутствовали, а удалённые позиции исчезли. Для числовых таблиц подготовьте явные проверки значений.
После приёмки переключите активную редакцию управляемо. Одновременное обновление множества флагов в отдельных точках не следует автоматически считать транзакцией всей базы знаний. Для небольшого сервиса можно хранить реестр активных версий в обычной базе, а результаты поиска дополнительно сверять с ним. При полном переиздании набора удобен другой подход — новая коллекция и переключение псевдонима.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
АРЕНДОВАТЬ СЕРВЕРПолное переиздание через новую коллекцию
Если меняются многие документы или модель эмбеддингов, создайте новый поисковый набор рядом со старым. Рабочее приложение обращается к постоянному имени, например knowledge-current, которое указывает на нужную коллекцию. Новую коллекцию наполняйте и испытывайте независимо.
Qdrant поддерживает операции с aliases; порядок описан в руководстве коллекций и API обновления псевдонимов. Несколько действий переключения можно объединять предусмотренным API способом. Перед использованием проверьте семантику операции в своей версии и подготовьте обратное переключение.
Важно переключать согласованный комплект. Если поменялась размерность или сама модель эмбеддингов, приложение должно строить запросы совместимым способом. Смена имени коллекции без смены обработчика запросов может дать ошибку или бессмысленное сравнение. Сохраните версию конфигурации поиска вместе с версией набора данных.
Старую коллекцию оставьте на ограниченный срок для проверки и отката, если политика данных это допускает. Наличие запасной копии не означает, что она должна участвовать в обычном поиске. В интерфейсе администратора явно показывайте, какой набор обслуживает пользователей сейчас.
Удаление — отдельное событие
Если документ отозван, сначала исключите его из выдачи, затем удалите поисковые фрагменты и связанные копии по установленной политике. Отсутствие файла в исходной папке должно попадать в журнал синхронизации как событие удаления. Иначе индекс постепенно превратится в музей того, что когда-либо загружали.
В Qdrant можно удалять точки по идентификаторам или фильтру. Для учебной копии базы тело фильтра конкретной редакции выглядит так:
{
"filter": {
"must": [
{"key": "tenant_id", "match": {"value": "demo-company"}},
{"key": "document_id", "match": {"value": "price-main"}},
{"key": "version", "match": {"value": "2026-09"}}
]
}
}
Это пример данных для операции, а не команда для бездумного удаления в рабочей системе. Сначала тем же фильтром прочитайте или посчитайте совпадения на копии. Убедитесь, что выбраны нужная организация и версия. Затем используйте операцию удаления с проверкой завершения и повторным поиском.
Не ограничивайтесь векторной базой. Старые данные могут остаться в кеше ответов, сохранённой истории, промежуточном хранилище и резервных копиях. Для каждого места определите срок хранения и способ исключения из текущей работы. Если требуется удаление чувствительных сведений, архивы и журналы тоже входят в проект решения.
История разговора умеет возвращать прошлое
Пользователь мог услышать старую цену утром, а после обновления спросить: «Зафиксируй эту сумму». Даже с актуальным индексом модель увидит прежнее значение в контексте беседы. Для действий с ценой перечитывайте текущую запись из авторитетного источника, а не доверяйте ранее сказанному в чате.
Кеш ответов должен учитывать версию базы знаний и границы доступа. После публикации нового набора меняйте версию кеша или удаляйте затронутые записи. Если кешируется только поиск, применяйте те же правила к найденным фрагментам.
В ответе показывайте дату актуальности и ссылку на редакцию. Для вопроса об истории явно обозначайте исторический режим. При конфликте действующих источников возвращайте понятное сообщение и направляйте запрос ответственному, вместо того чтобы просить модель выбрать более убедительную цифру.
Проверка, которую можно повторять после каждой публикации
Создайте небольшой набор вопросов: текущая цена, дата начала действия, удалённая позиция, историческое значение и документ другой организации. Для каждого заранее укажите допустимый результат. Выполняйте проверку после загрузки, переключения и удаления.
Добавьте сбой посередине импорта. Пользователь не должен получать смесь частично загруженных редакций. Затем повторите тот же импорт: количество активных фрагментов не должно удвоиться. Эти два опыта быстро показывают, насколько процесс действительно управляем.
Наблюдайте за возрастом последнего успешного обновления, очередью ошибок, количеством активных документов и долей ответов без источника. Сам факт работающего контейнера ничего не сообщает о свежести знаний. У базы может быть отличный uptime и весьма пожилой прайс.
У каждого сбоя импорта должен быть ответственный и понятный повторный запуск. Сохраняйте причину отказа и стадию обработки, чтобы оператор не перезагружал весь архив из-за одного повреждённого файла. После исправления повторно проверяйте активную версию по контрольному вопросу пользователя.
Ресурсы VPS под обновляемую базу знаний
Для небольшого пилота Qdrant с приложением и внешними эмбеддингами можно начать испытание на MAATRIX Heka Standard: 4 vCPU, 8 GB RAM, 160 GB диска. Размер векторов, количество фрагментов, индексы и схема хранения заметно влияют на память. При параллельной обработке документов или двух полных коллекциях считайте дополнительный запас отдельно.
Используйте поддерживаемую Ubuntu или Debian, постоянные тома и защищённый доступ к базе. В каталоге приложений MAATRIX есть Qdrant; прикладной процесс версий, публикации и удаления потребуется настроить под ваши документы. VPS даёт место для этой системы, а актуальность обеспечивается правилом: у каждого опубликованного факта должно быть понятное происхождение и управляемый срок жизни.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
АРЕНДОВАТЬ СЕРВЕРОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →