Память

Как ИИ забывает: стратегии устаревания памяти

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

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

То есть забывание нужно не ради экономии места. Оно нужно ради точности.

#Почему «просто хранить всё» не работает

Три эффекта, накапливающиеся независимо друг от друга.

Вытеснение похожим. Топ выдачи конечен. Любая избыточность в хранилище платится местами в этом топе.

Устаревание без пометки. Факт «работаю над проектом 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 именно потому, что короткие факты с одним-двумя общими словами сливались ложно.

Цена всё равно есть, и она в потере нюанса: «любит крепкий кофе» и «не пьёт кофе после шести» имеют общие слова и могут оказаться в одной группе.

#Правило выбора

Не выбирайте одну стратегию — раскладывайте записи по видам и применяйте разное.

  1. Одноразовое и календарное (напоминания, «на этой неделе») — срок жизни. Забывать быстро и без сожалений.
  2. Наблюдения и предпочтения — затухание. Пусть тонут сами, если ни разу не пригодились.
  3. Профильные факты (кто вы, чем занимаетесь, ключевые люди) — никакого автоматического забывания. Только явная замена новым фактом.
  4. Всё, что человек закрепил вручную — неприкосновенно. Ни слияние, ни вытеснение, ни срок жизни.

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

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

#Кто именно нажимает на кнопку

Самый важный вопрос — не «какая стратегия», а «кто исполняет решение».

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

Общая схема слоёв, в которых всё это живёт, — в статье о том, как работает память у ИИ.

#Частые вопросы

#Не проще ли хранить всё и полагаться на поиск?

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

#Что такое затухание и не удаляет ли оно данные?

Затухание меняет вес записи при ранжировании, а не удаляет её. Запись, которую давно не вспоминали, опускается в выдаче и постепенно перестаёт попадать в промпт, оставаясь в базе. Обращение к ней сбрасывает счётчик, и она снова поднимается.

#Как понять, что памяти пора чистить?

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

#Можно ли доверить чистку автоматике полностью?

Не стоит. Эвристики оценивают форму записи, а не её значение для вас, и систематически ошибаются на коротких важных фактах. Безопасная схема — автоматика предлагает и помечает, человек подтверждает удаление, всё обратимо.

#Забывает ли сама модель?

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

#Вывод

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

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт