3,583 papers
arXiv:2610.25373 76 18 окт. 2026 г. FREE

Derived State в памяти агентов: разбивай вопрос на входные состояния, а не ищи ответ целиком

КЛЮЧЕВАЯ СУТЬ
Mem0 отвечает на 86,7% вопросов по одной истории, но на вопросах «посчитай из нескольких записей» падает до 33,3%. Метод разбиения позволяет получать ответ, которого нет ни в одной заметке (например, «какие крупные клиенты ещё без договора»). Фишка: память знает каждый факт по отдельности, но не достаёт его под сложный вопрос. Поэтому вопрос режут на подвопросы про входные состояния, отвечают на каждый отдельно и собирают итог. Если модели дать верные ответы на подвопросы, она решает все вопросы, а сборка возвращает до 30 пунктов точности.
Адаптировать под запрос
⚡

TL;DR

Исследование показывает, что агентная память плохо справляется с вопросами, ответ на которые нигде не записан. Его нужно вычислить из нескольких записей по правилам. Например, «какие клиенты крупные и ещё без договора». Авторы называют такой ответ производным состоянием (derived state). Они построили бенчмарк MemDerive: вымышленные истории событий с точными эталонами, где для каждого вопроса известна цепочка промежуточных шагов. Это позволяет увидеть, на каком шаге система сломалась, а не только то, что ответ неверный.

Главная находка: системы памяти (Mem0, Cognee и другие) на таких вопросах проигрывают даже простому поиску по ключевым словам. Модель при этом отвечает почти идеально, если дать ей нужные записи. Значит, проблема не в рассуждении, а в том, что память не достаёт нужные промежуточные факты. Система «знает» их: если спросить напрямую, ответит верно. Но под сложный вопрос она их не подтягивает. Вторая боль: когда меняется один факт (бюджет клиента вырос), производный ответ тихо устаревает, и никто об этом не говорит. Такие неявные изменения системы обновляют хуже всего.

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

🔬

Схема метода

Это не готовая техника, а диагностика плюс три принципа дизайна памяти.

ДИАГНОСТИКА (как нашли слабое место):
ШАГ 1: Вопрос → разложить на цепочку промежуточных состояний (от ответа вниз к записям)
ШАГ 2: Спросить систему про каждое промежуточное состояние отдельно
ШАГ 3: Сравнить: где ответ верный напрямую, но пропал в сложном вопросе → «не собрано» (ungathered)

ТРИ ПРИНЦИПА:
1. СОБИРАЙ входы по цепочке вывода: вопрос → подвопросы про входы → сборка
2. ХРАНИ правила вместе с версиями (как факты)
3. ПОМНИ зависимости: что от чего вычислено → при изменении входа пересчитай зависимое

Для читателя в чате или агенте принцип 1 превращается в промпт: подвопросы, потом сборка (шаблон ниже). Принципы 2 и 3 — это инструкции для файла памяти агента и для разработчиков систем памяти.

📌

Что нашли

  • На «парных» вопросах по одной истории Mem0 падает с 86,7 % до 33,3 %, Cognee с 60 % до 16,7 %. Если дать всю историю целиком, та же модель отвечает на 86,7 %. Вопросы решаемы, теряется всё при выдаче памяти.
  • Если дать модели верные ответы на подвопросы, она решает все вопросы. Узкое место — получить промежуточные состояния, а не скомбинировать их.
  • Пересборка ответа из ответов на подвопросы возвращает до 30 пунктов точности.
  • На полном бенчмарке системы памяти отвечают правильно на 30–48 % вопросов. Простой BM25 (поиск по словам) даёт 58 %, вся история целиком — около 80 %, только нужные события — 96 %.
  • Неизменённые ответы системы сохраняют хорошо (около 91–93 %). Явные изменения (новая запись прямо меняет факт) обновляют в 82 % случаев. Неявные (изменился вход, а про сам ответ записи нет) — только в 41 %.
  • Работа «на входе» (сложное извлечение и сохранение фактов при поступлении) не купила ни точности, ни обновления.
