Проблема «окна свежести»
Большинство современных LLM-агентов используют скользящее окно (sliding window) для управления контекстом: если информация не упоминалась N ходов назад, она удаляется. Это приводит к критическим ошибкам в долгосрочных сессиях. Фундаментальное правило, заданное в начале диалога, теряется, если в течение окна не было прямых упоминаний, даже если оно было ключевым для задачи.
Решение: Usage-Reinforced Decay Engine
Автор реализовал детерминированный движок на Python без внешних зависимостей, использующий кривую забывания Эббингауза. Ключевое отличие: каждое обращение к факту (recall) не просто временно повышает его вес, а навсегда меняет кривую забывания, нелинейно отодвигая момент вытеснения. Система опирается на счетчик ходов (turn counter), а не на реальное время, что обеспечивает полную воспроизводимость результатов.
Результаты бенчмарков
Тестирование проводилось на 50 засыщенных сессиях. Метрика Foundational Recall Rate (доля сохраненных фундаментальных фактов) показала разрыв между подходами:
| Метрика | Usage-Reinforced Decay (Эббингауз) | Recency-Only Baseline (Скользящее окно) |
|---|---|---|
| Foundational Recall Rate | 100% | 0% |
| Зависимость от частоты использования | Прямая (reinforcement) | Отсутствует |
| Детерминированность | Да (byte-identical outputs) | Да |
Границы применимости
Автор подчеркивает, что это не универсальное решение. Если факт введен один раз и никогда не вызывается, новый движок работает так же, как и старое окно — факт будет удален. Механизм критически важен для сценариев, где важная информация задается в начале (например, спецификация библиотеки для кодинга-агента или данные клиента в поддержке), а затем используется эпизодически через сотни ходов.
Почему это важно
В отличие от предыдущих подходов с экспоненциальным затуханием по времени (time-decay), которые лишь понижали ранг документов, новый метод меняет саму стабильность памяти. Это позволяет агентам сохранять «контекстную целостность» в многодневных задачах, предотвращая тихие ошибки, когда система забывает исходные инструкции из-за шума в виде промежуточных логов или побочных запросов.
Источник: Towards Data Science ↗
