3,583 papers
arXiv:2608.19652 76 20 авг. 2026 г. FREE

StateMem: явное отслеживание того, что устарело, в долгих диалогах с LLM

КЛЮЧЕВАЯ СУТЬ
Обнаружено: модель не забывает факт — она путает актуальное значение с тем, что просто чаще мелькало в переписке. Даже если правильная цифра точно есть в контексте, модель хватает первое или самое повторяемое число, а не последнее верное. Метод StateMem позволяет вести долгий проектный чат с меняющимися цифрами так, чтобы финальные расчёты шли от последней версии данных, а не от черновика из пятого сообщения. Каждый факт получает статус и список того, от чего он зависит — когда исходная цифра меняется, все производные расчёты помечаются требует пересчёта, и модель обязана их обновить, а не тихо оставить как есть.
Адаптировать под запрос

TL;DR

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

Проблема, которую метод решает — не в том, что модель "теряет" факт в длинном диалоге. Даже если нужная цифра точно есть в контексте, модель часто цепляется за первое или самое часто повторяемое значение, а не за последнее актуальное. Пример из жизни: в начале переписки договорились про бюджет 500 тысяч рублей, через 20 сообщений подрядчик увеличил его до 800 тысяч — а модель, считая ROI или итоговую смету, продолжает использовать старую цифру, потому что никто явно не сказал ей "пересчитай всё, что зависит от бюджета".

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

🔬

Схема метода

ШАГ 1 (отдельный запрос на каждую реплику): Разбор сообщения на "единицы состояния" 
→ факт + источник + от чего зависит + приоритет (жёсткое правило / гибкое)

ШАГ 2 (без LLM, механическая проверка): Если факт изменился — 
пометить его как SUPERSEDED, а все связанные с ним факты как NEEDS_RECHECK

ШАГ 3 (отдельный запрос при ответе на вопрос): Собрать только активные факты 
и явно пересчитать всё, что помечено NEEDS_RECHECK → финальный ответ

В оригинале шаги 1 и 3 — это отдельные вызовы модели, шаг 2 — механическая проверка без LLM. В обычном чате все три шага можно свести в один диалог, если явно просить модель вести такую таблицу и обновлять её после каждого важного изменения.


🚀

Пример применения

Задача: Вы ведёте с ассистентом долгий чат по подготовке питча для инвесторов. За несколько дней переписки менялись ключевые цифры: выручка, юнит-экономика, размер раунда. Нужно, чтобы финальная версия питча считала всё от актуальных данных, а не от черновых цифр из третьего сообщения.

Промпт:

Веди для меня таблицу состояния проекта в таком виде:

АКТИВНЫЕ ФАКТЫ:
- [факт] | источник: [когда/кто сказал] | зависит от: [ничего / других фактов]

УСТАРЕВШИЕ ФАКТЫ (не используй в расчётах, но не удаляй):
- [факт] | заменён на: [новый факт]

ТРЕБУЕТ ПЕРЕСЧЁТА (изменился исходный факт, но производное значение ещё старое):
- [что нужно пересчитать] | из-за изменения: [какой факт изменился]

Каждый раз, когда я сообщаю новую цифру или условие, которое меняет прежнее:
1. Обнови таблицу — перемести старый факт в "устаревшие"
2. Найди всё, что зависело от этого факта, и помести в "требует пересчёта"
3. Прежде чем отвечать на любой мой вопрос — проверь список "требует пересчёта" 
   и обнови все производные цифры

Вот исходные данные проекта: {данные_проекта}

Результат: Модель будет держать в чате видимую таблицу с тремя блоками. Когда вы сообщите новую цифру (например, изменённую выручку), она пометит старую как устаревшую и явно перечислит, какие расчёты (маржа, ROI, прогноз) нужно обновить, прежде чем дать финальный ответ.


🧠

Почему это работает

Модель хорошо запоминает факты, которые есть в контексте, но плохо умеет сама решать, какие из старых расчётов "протухли" после исправления одного исходного числа. Она просто добавляет новую информацию в общий пул, а не аннулирует то, что от неё зависело.

