3,583 papers
arXiv:2610.06496 82 5 окт. 2026 г. FREE

Active Intent: отвергнутое предложение в диалоге ломает ответ модели, даже если вы от него отказались

КЛЮЧЕВАЯ СУТЬ
Обнаружено: отказ от предложения в диалоге вредит ответу модели сильнее, чем согласие. Приём из этого вывода позволяет считать цену, код и SQL по актуальным условиям, а не по тому, что вы уже отменили. Перед ответом модель выписывает два списка: «действует» и «отменено», а вы проверяете их глазами. Модель перестаёт угадывать намерение из каши реплик и считает по чистому списку. В неудачных ответах после отказа в 60% случаев всплывало именно отвергнутое предложение. Фишка: для модели ваше «нет» — просто ещё один токен рядом с вариантом, который вы отвергли. Честно: сам приём «выпиши действующее» авторы не проверяли. Они дообучали свою модель (метод Intent-OPSD), а здесь перенесён только вывод.
Адаптировать под запрос
⚡

TL;DR

Исследование показывает, что модель путает «что упомянуто» с «что действует». Если в диалоге вы предложили изменение, а потом отказались, то эта реплика остаётся в контексте и влияет на итог. Точность падает сильнее, чем после принятого изменения. Даже нейтральные уточняющие вопросы слегка портят результат, хотя задача не менялась.

Типичная боль такая. Вы обсуждаете с моделью расчёт: «а если взять 2 мешка вместо 4?» — «нет, оставляем 4». Модель считает на 2 мешка, или смешивает оба варианта, или тащит отвергнутое число в промежуточные шаги. Причина простая: в контексте нет пометки «это отменено». Есть только текст, и модель опирается на всё, что в нём лежит. В неудачных ответах после отказа в 60% случаев всплывало как раз отвергнутое предложение.

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

🔬

Схема метода

Это не метод авторов, а то, что из него следует для практики. Сам Intent-OPSD — дообучение, к чату он неприменим.

ШАГ 1: Попросить модель выписать только действующие требования → список «в силе»
ШАГ 2: Отдельно выписать снятое и заменённое → список «не учитывать»
ШАГ 3: Проверить список глазами → поправить
ШАГ 4: Дать финальную задачу одним блоком (лучше в новом чате) → ответ

Шаги 1–2 идут в одном запросе. Шаг 4 — отдельный запрос, желательно в чистом контексте.

🚀

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

Задача: Вы продавец на Ozon и считаете цену товара вместе с ассистентом. Начали с закупки 4 000 ₽, комиссии маркетплейса и логистики. Потом бросили: «А если дать скидку 20%?» Модель прикинула. Вы решили: «Нет, оставляем 10%». Ещё пара уточнений про логистику, и вы просите итоговую цену. Именно здесь модель с высокой вероятностью подхватит 20%.

Промпт:

Прежде чем считать итог, соберём актуальное задание.

1. Выпиши ТОЛЬКО требования и вводные, которые действуют сейчас.
2. Отдельным списком выпиши то, что мы обсуждали, но отменили или заменили. Для каждого пункта укажи, что именно действует вместо него.
3. Не считай. Дождись моего «ок».

После «ок»:

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

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

🧠

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

Слабость модели. Модель читает диалог как единый текст и не ведёт «журнал отмен». Реплика «давай 2 мешка» лежит в контексте так же, как «нужно 4 мешка», а слово «нет» — ещё один токен. Поэтому отвергнутое предложение работает как подсказка в сторону ошибки. Тут же объяснение, почему после отказа хуже, чем после согласия: при согласии старое значение заменено и в тексте выглядит как «было — стало», а при отказе остаются два конкурирующих варианта без чёткой пометки.

Сильная сторона. Если вся задача с актуальными условиями дана одним чистым сообщением, модель решает её заметно лучше. Авторы называют это сильной одноходовой способностью. Её можно использовать как опору, и именно на ней построено их дообучение.

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

