Удаление файла не очищает память RAG
Симптом
Агент продолжал использовать сведения из тестовых onboarding-документов, хотя документы были удалены, а доступная пользователю память отображалась пустой.
В диалоге агент уверенно ссылался на удалённый документ, но не мог предъявить его как файл и не объяснял, откуда ещё мог получить эти сведения.
Контекст
В систему загрузили несколько тестовых документов и попросили агента забыть их. Файлы удалили, а записи в обычном интерфейсе памяти больше не отображались. При этом агент продолжал отвечать так, будто исходные документы всё ещё были частью его контекста.
Корневая причина
Удаление выполнялось не во всех слоях памяти. Исходные документы исчезали из файлового или прикладного хранилища, но их фрагменты оставались в векторном индексе RAG. Во время поиска агент находил эти записи и использовал их как контекст, поэтому удалённые документы превращались в «фантомную» память.
Ошибочное предположение
Я предполагал, что удаление документа из основного хранилища автоматически удаляет все производные данные. Это предположение казалось разумным, потому что память выглядела пустой в пользовательском интерфейсе. На практике интерфейс показывал только один слой состояния и не отражал содержимое векторного индекса.
Обнаружение
Проблема обнаружилась во время ручной проверки: после удаления документов я задал агенту вопрос, ответ на который мог быть получен только из этих документов. Агент воспроизвёл удалённые сведения, хотя файл уже нельзя было открыть или найти через обычные операции памяти.
Такой сценарий должен быть отдельной проверкой удаления, а не только проверкой того, что исходный файл исчез.
Исправление
Операцию удаления реализовали как согласованное удаление из всех слоёв памяти агента:
- исходного документа;
- прикладной записи о документе и его фрагментах;
- векторных представлений в RAG-индексе;
- связанных кэшей и метаданных, если они участвуют в поиске.
Удаление считалось завершённым только после подтверждения, что ни один слой, используемый при формировании контекста, больше не возвращает удалённое содержимое.
Проверка
Минимальный регрессионный сценарий должен загрузить уникальный тестовый документ, убедиться, что агент находит его сведения, удалить документ, а затем повторить тот же запрос. После удаления поиск и ответ агента не должны возвращать содержимое документа ни напрямую, ни через его фрагменты.
В исходной заметке автоматический тест для этого сценария не зафиксирован. Это отдельный пробел, который нужно закрыть вместе с реализацией полного CRUD для памяти.
Общий вывод
Память агента - это не одно хранилище, а цепочка исходных данных и производных индексов. Операция удаления должна иметь явный контракт для каждого слоя и проверяемое постусловие: удалённое знание больше не участвует в поиске и не попадает в контекст агента.