Зато модель хорошо выполняет явные структурированные инструкции — если сказать "если X изменилось, найди всё, что от X зависит, и пересчитай", она это сделает почти механически.

Метод превращает "помни, что что-то изменилось" (то, что модель делает плохо) в "проверь список зависимостей и пересчитай отмеченное" (то, что модель делает хорошо) — за счёт явной структуры, а не надежды на память модели.

Рычаги управления: - Разделение на "жёсткие" и "гибкие" факты → жёсткие (бюджет, дедлайн) требуют строгого пересчёта, гибкие (предпочтения) можно оставить как есть - Частота обновления таблицы → после каждого сообщения (для критичных проектов) или раз в несколько сообщений (для экономии токенов) - Явные связи "зависит от" → чем подробнее вы их прописываете в начале, тем точнее модель поймёт, что пересчитывать


📋

Шаблон промпта

Мы ведём длинный проект: {описание_задачи}. 
Условия и цифры могут меняться по ходу переписки.

Веди таблицу состояния в трёх блоках:
1. АКТИВНЫЕ ФАКТЫ — текущие верные данные, с указанием от чего каждый производный факт зависит
2. УСТАРЕВШИЕ — заменённые данные (для истории, не используй в расчётах)
3. ТРЕБУЕТ ПЕРЕСЧЁТА — производные значения, которые нужно обновить из-за изменения исходных данных

Когда я сообщаю новую информацию, которая меняет прежний факт:
- перемести старый факт в "устаревшие"
- найди всё, что от него зависело, и добавь в "требует пересчёта"
- перед ответом на мой вопрос — обязательно обнови всё из этого списка

Начальные данные: {исходные_факты}

🚀 Быстрый старт — вставь в чат:

Вот шаблон StateMem для отслеживания меняющихся условий в проекте. 
Адаптируй под мою задачу: {твоя задача}. 
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

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


⚠️

Ограничения

⚠️ Не панацея: даже лучшая версия метода в исследовании давала точность около 30-40% на самых сложных сценариях — это существенное улучшение, но не полное решение проблемы.

⚠️ Требует дисциплины: если забыть попросить модель обновить таблицу после важного изменения, эффект пропадает — метод работает только пока вы явно поддерживаете структуру.

⚠️ Зависит от модели: на более слабых моделях метод помогает меньше — если модель путает "часто упоминаемое" с "актуальным" на уровне понимания текста, явная таблица не всегда это компенсирует.

⚠️ Не для коротких диалогов: ценность метода проявляется в долгих проектах с реальными изменениями условий — в коротком чате без пересмотра фактов эта техника избыточна.


🔗

Ресурсы

StateMemBench / StateMem, Xinyi Fan, Miri Liu, Ruozhen Yang, Siru Ouyang, Jiawei Han — University of Illinois Urbana-Champaign


📋 Дайджест исследования

Ключевая суть

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

Принцип работы

Три шага: разбор реплики на отдельные факты с зависимостями → пометка устаревших и всего, что от них производно → принудительный пересчёт перед ответом. Модели не нужно самой помнить, что протухло — за неё это делает механическая проверка по графу зависимостей фактов. Суть метода: превратить задачу 'вспомни, что изменилось' в задачу 'проверь список и пересчитай отмеченное' — а вторую модель решает почти на автомате.

Почему работает

Модель отлично держит факты в контексте, но плохо сама решает, какие расчёты протухли после правки одного числа. Она просто добавляет новую цифру в общий пул, а не отменяет то, что от старой зависело. Зато чёткую команду 'если X изменилось — найди зависимое и пересчитай' выполняет почти механически — это не память, а следование структуре. Даже лучшая версия метода в тестах дала точность всего 30-40% на сложных сценариях — заметный шаг вперёд, но далеко не полное решение проблемы.

Когда применять

Долгие рабочие чаты с ИИ → подготовка питчей, смет, переговоров, спецификаций, где цифры и условия меняются по ходу переписки, особенно когда финальный расчёт тянет данные из давно исправленного сообщения. НЕ подходит для коротких диалогов без пересмотра фактов — там таблица избыточна и просто съедает токены.