Рычаги: - Список «отменено» → оставьте, если в диалоге много отвергнутых вариантов; уберите для коротких задач. - Пауза «жду ок» → оставьте для важных расчётов; уберите для рутины. - Новый чат вместо продолжения → переносите туда только список «действует сейчас». Это надёжнее всего: авторы видят, что ошибки копятся по мере длины диалога. - Чем больше раундов «предложил — отверг» подряд, тем хуже. Если вариантов много, фиксируйте итог после каждого.

📋

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

Это перенос принципа статьи, а не промпт из неё: авторы промптов не публикуют.

<Роль>
Ты ведёшь учёт актуального задания. Твоя задача — отделять то, что действует, от того, что просто упоминалось.


<Задача>
Перед финальным ответом по задаче «{задача}» собери состояние диалога.


<Состояние>
ДЕЙСТВУЕТ:
- {требование или вводное, которое сейчас в силе}
ОТМЕНЕНО / ЗАМЕНЕНО:
- {что обсуждалось и снято} → вместо него: {что действует}


<Правила>
1. Если пункт предлагался и был отвергнут — он в «ОТМЕНЕНО», в ответе не используется.
2. Если пункт заменён — используется только новая версия.
3. Нейтральные уточнения не меняют требования, но если они его уточнили, обнови формулировку в «ДЕЙСТВУЕТ».
4. Если непонятно, принято изменение или нет — задай вопрос, не угадывай.
5. В решении и промежуточных шагах не упоминай значения из «ОТМЕНЕНО».


<Шаги>
1. Заполни <Состояние> по диалогу выше.
2. Покажи его мне и дождись подтверждения.
3. После подтверждения реши задачу строго по «ДЕЙСТВУЕТ».

В {задача} подставьте, что вы решаете: расчёт цены, SQL-запрос, функцию, ТЗ. Остальное модель заполнит сама по диалогу.

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

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

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

LLM спросит, какие вводные уже зафиксированы и что вы обсуждали, но отвергли. Это нужно, чтобы разделить «действует» и «отменено»: именно это различие и есть суть метода. Структуру <Состояние> она возьмёт из шаблона и подстроит под вашу область.

⚠️

Ограничения

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

⚠️ Дообучение недоступно: Главный метод авторов, Intent-OPSD, требует доступа к обучению модели. В чате и у готовых агентов это не повторить.

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

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

⚠️ Диалог со смоделированным пользователем: Реплики пользователя генерировала другая модель по шаблону. Живые люди путаются иначе.

🔍

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

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

Что оказалось. Просто растянуть задачу на несколько реплик — минус 36 п.п. точности. Нейтральные уточнения дают ещё около минус 4. Отвергнутое предложение — минус 8, принятое — минус 5,5. Это не усложнение задачи: когда изменённую задачу дают сразу, модели справляются так же. Даже в одном сообщении «предложение + отказ» хуже, чем чистая постановка (минус 7,5 п.п.).

Что удивило. Отказ вредит больше, чем согласие. В новых ошибках после отказа отвергнутое значение всплывало примерно в 60% случаев, после согласия — в 31%. Дальше хуже: четыре раунда «предложил — отверг» дали минус около 21 п.п., четыре нейтральных блока — минус около 8. Уточнения после уже принятого решения тоже снижали точность.

Что из этого следует для практики. Длинное обсуждение с отвергнутыми вариантами — плохая «рабочая память» для модели. Лучше время от времени переписывать задачу заново.

Метод авторов. Они дообучили модель так, чтобы «ученик» видел весь диалог, а замороженный «учитель» — чистую задачу, соответствующую решению пользователя. На четырёх моделях средняя точность выросла на 10,8 п.п. над базой и на 3,7 над обычным дообучением. Для читателя это справка, а не инструкция.

💡

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

💡 Адаптация для агента в Cursor / Claude Code: Сессия на сто сообщений, где вы отвергали разные архитектуры, — тот же риск. Добавьте в файл инструкций:

## Учёт отвергнутого
- Если пользователь отверг предложение (библиотеку, подход, правку), не возвращайся к нему и не подмешивай его в код.
- Перед крупной правкой после длинного обсуждения кратко выпиши: «Действует: …; Отменено: …». Жди подтверждения.
- Если не уверен, принято ли изменение, спроси.

