3,583 papers
arXiv:2605.18565 72 18 мая 2026 г. FREE

LongMINT: почему LLM теряет историю в длинных разговорах — и как с этим жить

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

TL;DR

LLM страдает от "дрейфа в сторону свежего": когда информация в разговоре обновляется, модель постепенно "забывает" старые состояния и цепляется за последние. Спросишь что было до третьего обновления — модель расскажет про текущее. Это не случайный глюк, а системная особенность: все протестированные системы показали среднюю точность 27.9% на задачах с обновляющейся информацией.

Хуже всего модели справляются с двумя типами запросов: "что было ДО этого обновления" (точность ~21%) и "сколько раз менялось / в каком порядке / агрегируй изменения" (точность ~26.5%). Зато текущее состояние после апдейтов модели восстанавливают сносно (~47.5%). Причина — у модели нет временного якоря: когда контекст длинный и информация перезаписывается, модель конструирует "память" жадно сливая всё в одну кучу, а потом не может разобрать кто кого перезаписал.

Главный виновник — не ответ, а конструкция памяти: исследователи разложили ошибки на два этапа. Потери при построении памяти из контекста дают 41.7% падения точности, потери при ответе по готовой памяти — ещё 25.2%. То есть основная проблема не в том, что модель глупо отвечает, а в том, что она неправильно укладывает информацию при чтении длинного контекста. Плюс системы жёстко предпочитают дописывать новое (76.8% операций — вставка), а удалять и обновлять почти не умеют.


📌

Схема проблемы и антидоты

СЦЕНАРИЙ: длинный разговор с обновляющейся инфой

Тип запроса             Как работает LLM       Твой риск
────────────────────────────────────────────────────────
Текущее состояние       ✅ ~47% точность        Низкий
"Что сейчас?"

Исторический lookback   ❌ ~21% точность        ВЫСОКИЙ
"Что было ДО правки 3?"

Агрегация изменений     ❌ ~26.5% точность      ВЫСОКИЙ
"Сколько раз / в каком
порядке / сравни v1 и v3"

Антидоты — в одном промпте или в структуре разговора:

АНТИДОТ 1: Явный временной якорь
  → "Используй только информацию ДО [момент]. Всё после — игнорируй."

АНТИДОТ 2: Заморозка истории
  → Явно зафиксируй снапшот: "ВЕРСИЯ 1: [текст]. ВЕРСИЯ 2: [текст]. ТЕКУЩАЯ: [текст]"

АНТИДОТ 3: Пошаговое агрегирование
  → Не "сколько раз менялось", а: "1) Найди все упоминания X 2) Запиши каждое с меткой момента 3) Посчитай"

🚀

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

Задача: Ты ведёшь переписку с командой о фичах продукта. За 20 сообщений требования несколько раз менялись. Хочешь спросить: "Что решили по онбордингу на третьем митинге, ДО того как Петя переиграл решение?"

Опасный запрос:

Что мы решили по онбордингу?

Модель выдаст последнее решение, потеряв историю.

С временным якорем:

Ниже — лог наших обсуждений. Найди решение по онбордингу,
которое было актуально ПОСЛЕ сообщения [3] и ДО сообщения [7].
Всё, что написано после [7] — игнорируй полностью.

Отвечай пошагово:
1. Процитируй момент, где это решение принималось
2. Назови его содержание
3. Подтверди что решения после [7] ты не использовал

[лог переписки]

Результат: Модель покажет конкретное историческое решение с цитатой и подтверждением что не "съехала" на более свежие данные. Без явного якоря она почти гарантированно вернёт последнюю версию.


🧠

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

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

Сильная сторона LLM — она хорошо следует явным инструкциям про то что читать и какую часть контекста использовать. Когда ты явно говоришь "смотри только на блок [3]-[7]", модель ограничивает область поиска. Когда ты просишь "процитируй момент решения" — она вынуждена найти конкретное место, а не реконструировать по общему впечатлению.

Как обойти — три рычага:

  • Явные метки версий (ВЕРСИЯ 1: ... ВЕРСИЯ 2: ...) устраняют неоднозначность — модель видит структуру вместо каши
  • Запрет на определённый диапазон ("игнорируй всё после [N]") создаёт искусственный временной барьер
  • Пошаговая инструкция для агрегации ("найди все → запиши → посчитай") разбивает провальную задачу на мелкие, с которыми модель справляется

📋

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

Ниже — контекст с {описание_что_меняется: требования / решения / факты}.
Информация в нём обновлялась {число} раз.

Мне нужно:
{твой_вопрос}

Правила:
- Используй ТОЛЬКО информацию из {временной_диапазон: "блока [N] до блока [M]" / "до момента X"}
- Всё до/после этого диапазона — не используй
- Отвечай пошагово:
  1. Найди все релевантные упоминания в нужном диапазоне
  2. Процитируй каждое (кратко)
  3. Дай финальный ответ

{контекст}

Плейсхолдеры: - {описание_что_меняется} — что именно эволюционирует: требования, цены, договорённости, факты - {временной_диапазон} — явно укажи границы: "сообщений 5-12", "до 15 января", "до правки #3" - {твой_вопрос} — конкретный запрос с явным указанием временной точки

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

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

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

LLM спросит про структуру контекста и что именно менялось — потому что ей нужно понять тип обновлений (перезапись vs накопление) чтобы правильно выстроить временны́е барьеры.


⚠️

Ограничения

⚠️ Агрегация через много обновлений: Даже с явными метками версий, задачи типа "сколько раз менялось / упорядочи все изменения / сравни версии 2 и 5" остаются сложными. Чем больше обновлений — тем хуже. Лучше разбивать на отдельные запросы по каждой версии.

⚠️ Сжатые/пересказанные контексты: Если ты попросил модель "кратко запомни" или "сделай summary" длинного разговора — историческая провенанс (что когда было актуально) скорее всего потеряна. Агрессивная компрессия убивает историю. Для важных исторических снапшотов — сохраняй оригиналы, не только summary.

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

⚠️ Не универсальное решение: Это workaround, не fix. Фундаментальная проблема (модели плохо строят память при чтении) остаётся. Лучший инструмент — не пытаться запихнуть всю историю в один контекст, а структурировать разговор заранее.


🔍

Как исследовали

Исследователи из UNC Chapel Hill задались вопросом: а реально ли все эти "продвинутые системы памяти" работают в условиях, приближённых к реальным? Взяли 4 типа сред где информация по-настоящему эволюционирует: простые базы фактов (bAbI), длинные диалоги с накапливающимися предпочтениями, историю правок Wikipedia-статей, и историю коммитов GitHub-репозиториев. Итого ~15.6k вопросов с контекстами от 0.3k до 1.8M токенов — серьёзный масштаб.

Сравнивали 7 систем: от "просто дать модели весь контекст" до специально обученных агентов с памятью (MemAgent, AtomMem, Mem-α, SimpleMem). Каждую систему гоняли на двух типах вопросов: найди конкретный факт (прошлый или текущий) и агрегируй несколько фактов через обновления.

Результат оказался неутешительным для всей отрасли: лучшая система набрала 33.4%, средняя — 27.9%. Самый неожиданный вывод — SimpleMem с Gemini Flash проиграл более простым методам. Причина: там заложена агрессивная компрессия контекста, которая отлично работает на коротких разговорах, но режет историческую провенанс в длинных. Разработчики систем оптимизировали под лёгкие бенчмарки, а столкнулись с реальной сложностью — и сломались. Для практика это значит: компрессия и summary — не бесплатны, они стоят историей.


💡

Адаптации и экстраполяции

🔧 Техника: "Заморозка снапшота" перед важным решением

Если ты знаешь что сейчас зафиксируешь что-то важное и потом контекст будет дополняться — явно создай снапшот:

СНАПШОТ [дата/номер]: Текущее решение по [теме] — [текст решения].
Этот снапшот зафиксирован и не изменяется последующими сообщениями.