🚀

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

Задача: Вы ведёте продажи в B2B-студии. Агент с памятью читает ваши заметки по сделкам из amoCRM и отвечает на вопросы. Вы спрашиваете: «Каким крупным клиентам, которые ещё в работе, мы не отправили договор?» Ответа в заметках нет. Его нужно собрать из пяти состояний: кто в работе, кто крупный, кому отправлен договор, как менялся порог «крупного», как менялись бюджеты.

Промпт:

Ниже журнал заметок по сделкам. Ответь на вопрос, но не напрямую.

ЖУРНАЛ:
1. 03.03 «Ромашка» — сделка 450 000 ₽.
2. 05.03 «Вектор» — сделка 280 000 ₽.
3. 06.03 «Нева-Строй» — сделка 600 000 ₽.
4. 11.03 Договор отправлен «Ромашке».
5. 14.03 «Нева-Строй» ушла к конкурентам, сделка закрыта как проваленная.
6. 17.03 Правило: крупный клиент — сделка от 500 000 ₽.
7. 20.03 Правило обновлено: крупный клиент — сделка от 400 000 ₽.
8. 21.03 Бюджет «Вектора» вырос до 420 000 ₽.

ВОПРОС: Каким крупным клиентам, которые ещё в работе, не отправлен договор?

Порядок работы:
1. Выпиши, из каких промежуточных состояний собирается ответ.
2. По каждому состоянию отдельно найди записи в журнале и вычисли его значение на сегодня. Учитывай только последнюю версию каждого факта и правила.
3. Для каждого состояния укажи номера записей-источников.
4. Только после этого собери ответ из промежуточных значений.
5. Если какой-то записи не хватает, скажи, чего именно, а не угадывай.

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

🧠

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

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

Сильная сторона. Модель хорошо отвечает на простые, прямые вопросы («какой сейчас порог крупного клиента?»). И хорошо комбинирует верные части. Это подтверждено: с правильными ответами на подвопросы она решила все вопросы.

Как метод использует это. Разбиение превращает один неудобный вопрос в несколько прямых. Каждый получает собственный поиск и собственные источники. Сборка в конце опирается уже на проверенные части.

Рычаги управления: - Требование номеров записей-источников → можно проверить каждое промежуточное состояние вручную. - Явная фраза «учитывай только последнюю версию правила» → снижает риск взять устаревший порог или условие. - Условие «если не хватает записи, скажи» → отсекает выдуманные ответы там, где история неполная. В статье такие вопросы имеют отдельную метку «неизвестно». - Число подвопросов → для простых вопросов уберите разбиение, для сложных оставьте.

📋

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

Это перенос в промпт приёма «разбей вопрос на входы и собери заново». В статье этот приём проверен на системах памяти, а не как текстовая инструкция.

Ниже {описание_источника}. Ответь на вопрос, но не напрямую.

{источник}

ВОПРОС: {вопрос}

Порядок работы:
1. Выпиши, из каких промежуточных состояний собирается ответ.
2. По каждому состоянию отдельно найди записи в {источнике} и вычисли значение на {дату_или_момент}. Учитывай только последнюю версию каждого факта и правила.
3. Для каждого состояния укажи номера записей-источников.
4. Только после этого собери ответ из промежуточных значений.
5. Если какой-то записи не хватает, скажи, чего именно, а не угадывай.

Подставьте: {описание_источника} (журнал заметок, переписка, лог задач), {источник} (сам текст), {вопрос} (ваш вопрос), {дата_или_момент} («сегодня», «на 1 апреля»).

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

Вот шаблон «разбей вопрос на входы и собери заново». Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.

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

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

📌

Адаптации (мои, не из статьи)

