Память, которая только накапливает, ломается раньше, чем заканчивается диск. Механизм такой: чем больше в хранилище похожих записей, тем выше шанс, что поиск вернёт не ту. Шесть мест в блоке памяти занимают шесть самых «похожих на вопрос» записей — и если у вас двадцать вариантов одного и того же полузабытого факта, они займут все шесть, вытеснив единственный актуальный.
То есть забывание нужно не ради экономии места. Оно нужно ради точности.
#Почему «просто хранить всё» не работает
Три эффекта, накапливающиеся независимо друг от друга.
Вытеснение похожим. Топ выдачи конечен. Любая избыточность в хранилище платится местами в этом топе.
Устаревание без пометки. Факт «работаю над проектом X» верен год, а потом становится ложью, которая продолжает подмешиваться в промпт и звучать уверенно.
Дрейф от самоподтверждения. Записанный факт попадает в контекст, модель на него опирается, ответ снова уходит в историю — и при следующей автоматической выжимке фактов подтверждается заново. Ошибка укореняется, причём внешне она выглядит как многократно подтверждённое знание. Забывание — один из способов разорвать этот цикл.
Все три лечатся не увеличением хранилища, а политикой выбытия.
#Четыре стратегии и цена каждой
| Стратегия | Что делает | Побочный эффект |
|---|---|---|
| Срок жизни | запись выбывает через N дней | равномерно удаляет и мусор, и редкое важное |
| Затухание | вес падает со временем, всплывает при обращении | недавно упомянутая чушь обгоняет старый важный факт |
| Вытеснение по важности | выбывает наименее значимое при переполнении | оценка важности сама по себе ненадёжна |
| Слияние дублей | близкие записи схлопываются в одну | потеря нюанса, который отличал их друг от друга |
Ни одна из четырёх не является правильной сама по себе; каждая — компромисс с известной ценой.
#Срок жизни
Самая простая: у записи есть дата, после которой она выбывает. Работает для заведомо волатильного — «сегодня встреча в три», «на этой неделе сдаём отчёт». Категорически не работает для профильных фактов: имя, профессия, ключевые люди не устаревают по календарю.
Практический вывод: срок жизни должен зависеть от вида записи, а не быть общим. Одна константа для всей памяти — гарантированная потеря важного.
#Затухание с подкреплением
Вес записи убывает по времени с момента последнего обращения к ней, а каждое обращение обнуляет счётчик — то, что вспоминают часто, сопротивляется забыванию. Это прямая аналогия с человеческой памятью, и она реализована в Persona: при каждой выдаче память получает обновлённую отметку времени последнего доступа и увеличенный счётчик обращений (bump_recall_stats в app/memory_vec.py и парная функция в app/chat/sessions.py), а сам множитель убывания — 0.995 в степени числа часов с последнего обращения.
Побочный эффект следует из механики буквально: подкрепление не различает верное и неверное. Ошибочный факт, который часто всплывает в выдаче, будет всплывать и дальше — именно потому, что он всплывал.
Отдельная тонкость: затухание в Persona влияет на порядок выдачи, а не на существование записи, и по умолчанию эта пересортировка выключена. Она включается либо отдельным режимом поиска, либо глобальным ключом настроек; без этого порядок определяется только релевантностью.
#Вытеснение по важности
Каждой записи присваивается оценка значимости, и при переполнении бюджета выбывает наименее значимое. Оценку можно ставить моделью или эвристикой; в Persona используется эвристика без модели: базовый вес зависит от вида записи (человек и проект весят больше, чем «прочее»), прибавка идёт за длину и за характерные слова вроде «зовут», «цель», «живу», убавка — за очень короткие записи и смолток, закреплённая запись получает надбавку. Результат — число от 1 до 10, которое пишется один раз при создании и не пересчитывается.
Слабое место видно сразу: эвристика оценивает форму, а не значение. Короткая запись «развод в марте» получит меньше веса, чем длинная запись про предпочтения в кофе. Модельная оценка точнее, но дороже и нестабильна от прогона к прогону.
Практическая защита от обеих проблем — не удалять по важности, а только не пополнять. В Persona автоматическое извлечение фактов останавливается при достижении бюджета активных записей (80 штук): новые факты просто не сохраняются, а в журнал пишется предупреждение с просьбой почистить память вручную. Уже сохранённое при этом не выбрасывается автоматикой.
#Слияние дублей
Близкие по содержанию записи схлопываются в одну «представительную», остальные помечаются как заменённые ею. В Persona это ночная процедура: активные факты группируются по пересечению ключевых слов (мера Жаккара, порог 0.6), в каждой группе представителем выбирается самая полная и свежая запись, остальные получают отметку недействительности со ссылкой на неё.
Три предохранителя, которые делают это безопасным:
- Ничего не удаляется. Слитые записи остаются в истории и возвращаются одним действием — механика описана в разборе bi-temporal памяти.
- Группа с закреплённой записью пропускается целиком. Закрепление — явное решение человека, и эвристика не имеет права выбрать вместо неё другого представителя.
- Порог консервативный. Он был поднят с 0.5 до 0.6 именно потому, что короткие факты с одним-двумя общими словами сливались ложно.
Цена всё равно есть, и она в потере нюанса: «любит крепкий кофе» и «не пьёт кофе после шести» имеют общие слова и могут оказаться в одной группе.
#Правило выбора
Не выбирайте одну стратегию — раскладывайте записи по видам и применяйте разное.
- Одноразовое и календарное (напоминания, «на этой неделе») — срок жизни. Забывать быстро и без сожалений.
- Наблюдения и предпочтения — затухание. Пусть тонут сами, если ни разу не пригодились.
- Профильные факты (кто вы, чем занимаетесь, ключевые люди) — никакого автоматического забывания. Только явная замена новым фактом.
- Всё, что человек закрепил вручную — неприкосновенно. Ни слияние, ни вытеснение, ни срок жизни.
Четвёртый пункт — не вежливость к пользователю, а инженерная страховка: он даёт человеку способ вывести запись из-под всей автоматики разом.
Куда все эти уровни укладываются по срокам хранения, разобрано в материале про иерархическую память. Альтернатива забыванию для длинных диалогов — не удаление, а сжатие: как свернуть старое, не потеряв того, что потом спросят, показано в гайде по суммаризации диалога.
#Кто именно нажимает на кнопку
Самый важный вопрос — не «какая стратегия», а «кто исполняет решение».
Автоматическое забывание, которое исполняется без ведома человека и без следа, — это не оптимизация, а тихая правка вашей истории. Правильная граница проходит так: автоматика предлагает, изменение обратимо, след остаётся. В Persona ночная процедура работает по этой границе: она собирает кандидатов, фиксирует их вместе с доказательствами в журнале, а отдельная детерминированная политика решает, что допустить, — модель никогда не исполняет изменение памяти напрямую. Как это устроено целиком, разобрано в материале про ночную консолидацию памяти. Сама процедура при этом выключена по умолчанию и включается явно.
Общая схема слоёв, в которых всё это живёт, — в статье о том, как работает память у ИИ.
#Частые вопросы
#Не проще ли хранить всё и полагаться на поиск?
Не проще, потому что поиск конечен: в промпт уходят единицы записей. Избыточное хранилище не увеличивает шанс найти нужное — оно увеличивает шанс, что нужное вытеснят похожие. Проблема проявляется как «ассистент стал хуже помнить», хотя ничего не терялось.
#Что такое затухание и не удаляет ли оно данные?
Затухание меняет вес записи при ранжировании, а не удаляет её. Запись, которую давно не вспоминали, опускается в выдаче и постепенно перестаёт попадать в промпт, оставаясь в базе. Обращение к ней сбрасывает счётчик, и она снова поднимается.
#Как понять, что памяти пора чистить?
По симптому: ассистент начинает отвечать общими или устаревшими формулировками там, где раньше отвечал точно. Проверяется просмотром активных записей — если среди них есть противоречащие друг другу или относящиеся к закрытым проектам, чистка нужна. Как убрать конкретную запись так, чтобы она не вернулась, разобрано в гайде как удалить факт из памяти ИИ.
#Можно ли доверить чистку автоматике полностью?
Не стоит. Эвристики оценивают форму записи, а не её значение для вас, и систематически ошибаются на коротких важных фактах. Безопасная схема — автоматика предлагает и помечает, человек подтверждает удаление, всё обратимо.
#Забывает ли сама модель?
Нет. Веса модели не меняются от разговора к разговору; забывает не модель, а слой памяти вокруг неё. Поэтому все описанные стратегии — про хранилище и ранжирование, а не про нейросеть.
#Вывод
Если у вас накапливается память о человеке, введите забывание сразу — не когда закончится место, а пока записей мало и видно, что с ними происходит. Раскладывайте по видам: календарное забывайте по сроку, наблюдения — затуханием, профильные факты не трогайте автоматикой вовсе, закреплённое считайте неприкосновенным. И держите одно жёсткое правило: любое автоматическое выбытие должно быть обратимым и оставлять след. Память, которая молча меняет себя, перестаёт быть источником, которому можно верить.