Это моя экстраполяция, статья агентов с файлами инструкций не проверяла.

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

🔧 Техника: не возвращаться к отвергнутому без нужды → меньше шума. Если вы всё-таки отказались от идеи, не упоминайте её дальше. Не пишите «ты же помнишь, мы не берём вариант Б». Само упоминание подталкивает модель к Б.

🔗

Ресурсы

  • You Changed Your Mind, The Model Didn't: Demystifying Intent in Multi-Turn Dialogue — Junle Chen, Wei Chen, Zhengjun Huang, Zhoujin Tian, Yuxuan Liu, Kai Wang, Rui Chen, Xiaofang Zhou; HKUST и Tencent Hy.
  • Репозиторий: https://github.com/junle-chen/intent
  • Сайт: https://junle-chen.github.io/intent-site/
  • Опорная работа про деградацию в многоходовых задачах: Laban et al. (LiC).
  • Бенчмарки-источники: BFCL, HumanEval, LiveCodeBench, Spider, GSM8K.

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

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

Обнаружено: отказ от предложения в диалоге вредит ответу модели сильнее, чем согласие. Приём из этого вывода позволяет считать цену, код и SQL по актуальным условиям, а не по тому, что вы уже отменили. Перед ответом модель выписывает два списка: «действует» и «отменено», а вы проверяете их глазами. Модель перестаёт угадывать намерение из каши реплик и считает по чистому списку. В неудачных ответах после отказа в 60% случаев всплывало именно отвергнутое предложение. Фишка: для модели ваше «нет» — просто ещё один токен рядом с вариантом, который вы отвергли. Честно: сам приём «выпиши действующее» авторы не проверяли. Они дообучали свою модель (метод Intent-OPSD), а здесь перенесён только вывод.

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

Процесс из трёх ходов. Первый: попроси выписать, что действует сейчас. Второй: попроси выписать, что обсуждали, но сняли или заменили. Третий: проверь списки, скажи «ок» и только потом проси итог. Диалог для модели — это один длинный текст. Пометки «это отменено» в нём нет. Реплика «а если 2 мешка вместо 4?» лежит рядом с «оставляем 4» и весит почти столько же. Поэтому список «отменено» нужен как явная пометка, которой в контексте не хватает. Ты сам делаешь то, что авторы делали обучением: превращаешь грязный диалог в чистую задачу. Представь бухгалтера, которому дали черновик со всеми правками, но без зачёркиваний. Он честно учтёт и старую сумму, и новую. Два списка — это и есть зачёркивания.

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

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

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

Расчёты, SQL, код, техзадания → особенно когда в диалоге много раундов «а если...?» — «нет, оставляем как было», а потом вы просите итог. Чем длиннее диалог и чем больше отвергнутых вариантов, тем важнее зафиксировать состояние. НЕ подходит для креативных текстов без одного правильного ответа: там влияние отвергнутого варианта не изучали. Для коротких задач в два-три реплики список «отменено» и паузу «жду ок» можно убрать.

Мини-рецепт

1. Останови диалог: не проси итог, пока не собрал состояние. Именно здесь модель чаще всего тащит отвергнутое.
2. Попроси два списка: «действует сейчас» и «отменено или заменено». Для каждого отменённого пункта пусть укажет, что стоит вместо него.
3. Запрети считать: добавь «не считай, жди моего ок». Так ты успеешь поймать ошибку до расчёта.
4. Проверь глазами: поправь списки. Если модель сама сомневается, принято изменение или нет, пусть спросит, а не гадает.
5. Дай итог одним блоком: считать строго по списку «действует». Из «отменено» ничего не брать, даже в промежуточных шагах.
6. Диалог длинный? Открой новый чат и перенеси туда только список «действует сейчас». Это самый надёжный вариант.

Примеры