Потом при вопросе "что было решено тогда" — явно ссылайся на снапшот по метке.


🔧 Техника: Разделение "текущее vs историческое" в системном промпте

Если ведёшь длинный рабочий проект в одном чате, добавь в начало:

В этом разговоре информация будет обновляться.
При ответах на вопросы:
- Если спрашивают "сейчас" / "текущее" — используй последнее упоминание
- Если спрашивают "раньше" / "до [события]" / "в версии [N]" — используй только информацию ДО указанного момента
- При агрегации (сколько раз / в каком порядке) — перечисляй все вхождения явно перед финальным ответом

🔗

Ресурсы

Работа: LongMINT: Evaluating Memory under Multi-Target Interference in Long-Horizon Agent Systems (2025/2026, препринт)

Авторы: Hyunji Lee, Justin Chih-Yao Chen, Joykirat Singh, Zaid Khan (UNC Chapel Hill), Elias Stengel-Eskin (University of Texas at Austin), Mohit Bansal (UNC Chapel Hill)

Данные и код: github.com/amy-hyunji/LongMINT

Связанные системы из исследования: MemAgent, AtomMem, Mem-α, SimpleMem, HippoRAG


Проблемы LLM

ПроблемаСутьКак обойти
Модель возвращает последнее состояние вместо историческогоПросишь "что было ДО правки 3". Получаешь текущее состояние. Модель читает контекст линейно. Более поздний текст перебивает влияние более раннего. Старые версии физически не стёрты — но модель игнорирует их при ответе. Проблема для любого контекста где информация обновляласьДай явный временной барьер: "используй только блоки [N][M], всё после — игнорируй". Добавь шаг самопроверки: "подтверди что не использовал данные после [M]"

Методы

МетодСуть
Явный временной барьер — достать историческое состояниеУкажи диапазон контекста который модель должна читать. Явно запрети всё за пределами. Попроси процитировать находку. "Используй ТОЛЬКО информацию из блоков [N][M]. Всё до/после — не используй. Процитируй источник." Почему работает: Без барьера модель конкурирует со всем контекстом сразу — и последнее побеждает. С барьером область поиска сужена. Цитата не даёт выдать "общее впечатление" вместо конкретного факта. Когда работает: контекст структурирован (есть номера, метки, разделители). Когда не работает: сплошной текст без разметки, много обновлений одного объекта сразу

Тезисы

ТезисКомментарий
Запросы про историю в 2 раза сложнее запросов про текущее состояниеТекущее состояние модель восстанавливает сносно. Исторические срезы и агрегация изменений — вдвое хуже. Причина: у модели нет временны́х меток. Она строит одно слитное представление — без слоёв "было тогда, стало потом". Применяй: если вопрос про историю или про подсчёт изменений — добавляй явный барьер и пошаговую инструкцию. Без них ответ ненадёжен
📖 Простыми словами

LongMINT: Evaluating Memory under Multi-Target Interference in Long-HorizonAgentSystems

arXiv: 2605.18565

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

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

Исследование LongMINT вскрыло печальную правду: современные AI-ассистенты катастрофически лажают, когда нужно вычленить состояние объекта «до того, как всё изменилось». Средняя точность в таких задачах — жалкие 27.9%. Это значит, что в 7 из 10 случаев модель просто наврет или подсунет актуальные данные вместо исторических. Главные виновники здесь — дрейф в сторону свежего и интерференция целей, когда старые инструкции конфликтуют с новыми и модель выбирает то, что «ближе лежит».

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

Короче, не надейся, что нейронка сама разберется в твоей «санта-барбаре» с правками. 10 из 15 систем валятся на элементарных проверках памяти, если данные обновлялись больше пары раз. Пока разработчики не прикрутят к LLM нормальную индексацию времени, единственный способ не получить галлюцинацию — это четко фиксировать версии самому или не заставлять модель копаться в архивах. Иначе ты рискуешь построить бизнес-процессы на фундаменте из уверенного бреда.

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

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

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