Принципы про правила и зависимости можно перенести в инструкции агента, например в файл заметок или CLAUDE.md. Эти формулировки в статье не проверялись:

  • «Правила и пороги записывай с датой и номером версии. Старую версию не удаляй, помечай как устаревшую».
  • «Для каждого вычисленного итога записывай, из каких фактов он получен. При изменении любого из них пересчитывай итог».
  • «Перед ответом по итоговым показателям заново проверь их входы, не доверяй сохранённому итогу».
⚠️

Ограничения

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

⚠️ Основной адресат — разработчики памяти: три принципа (собирать по цепочке, хранить версии правил, помнить зависимости) предполагают доработку самой системы памяти. Читатель, который не пишет код, применит напрямую только часть.

⚠️ Синтетические данные: истории с вымышленными сущностями (города, клиенты, рейсы) и жёсткими правилами. Реальные заметки грязнее, а правила в них часто не записаны.

⚠️ Нужно знать структуру вопроса: разбиение хорошо работает, когда вы понимаете, из чего складывается ответ. Если разложить его неправильно, получите уверенный, но неверный результат.

⚠️ Эффект «до 30 пунктов»: это максимум для лучших систем и вопросов. Выборка парных вопросов небольшая, ответы давала одна модель.

⚠️ Неявные изменения остаются слабым местом: даже с разбиением система не заметит, что рост бюджета «Вектора» поменял статус «крупный», если вы не пересчитываете зависимое состояние.

🔗

Ресурсы

MemDerive: A Diagnostic Benchmark for Agent Memory over Evolving Data. Авторы: Sen Gao, Han Chen, Bingsheng He (National University of Singapore); Yongan Li, Shixuan Sun (Shanghai Jiao Tong University); Ming Wu, Jason Zeng, Michael Heinrich (Zero Gravity Labs). Бенчмарк: anonymous.4open.science/r/DeriveMem-67C6 Фреймворк оценки: anonymous.4open.science/r/DerivEval-6799 Упомянутые системы и бенчмарки: Mem0, Cognee, LoCoMo, LongMemEval.


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

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

Mem0 отвечает на 86,7% вопросов по одной истории, но на вопросах «посчитай из нескольких записей» падает до 33,3%. Метод разбиения позволяет получать ответ, которого нет ни в одной заметке (например, «какие крупные клиенты ещё без договора»). Фишка: память знает каждый факт по отдельности, но не достаёт его под сложный вопрос. Поэтому вопрос режут на подвопросы про входные состояния, отвечают на каждый отдельно и собирают итог. Если модели дать верные ответы на подвопросы, она решает все вопросы, а сборка возвращает до 30 пунктов точности.

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

Процесс из трёх шагов: вопрос → подвопросы про входы → сборка в конце. Вместо «найди ответ» модель получает «найди, кто в работе», «найди текущий порог крупного», «найди, кому ушёл договор». Каждый такой вопрос простой и прямой, на них модель отвечает хорошо. Ответ собирается только из проверенных частей, а не угадывается целиком. Это как бухгалтер: сначала сверяет каждую накладную, потом подводит итог. Дополнительно авторы советуют хранить правила с версиями, как факты. И записывать, от чего зависит каждый вычисленный итог.

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

Вопрос «крупные клиенты без договора» не похож по словам ни на одну запись. Поиск по сходству берёт «похожее» и пропускает записи, которые нужны только вместе. Бюджет выдачи тоже ограничен: нужных записей может быть больше, чем влезет. Жесть: простой поиск по словам (BM25) даёт 58%, а системы памяти — только 30–48%. Если дать всю историю целиком, выходит около 80%, а только нужные события — 96%. Ошибка почти всегда не в рассуждении, а в том, что нужные промежуточные факты не достались модели. Подвопросы дают каждому входу свой отдельный поиск. Вторая дыра: когда меняется вход (бюджет вырос), готовый итог молча устаревает. Явные изменения системы обновляют в 82% случаев, неявные — только в 41%.

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