[ПЛОХО] Задача: продавец на маркетплейсе считает итоговую цену. Закупка 4 000 ₽. Обсуждали скидку 20%, потом решили оставить 10%. Ещё пара вопросов про логистику. : Ну всё, считай итоговую цену (скидка 20% из середины диалога может уехать в расчёт или смешаться с 10%)
[ХОРОШО] : Прежде чем считать, соберём актуальное задание. 1) Выпиши ТОЛЬКО вводные, которые действуют сейчас. 2) Отдельно выпиши то, что мы обсуждали, но отменили, и укажи, что действует вместо него. 3) Не считай, дождись моего «ок». После «ок»: Посчитай итоговую цену строго по списку «действует сейчас». Всё из списка «отменено» не используй ни в расчёте, ни в промежуточных шагах. В списке «отменено» будет «скидка 20% → заменена на 10%». Если модель ошиблась, вы увидите это до расчёта, а не в готовой цене.
Источник: You Changed Your Mind, The Model Didn't: Demystifying Intent in Multi-Turn Dialogue
ArXiv ID: 2610.06496 | Сгенерировано: 2026-10-06 07:10

Проблемы LLM

ПроблемаСутьКак обойти
Модель путает «упомянуто» и «действует». Отвергнутое предложение продолжает влиять на ответТы предлагаешь вариант: «а если 2 вместо 4?» Потом отказываешься: «нет, оставляем 4». В итоговом ответе всплывает отвергнутое значение. Модель считает по нему или смешивает оба варианта. Или тащит его в промежуточные шаги. Причина: в тексте нет пометки «это отменено». Слово «нет» — просто ещё один токен. Старая реплика лежит рядом с актуальной и работает как подсказка в сторону ошибки. После отказа результат хуже, чем после согласия. При согласии выглядит как «было — стало». При отказе остаются два конкурирующих варианта. Проблема касается расчётов, SQL, вызова инструментов, кодаНе оставляй снятое в контексте неявным. Перед финальным ответом попроси модель выписать два списка: «действует сейчас» и «отменено, с указанием что вместо него». Проверь списки сам. Потом дай финальную задачу по первому списку. Надёжнее всего — перенести только список «действует» в новый чат. При отказе сразу пиши явно: «оставляем 4, значение 2 не используем»

Методы

МетодСуть
Сбор актуального задания перед ответом — очищает диалог от снятогоПревращаешь «грязный» диалог в чистую задачу. Шаг 1. Один запрос: «Выпиши ТОЛЬКО то, что действует сейчас. Отдельно выпиши отменённое и заменённое. Для каждого пункта укажи, что действует вместо него. Не считай, жди моего "ок"». Шаг 2. Проверь списки глазами, поправь ошибки. Шаг 3. Второй запрос: «Реши строго по списку "действует". Из списка "отменено" ничего не используй, даже в промежуточных шагах». Лучше делать это в новом чате с одним списком. Почему работает: задача, поданная одним чистым сообщением, решается заметно лучше, чем та же задача в диалоге с правками. Ты сам делаешь то, чего модель не умеет: ведёшь журнал отмен. Ошибку в списке видно до расчёта. Когда да: много правок и отвергнутых вариантов, важный расчёт, код, SQL, вызов инструментов. Когда нет: короткая задача в один-два хода, творческий текст без «правильного» ответа. Оговорка: сам приём напрямую не проверяли. Это вывод из того, что чистая постановка работает лучше диалога
📖 Простыми словами

You Changed Your Mind, TheModelDidn't: Demystifying Intent in Multi-Turn Dialogue

arXiv: 2610.06496

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

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

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

Проблема бьёт по любым задачам: от подсчёта unit-экономики до генерации кода. Стоит вскользь спросить: «А если скидка 20%?», потом передумать на 10%, и в итоговом расчёте нейросеть с высокой вероятностью впаяет тебе убыточный ценник из первого варианта. Длинный диалог — это минное поле, где любая протестированная и забытая гипотеза превращается в мину замедленного действия.

Короче: перестань спорить с моделью внутри одного чата и надеяться на её понятливость. Если ты передумал или ветка рассуждений зашла в тупик — жми кнопку New Chat и собирай чистый финальный промпт. Не заставляй AI разгребать твой мыслительный черновик, иначе платить за отменённые идеи придётся своим временем и деньгами.

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

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

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