TL;DR
Когда LLM отвечает вам в длинном диалоге, она не просто читает ваши сообщения — она читает и свои собственные прошлые ответы как часть контекста. Исследователи проверили это буквально: взяли завершённые многоходовые диалоги, заменили все промежуточные ответы модели на нейтральную фразу "Принято" и заставили модель заново сгенерировать финальный ответ, глядя на те же вопросы пользователя. Результат изменился — значит, модель реально "цепляется" за то, что сама написала раньше.
Самое неприятное: если задачу раскрывать по частям (сначала одно требование, потом другое), а не выдать целиком сразу — модель начинает ошибаться сильнее. И дело не в том, что история становится длиннее. Когда старые ответы заменили не короткой фразой, а фразой такой же длины, эффект был почти одинаковым (+0.068 против +0.069). Значит, вес несёт не объём текста, а его содержание — конкретное неверное предположение или лишняя деталь, которую модель сама сформулировала на шаге 2, продолжает как якорь тянуть её на шаге 6.
Метод диагностики называется Turn Surgery: заменяют не всю историю, а один конкретный ответ модели посередине диалога, а дальше "переигрывают" реальные сообщения пользователя, которые были после этой точки. Так находят, какой именно ход диалога был "токсичным". У 6 из 10 испорченных диалогов нашёлся хотя бы один такой ход, замена которого спасала финальный результат.
Схема метода
ШАГ 1 (диагностика деградации): Сравнить FULL (задача целиком за раз)
и SHARDED (задача по частям, ход за ходом) → найти диалоги,
где к финалу результат провален
ШАГ 2 (нейтрализация всей истории): Заменить ВСЕ промежуточные
ответы модели на нейтральную фразу "Принято" → регенерировать
финальный ответ с теми же вопросами пользователя → сравнить результат
ШАГ 3 (Turn Surgery — точечная замена): Заменить только ОДИН
конкретный промежуточный ответ модели → "переиграть" оставшиеся
реальные сообщения пользователя → сравнить финал с оригиналом
Все шаги в исследовании выполнялись через API отдельными прогонами. Но принцип применим вручную: в ChatGPT/Claude есть функция редактирования сообщений — можно отредактировать конкретный старый ответ модели в истории чата и продолжить диалог заново.
Пример применения
Задача: Вы обсуждаете с ChatGPT коммерческое предложение для клиента через серию из 6 сообщений: сначала описываете продукт, потом бюджет клиента, потом сроки, потом просите финальный текст. На шаге 3 модель ошибочно предположила, что бюджет клиента — 500 тысяч рублей (вы этого не говорили), и к финальному сообщению текст предложения строится вокруг этой несуществующей цифры.
Промпт (если нет функции редактирования сообщений):
В нашем диалоге про коммерческое предложение ты написал(а), что бюджет
клиента — 500 тысяч рублей. Это неверно, я такого не говорил(а).
Полностью отбрось это предположение, как будто его не было.
Вот реальные факты: бюджет клиента — до 1,2 млн рублей, срок реализации —
3 месяца, тон текста — деловой, без воды.
Теперь, учитывая только реальные факты из нашего диалога и это уточнение,
заново составь финальный текст коммерческого предложения.
Результат: Модель перегенерирует финальный текст, отталкиваясь от реальных данных, а не от собственной ошибки, которая тянулась через несколько сообщений. Если у вас есть доступ к функции редактирования сообщений — эффективнее отредактировать сам ответ модели на шаге 3, заменив его на короткое "Принято, уточнил детали", и продолжить диалог с того же места.
Почему это работает
LLM воспринимает весь текст диалога — включая собственные прошлые ответы — как данность, на которую можно опираться. Она не умеет "усомниться" в том, что сама написала раньше, даже если это было предположением, а не фактом. Поэтому ошибка на шаге 3 спокойно доживает до шага 6.
При этом сильная сторона модели — она честно и последовательно строит ответ на основе всего видимого контекста. Это и хорошо (учитывает нюансы), и плохо (тащит ошибки).
Метод обходит слабость просто: убирает конкретный "токсичный" фрагмент из истории, заменяя его нейтральной фразой. Модель заново строит ответ уже без ложной опоры — и точность растёт.
Рычаги управления: - Какой ответ заменять — тот, где вы подозреваете неверное предположение или лишнюю деталь, которая мешает дальше - На что заменять — короткая нейтральная фраза ("Принято", "Хорошо, продолжаем") — важно не удалять сообщение целиком, а замещать, чтобы не сломать структуру диалога - Когда применять — при первых признаках, что модель несколько ходов подряд повторяет одну и ту же странную деталь, которую вы не подтверждали
Шаблон промпта
В нашем диалоге про {задача} ты написал(а) {проблемное предположение
или деталь}. Это было ошибкой — я такого не говорил(а)/не подтверждал(а).
Полностью отбрось это предположение, как будто его не было.
Вот реальные факты: {уточнение}.
Теперь, учитывая только это уточнение и остальные мои сообщения,
заново дай финальный результат по задаче: {текущий запрос}.
Подставьте: {задача} — тема диалога, {проблемное предположение} — конкретная фраза модели, которая тянет ошибку, {уточнение} — реальные факты, {текущий запрос} — что нужно получить в итоге.
🚀 Быстрый старт — вставь в чат:
Вот принцип "чистки истории диалога": если LLM тянет ошибку из своего
старого ответа через несколько сообщений, можно попросить её отбросить
это предположение и уточнить факты заново.
Помоги мне применить это к моему диалогу: {опиши свою задачу и в чём
модель начала путаться}. Задавай вопросы, чтобы понять детали.
[вставить шаблон выше]
Ограничения
⚠️ Не всегда помогает: в исследовании только 6 из 10 испорченных диалогов имели хотя бы одну точку замены, которая реально спасала результат. Большинство проверенных точек вообще не меняли финал.
⚠️ Диагностика вручная: чтобы применить технику, нужно самому заметить, какой именно ответ модели содержит проблемное предположение — автоматического способа найти это в обычном чате нет.
⚠️ Целиком за раз — лучше, чем по частям: если у вас есть возможность сформулировать задачу полностью с самого начала, а не раскрывать её порциями — это снижает риск деградации без всякой "хирургии".
Как исследовали
Команда взяла 627 задач из шести семейств (работа с функциями, код, данные-в-текст, SQL-запросы, математика, суммаризация) и прогнала их через пять моделей, сравнивая полную формулировку задачи за раз с постепенным раскрытием по частям. Дальше взяли завершённые "разбитые" диалоги и проиграли их заново, заменив прошлые ответы модели на нейтральную фразу — эффект оказался небольшим, но стабильным на почти 3000 диалогов.
Ключевой контрольный эксперимент: заменили ответы модели не короткой фразой, а фразой той же длины, что оригинал — эффект остался почти тем же. Это доказывает, что дело не в объёме текста истории, а именно в её содержании — конкретных словах, которые модель сама написала.
Затем прицельно "прооперировали" 237 сложных диалогов, меняя по одному ответу модели за раз — в 64% случаев нашли хотя бы одну точку замены, которая спасала финальный результат, а почти в половине задач с бинарным исходом замена превращала провал в успех. Отдельно на открытой модели заглянули "под капот" и увидели, что полезные замены действительно меняют внутреннее состояние модели глубже по диалогу — но паттерн этих изменений разный для разных задач, единого универсального механизма не нашли.