Агенты с долгой историей (CRM, ведение проектов, поддержка, статусы задач в файле прогресса) → вопросы-итоги вида «кто подходит под условие А и не подходит под Б», особенно когда правила и пороги меняются со временем. Для читателя без кода работает перенос в промпт, но в статье его не проверяли: авторы тестировали разбиение внутри систем памяти. Три принципа дизайна (версии правил, зависимости, пересчёт) требуют доработки самой памяти. НЕ подходит для простых прямых вопросов («какой сейчас порог?»): там разбиение лишнее. И для случаев, когда вы сами не знаете, из чего складывается ответ: неверная разбивка даёт уверенный, но неправильный результат.

Мини-рецепт

1. Выпиши входы: какие промежуточные состояния нужны для ответа (кто в работе, какой порог, кому что отправлено).
2. Спрашивай по одному: для каждого состояния найди записи отдельно и вычисли значение на нужную дату.
3. Только свежее: добавь фразу «учитывай только последнюю версию факта и правила».
4. Требуй номера записей: по каждому входу — источники. Так проверишь вручную, где сломалось.
5. Собери в конце: итог только из промежуточных значений.
6. Разреши сказать «не хватает»: пусть назовёт недостающую запись, а не выдумывает.
7. Для файла памяти агента (идея автора обзора, не из статьи): пиши правила с датой и версией, старую версию помечай как устаревшую. У каждого итога записывай, из чего он получен, и пересчитывай при смене входа.

Примеры

[ПЛОХО] : Каким крупным клиентам, которые ещё в работе, мы не отправили договор? (модель ищет «похожие» заметки и пропускает порог, который поменялся, и рост бюджета)
[ХОРОШО] : Ниже журнал заметок по сделкам. Ответь на вопрос, но не напрямую. ВОПРОС: каким крупным клиентам, которые ещё в работе, не отправлен договор? Порядок: 1) выпиши, из каких промежуточных состояний собирается ответ; 2) по каждому отдельно найди записи и вычисли значение на сегодня, учитывая только последнюю версию факта и правила; 3) укажи номера записей-источников; 4) только потом собери ответ; 5) если записи не хватает, скажи какой, а не угадывай. Модель сначала покажет: клиенты в работе, текущий порог «крупного» (400 000, а не старые 500 000), текущие суммы, кому ушёл договор. Рост бюджета «Вектора» до 420 000 поднимет его в «крупные», хотя записи про это нет. Если ответ неверный, вы увидите, на каком именно состоянии модель споткнулась.
Источник: MemDerive: A Diagnostic Benchmark for Agent Memory over Evolving Data
ArXiv ID: 2610.25373 | Сгенерировано: 2026-10-23 11:00

Проблемы LLM

ПроблемаСутьКак обойти
Память или поиск не достают записи для вопроса, ответ на который нигде не записанОтвет нужно вычислить из нескольких записей. Например: «какие крупные клиенты ещё без договора». Вопрос не похож по словам ни на одну нужную запись. Поиск по сходству берёт «похожие» записи и пропускает нужные. Нужные записи значимы только вместе. Модель при этом решила бы задачу, если бы получила входы. Итог: уверенный, но неверный ответ. Простой поиск по ключевым словам нередко справляется лучше сложных систем памятиНе задавай такой вопрос напрямую. Разбей его на вопросы про входные состояния: кто в работе, какой порог, кому отправлено. Найди ответ на каждый отдельно. Потом собери итог. Если можешь, дай модели весь журнал целиком, а не выдачу поиска
Вычисленный итог тихо устаревает, когда меняется один из входовИзменился бюджет клиента. Записи про статус «крупный» нет, но статус уже другой. Система хранит старый итог. Никто не говорит, что он устарел. Явные правки («клиент теперь крупный») обновляются хорошо. Неявные, когда меняется только вход, почти вдвое хужеНе доверяй сохранённым итогам. Перед ответом пересчитывай итог из исходных записей. Для агента с файлом памяти используй журнал зависимостей (см. метод ниже). Эта защита не проверена: она вытекает из диагноза, но не опробована