Мини-рецепт

1. Заведи таблицу: три блока — активные факты, устаревшие, требует пересчёта.
2. Пропиши зависимости: для каждого производного числа (маржа, ROI, смета) укажи, от чего оно считается.
3. При любом изменении: попроси модель перенести старый факт в устаревшие и найти всё, что от него зависело.
4. Перед ответом: заставь модель явно проверить список 'требует пересчёта' и обновить цифры, а не брать первое совпадение из контекста.

Примеры

[ПЛОХО] : Обнови смету с учётом нового бюджета 800 тысяч
[ХОРОШО] : Бюджет изменился с 500к на 800к. Обнови таблицу: перенеси старый факт в устаревшие, найди все зависящие расчёты (ROI, маржа, прогноз выручки) и помести их в требует пересчёта, затем пересчитай каждый перед финальным ответом
Источник: StateMemBench / StateMem: Can Agent Memory Track Evolving State?
ArXiv ID: 2608.19652 | Сгенерировано: 2026-08-21 05:27

Проблемы LLM

ПроблемаСутьКак обойти
Модель считает по устаревшим цифрам, даже если новые есть в контекстеВ длинном диалоге модель цепляется за первое или самое часто упомянутое значение факта. Не за последнее актуальное. Если исходная цифра менялась (бюджет, срок, курс), производные расчёты (смета, ROI, прогноз) продолжают опираться на старое значение. Никто явно не попросил пересчитать то, что от неё зависелоВеди явную таблицу: активные факты / устаревшие факты / что требует пересчёта. При каждом изменении факта проси модель найти всё зависящее от него и явно пересчитать перед ответом

Методы

МетодСуть
Таблица состояния с зависимостями — принудительный пересчётРазбей диалог на три блока: "активные факты" (с указанием от чего каждый зависит), "устаревшие" (заменённые, не удалять) и "требует пересчёта" (производные значения). Когда появляется новый факт: старый переносишь в "устаревшие", всё зависящее от него помечаешь "требует пересчёта", перед ответом проверяешь этот список. Синтаксис: три поля в тексте + пометка "зависит от: [факт]". Работает потому что задача разбивается на две части — "заметить что что-то изменилось" (модель делает плохо сама) и "пройти по явному списку и пересчитать" (модель делает почти механически хорошо). Когда применять: долгие проекты с меняющимися цифрами и условиями — бизнес-планы, спецификации, переговоры. Когда не работает: короткие диалоги без пересмотра фактов — избыточно; если забыть попросить обновить таблицу — эффект пропадает
📖 Простыми словами

CanAgentMemory Systems Track Evolving State?

arXiv: 2608.19652

Большинство AI-ассистентов страдают цифровым склерозом наоборот: они помнят абсолютно всё, но не понимают, когда старая инфа тупо протухла. Модель не умеет зачеркивать данные — она просто сваливает новые факты поверх старых в одну общую кучу. В итоге, если у тебя по ходу разговора изменилась вводная цифра, ассистент радостно выдаст финальный ответ на основе расчетов трехдневной давности.

Это как бухгалтер, который вместо нормальной таблицы ведет расчеты на салфетках. Ты говоришь ему: «Слушай, аренда подорожала на 20%». Он кивает, записывает новую сумму на свежем листке, но итоговую смету проекта берет со старой салфетки. В отчёте получается полная каша, потому что логические связи между цифрами в его голове просто разорваны.

Эту проблему решает метод StateMem. Он заставляет сетку вести память не сплошным текстом, а в виде карточек состояний с жесткими метками: «актуально» или «заменено». Главная фишка здесь — графы зависимостей: когда меняется базовый факт, модель автоматически проходится по всей цепочке и пересчитывает всё, что из него следовало, аннулируя старый мусор.

Тестировали механику на инвесторских питчах, но принцип универсален. Такая динамическая память критична для любых автономных агентов: от AI-программистов, где одна правка конфига ломает десять модулей, до персональных ассистентов и сложных CRM-пайплайнов. Если диалог длится дольше пары сообщений, без явного отслеживания состояний агент превращается в генератор бреда.

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

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с