Методы

МетодСуть
Разбивка вопроса на входы и сборка итога — возвращает точность на сложных вопросахСначала выпиши промежуточные состояния, из которых складывается ответ. Потом по каждому найди записи и вычисли значение. Укажи номера записей-источников. Только в конце собери итог. Шаблон: 1. Выпиши состояния. 2. По каждому найди записи, вычисли значение на {дату}. Бери последнюю версию факта и правила. 3. Укажи номера записей. 4. Собери ответ. 5. Если записи не хватает, скажи какой, не угадывай. Почему работает: один неудобный вопрос становится несколькими прямыми. Модель хорошо отвечает на прямые вопросы. Каждый подвопрос получает свой поиск и свои источники. Сборка опирается на проверенные части. Номера записей позволяют проверить каждый шаг вручную. Пункт про «не хватает записи» отсекает выдумки. Когда да: ответ вычисляется из нескольких фактов, правил или порогов, история длинная и меняется. Когда нет: простой прямой вопрос с одной записью, там разбивка лишняя. Риск: если разложишь вопрос неверно, получишь уверенный неверный результат. Приём проверен внутри систем памяти. Как текстовая инструкция он не измерялся
Версии правил и журнал зависимостей в памяти агента — защита от устаревших итоговВ файл памяти агента (заметки, CLAUDE.md) добавь два правила. Первое: Правила и пороги записывай с датой и версией. Старую версию помечай устаревшей, не удаляй. Второе: Для каждого итога записывай, из каких фактов он получен. При изменении любого входа пересчитай итог. Почему работает: правило меняется так же, как факт. Без версии агент берёт старый порог. Без записанных зависимостей он не знает, какие итоги затронуло изменение. Когда да: долгие проекты, CRM, статусы задач, учёт. Когда нет: короткий разговор без накопленной памяти. Формулировки не проверялись, это перенос принципа

Тезисы

ТезисКомментарий
При ошибках в вычисляемых ответах чаще виноват сбор записей, чем рассужденияМодель хорошо отвечает на простые прямые вопросы. Хорошо комбинирует верные части. Если дать ей правильные промежуточные значения, она решает задачу почти всегда. Ломается этап «достать нужные записи». Применяй: при неверном ответе сначала проверь, увидела ли модель все нужные записи. Не усложняй рассуждение. Спроси её про каждый вход отдельно и найди, где потерялось
Разбивка на подвопросы про входы возвращает десятки процентных пунктов точностиСложный вопрос сам по себе плохо «притягивает» нужные записи. Подвопросы про входы похожи на них по словам. Поэтому находят их лучше. Эффект максимален на вопросах, где ответ собирается из многих частей. Чем проще вопрос, тем меньше польза. Применяй: делай подвопросы в разных поисках или явно по шагам в одном запросе. Для простых вопросов разбивку убирай
📖 Простыми словами

MemDerive: A Diagnostic Benchmark forAgentMemory over Evolving Data

arXiv: 2610.25373

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

Это как попросить стажёра: «Найди всех крупных клиентов без договора», а он приносит тебе пачку макулатуры, где просто чаще всего повторяется слово «договор». Формально молодец, но мимо кассы. Чтобы выдать суть, нужно было сопоставить пять разных фактов: кто сейчас в работе, как менялись бюджеты и какой вообще порог у понятия «крупный клиент». Агент просто не умеет думать во времени и собирать пазл.

Чтобы вылечить этот склероз, авторы выкатили бенчмарк MemDerive — диагностический инструмент, который препарирует память модели по шагам. Вместо абстрактной оценки в духе «угадал или облажался», тест прогоняет систему через цепочку событий и вскрывает траекторию рассуждений. Ты сразу видишь, на каком этапе модель ломается: забыла старый контекст, пропустила смену статуса или упёрлась в лимит контекстного окна.

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

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

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

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

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