3,583 papers
arXiv:2603.09701 80 10 мар. 2026 г. FREE

Interaction Smells: почему LLM «забывает» ваши требования в длинных диалогах — и что с этим делать

КЛЮЧЕВАЯ СУТЬ
Через 6-8 сообщений модель перестаёт соблюдать правила из начала диалога — это случается в 38% длинных разговоров, и у этого сбоя даже есть имя: Must-Do Omission. Метод InCE позволяет держать все ваши требования активными до конца сессии — без перезапуска диалога с нуля. Причина не в том, что модель «тупеет» — ранние сообщения буквально теряют вес на фоне свежих: InCE возвращает их на поверхность — явно перечисляет все ограничения прямо в текущем запросе, затем проверяет ими следующий ответ до генерации. Работает в обычном чате, без дообучения — просто добавьте шаблон раз в 5-7 сообщений.
Адаптировать под запрос

TL;DR

В длинных диалогах с LLM есть 9 типов характерных сбоев — Interaction Smells («запахи взаимодействия»). Исследование систематизировало их, проанализировав тысячи реальных разговоров. Суть: с каждым новым сообщением модель всё хуже соблюдает требования из ранних сообщений — не потому что "тупеет", а потому что ранний контекст буквально теряет вес на фоне свежего.

Самый частый сбой — Must-Do Omission (38% случаев): модель «забывает» обязательные правила, которые вы установили раньше. Написали в начале "всегда давай примеры", "используй только профессиональный тон", "не предлагай вариант X" — через 6-8 сообщений модель это уже не делает. Ошибку замечаешь только по итогу, когда надо переделывать.

InCE (Invariant-aware Constraint Evolution) — принцип, который это решает: явно извлекай все ограничения из диалога и проверяй их до генерации ответа. Два шага: сначала модель формулирует список всех "правил игры", потом сверяет каждый ответ с этим списком. Это работает вручную в обычном чате.


🔬

Схема метода

КОМПОНЕНТ 1 — Извлечение инвариантов (IEM)
  → Модель перечисляет ВСЕ активные ограничения из истории диалога
  → Обязательные требования + запреты + принятые решения
  → Формат: явный нумерованный список

КОМПОНЕНТ 2 — Аудит перед ответом (PSD)
  → Модель проверяет: нарушает ли планируемый ответ хоть одно ограничение?
  → Если нарушает — сообщает об этом ДО генерации
  → Только если всё чисто — даёт ответ

Оба компонента работают в ОДНОМ промпте.
Вставляй как чекпоинт раз в 5-7 сообщений или при добавлении нового требования.

📌

Таксономия Interaction Smells

Полезно знать в лицо что именно ломается. Вот 9 типов:

Категория 1 — Качество вашего запроса - Ambiguous Instruction — запрос можно понять по-разному, модель угадывает - Incomplete Instruction — не хватает ключевых деталей, модель додумывает сама

Категория 2 — Модель нарушает ваши правила (самое болезненное) - Must-Do Omission ⚠️ 38% — лидер по частоте — забывает обязательные требования из ранних сообщений - Must-Not Violation — делает то, что вы явно запретили

Категория 3 — Модель ломает то, что уже работало - Signature Mismatch — меняет структуру/формат без предупреждения - Cross-Turn Inconsistency — противоречит себе между сообщениями - Partial Functionality Breakdown — новый ответ ломает то, что было согласовано раньше - Code Rollback — возвращает уже исправленные ошибки - Repetitive Response — повторяет одно и то же вместо продвижения вперёд


🚀

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

Задача: Вы пишете вместе с Claude контент-стратегию для Telegram-канала. Сессия уже идёт 10+ сообщений. В начале договорились: "только про B2B", "без кейсов зарубежных компаний", "каждый пункт с метрикой". Через несколько сообщений модель начинает приводить примеры Netflix и добавлять разделы без цифр.

Промпт:

Прежде чем продолжать, выполни два шага:

**ШАГ 1 — Инварианты диалога:**
Перечисли все активные ограничения из нашей беседы:
- Обязательные требования: что должно присутствовать в каждом ответе
- Запреты: что нельзя делать или использовать
- Принятые решения: что мы уже договорились использовать
- Форматы и стили: установленная структура

Если ограничений нет — напиши «Ограничений не зафиксировано».

**ШАГ 2 — Аудит:**
Проверь: нарушает ли твой планируемый следующий ответ 
хоть одно из перечисленных ограничений?
Если да — сообщи об этом и предложи как соблюсти ограничение 
и при этом выполнить задачу.

После этих двух шагов выполни: напиши раздел про форматы постов.

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


🧠

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

Слабость LLM: контекстное затухание. В длинных диалогах модель уделяет больше внимания свежим сообщениям. Ранние требования буквально "тонут" — не исчезают из памяти совсем, но влияют на ответ всё меньше. Именно поэтому Must-Do Omission — лидер с 38%: правило не забыто, но "вытеснено" из активного влияния новым контентом.

Сильная сторона LLM: работа с явным. Модель отлично следует требованиям, которые написаны прямо сейчас в текущем сообщении. Если ограничение видимо и явно — она его выполнит. Проблема возникает именно тогда, когда требование было "давно и где-то там".

Как InCE использует это: Метод переносит "затухшие" ограничения из ранних сообщений в текущее — делает их снова явными и видимыми прямо в момент генерации. Это не магия архитектуры: просто то, что было в давнем сообщении, теперь находится прямо перед "взглядом" модели.

Рычаги управления: - Частота аудита — каждый запрос или только при смене темы: для критичных сессий ставьте чаще - Глубина перечисления — "кратко" или "разбей по категориям" в зависимости от сложности задачи - Реакция на нарушение — добавьте "если нарушение неизбежно — спроси меня прежде чем отвечать" для особо важных требований - Момент применения — вставляй шаблон в начале сессии как "вакцинацию" или в середине как "диагностику"


📋

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

Прежде чем отвечать, выполни два шага:

**ШАГ 1 — Инварианты диалога:**
Перечисли все активные ограничения из нашей беседы:
- Обязательные требования: [что должно присутствовать в каждом ответе]
- Запреты: [что нельзя делать / использовать]
- Принятые решения: [что мы уже договорились использовать]
- Форматы и стили: [установленная структура и тон]

Если ограничений нет — напиши «Ограничений не зафиксировано».

**ШАГ 2 — Аудит:**
Проверь: нарушает ли твой планируемый ответ хоть одно 
из перечисленных ограничений?
Если да — сообщи об этом и предложи решение до ответа.

**Задача:** {твой следующий запрос}

Что подставлять: В {твой следующий запрос} — любой шаг в рамках текущей сессии. Вставляй этот шаблон когда сессия перевалила за 5–7 сообщений, когда добавляешь новое требование, или когда кажется что "что-то пошло не так".


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

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

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

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


⚠️

Ограничения

⚠️ Вес в токенах: В длинных сессиях список инвариантов растёт. Каждый раз перечислять все ограничения — дополнительный объём. На очень длинных сессиях это ощутимо. Решение: делать аудит не каждый раз, а раз в 5–7 сообщений.

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

⚠️ Не лечит первую категорию смеллов: Ambiguous и Incomplete Instruction — это проблема качества ваших запросов, а не памяти модели. InCE с ними не помогает. Единственное решение — уточнять запросы самому.

⚠️ Для коротких сессий — избыточно: Если разговор 2–3 сообщения, шаблон только добавляет сложности без пользы. Работает там, где действительно накопились правила.


🔍

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

Команда взяла два огромных датасета реальных диалогов — WildChat (1 млн разговоров с ChatGPT/GPT-4) и LMSYS-Chat-1M (1 млн диалогов с 25 моделями) — и отфильтровала только те, где речь шла о написании кода. Получили ~66 000 диалогов. Затем случайно выбрали 378 многоходовых и отдали команде из 4 PhD и 4 аспирантов для ручного разбора методом "открытой сортировки карточек": каждый диалог смотришь и сам придумываешь категории для сбоев, без готовых рамок.

Что любопытно в цифрах: Must-Do Omission вырвался в лидеры с огромным отрывом — 38%. При этом пользовательские ошибки (Ambiguous + Incomplete Instructions вместе) набрали лишь ~8%. Это важный разворот ожиданий: мы привыкли думать, что плохой результат = плохой промпт. Но исследование говорит: главная проблема не в том, как вы формулируете, а в том, что модель перестаёт соблюдать уже установленные правила.

Затем проверили шесть актуальных моделей — GPT-4o, DeepSeek-Chat, Gemini 2.5, Qwen2.5-32B, Qwen2.5-72B, Qwen3-235B — и убедились: Must-Do Omission и Partial Functionality Breakdown воспроизводятся на всех без исключения. Более мощная модель не гарантирует защиту от этих сбоев. Наконец, InCE-фреймворк снизил частоту критичных смеллов примерно на 13,5% и увеличил успешное выполнение задач на 6,67% — скромные, но воспроизводимые цифры.


💡

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

📌

🔧 «Кристалл ограничений» — вакцинация до начала сессии

Вместо того чтобы извлекать инварианты в середине, зафиксируй их в самом первом сообщении:

Мы начинаем работу над {проект}.
Установи следующие инварианты на всю нашу сессию:

ОБЯЗАТЕЛЬНО в каждом ответе:
- {требование 1}
- {требование 2}

ЗАПРЕЩЕНО:
- {ограничение 1}
- {ограничение 2}

ПРИНЯТЫЕ РЕШЕНИЯ:
- {решение 1}

Подтверди что понял все ограничения. 
Повторяй их в начале каждого своего ответа 
пока я не скажу «инварианты убрать».

Это профилактика Must-Do Omission с нуля, а не лечение в середине. Визуальное повторение в начале каждого ответа — простой способ держать инварианты "в фокусе" всю сессию.


📌

🔧 «Диагностика запаха» — аудит уже идущего диалога

Если кажется что "что-то пошло не так", а не понятно что именно:

Проверь наш текущий диалог по трём критериям:

1. Must-Do Omission — есть ли требования из ранних сообщений, 
   которые ты перестал выполнять?

2. Cross-Turn Inconsistency — противоречишь ли себе 
   между разными ответами?

3. Partial Breakdown — разрушил ли ты что-то из того, 
   что было согласовано раньше?

По каждому пункту: либо «чисто», 
либо «обнаружено: [что именно и в каком сообщении]»

🔗

Ресурсы

An Empirical Study of Interaction Smells in Multi-Turn Human-LLM Collaborative Code Generation

Binquan Zhang, Li Zhang, Lin Shi, Song Wang, Yuwei Qian, Linhui Zhao, Fang Liu, An Fu, Yida Ye

Датасеты: WildChat, LMSYS-Chat-1M, WildBench v2


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

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

Через 6-8 сообщений модель перестаёт соблюдать правила из начала диалога — это случается в 38% длинных разговоров, и у этого сбоя даже есть имя: Must-Do Omission. Метод InCE позволяет держать все ваши требования активными до конца сессии — без перезапуска диалога с нуля. Причина не в том, что модель «тупеет» — ранние сообщения буквально теряют вес на фоне свежих: InCE возвращает их на поверхность — явно перечисляет все ограничения прямо в текущем запросе, затем проверяет ими следующий ответ до генерации. Работает в обычном чате, без дообучения — просто добавьте шаблон раз в 5-7 сообщений.

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

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

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

В длинном диалоге LLM уделяет больше внимания свежим сообщениям. Требование из первого сообщения не исчезает из памяти — но влияет на ответ всё слабее. Исследователи проанализировали тысячи реальных разговоров, нашли 9 типов сбоев на этой почве и назвали их Interaction Smells. Must-Do Omission — лидер с долей 38%. Сила LLM — в работе с явным: если ограничение написано прямо сейчас, рядом с запросом — модель его выполнит. InCE это и использует: переносит «затухшие» правила из старых сообщений прямо в текущее. Это не архитектурный трюк — просто грамотное управление вниманием.

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

Длинные рабочие сессии с накопленными договорённостями — написание кода, контент-стратегии, деловые документы. Особенно когда в диалоге больше 7 сообщений и уже есть несколько зафиксированных требований по тону, формату или ограничениям по содержанию. НЕ подходит для: коротких сессий на 2-3 сообщения — шаблон там только мешает. Также не поможет если ваши собственные запросы размытые — InCE лечит память модели, а не качество ваших инструкций.

Мини-рецепт

1. Вставьте чекпоинт: когда сессия перевалила за 5-7 сообщений — или сразу при добавлении нового требования.
2. Шаг 1 в промпте — список инвариантов: Перечисли все активные ограничения из нашего диалога: что обязательно присутствовать в каждом ответе, что запрещено, какие решения уже приняты, какой формат согласован. Если ничего нет — напиши «ограничений нет».
3. Шаг 2 — аудит: Проверь: нарушает ли твой планируемый ответ хоть одно из перечисленных ограничений? Если да — скажи об этом до ответа и предложи как решить конфликт.
4. Задача — в конце того же промпта: только после двух шагов пишите следующий запрос. Это один промпт, не три отдельных сообщения.
5. Подстраховка для очень длинных сессий: ведите свой короткий список ключевых требований и добавляйте его явно в первый шаг — модель тоже может не вытащить требование из самого начала огромного диалога.

Примеры

[ПЛОХО] : Продолжай. Следующий раздел — про форматы постов (после 10 сообщений, где в начале договорились «только про бизнес-клиентов», «без зарубежных примеров», «каждый пункт с цифрой»)
[ХОРОШО] : Прежде чем отвечать — два шага. Шаг 1: перечисли все активные ограничения из нашей беседы — что обязательно, что запрещено, какие решения уже приняты, какой формат согласован. Шаг 2: проверь, нарушает ли планируемый ответ хоть одно ограничение — если да, скажи об этом до ответа. Задача: напиши раздел про форматы постов.
Источник: An Empirical Study of Interaction Smells in Multi-Turn Human-LLM Collaborative Code Generation
ArXiv ID: 2603.09701 | Сгенерировано: 2026-03-11 05:24

Проблемы LLM

ПроблемаСутьКак обойти
В длинном диалоге модель перестаёт соблюдать требования из начала разговораТы написал правила в первых сообщениях: "всегда с примерами", "не используй X", "только профессиональный тон". Через 6–8 сообщений модель их уже не соблюдает. Не потому что удалила из памяти — просто свежий контекст "перевешивает" старый. Замечаешь это только по итогу. Охватывает любые задачи: код, тексты, анализ, стратегииРаз в 5–7 сообщений вставляй двухшаговый запрос: сначала "перечисли все активные ограничения из нашего диалога", потом "проверь, нарушает ли твой планируемый ответ хоть одно из них". Старые требования оказываются явно написаны в текущем сообщении — и снова влияют на ответ

Методы

МетодСуть
Аудит ограничений — контроль правил в длинных диалогахВставляй два шага перед любым запросом в длинной сессии. Шаг 1: Перечисли все активные ограничения из нашей беседы: обязательные требования, запреты, принятые решения, форматы. Шаг 2: Проверь: нарушает ли твой планируемый ответ хоть одно из перечисленных ограничений? Если да — сообщи до ответа. Потом ставь саму задачу. Почему работает: Модель хорошо следует тому, что написано прямо сейчас. Шаг 1 переносит "затонувшие" правила из истории диалога в текущее сообщение. Шаг 2 заставляет сверить ответ с этим списком до генерации. Когда применять: сессия перевалила за 5–7 сообщений; добавляешь новое требование; кажется что "что-то пошло не так". Когда не нужен: диалог из 2–3 сообщений — только лишний шум

Тезисы

ТезисКомментарий
Явное в текущем сообщении соблюдается. Старое в истории — нетМодель хорошо следует ограничениям, которые написаны прямо сейчас. Требование из давнего сообщения физически присутствует в контексте, но влияет на ответ слабо — свежий контекст его перевешивает. Это не баг памяти, а перекос веса между старым и новым. Применяй: не рассчитывай что правило "запомнится навсегда". Хочешь чтоб работало — пиши в текущем сообщении, а не только один раз в начале
📖 Простыми словами

An Empirical Study of Interaction Smells in Multi-Turn Human-LLMCollaborative Code Generation

arXiv: 2603.09701

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

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

В кодинге и контенте это выливается в конкретную херню, где лидер хит-парада — Must-Do Omission (игнорирование обязательных условий). Исследование показало, что в 38% случаев модель просто забивает на ограничения, которые вы утвердили в начале. Ты просил код без библиотек? Она их впихнет. Просил B2B-кейсы? Она притащит Netflix. Есть еще Instruction Conflict и Redundant Turns, когда модель начинает ходить кругами или противоречить сама себе, просто потому что «запуталась в показаниях» из-за раздутого чата.

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

Главный вывод: не раздувай чаты до бесконечности. Если чувствуешь, что модель начала лажать и игнорировать базу — руби диалог и начинай новый. Лучше один раз заново скопировать вводные данные, чем бесконечно исправлять косяки, которые множатся как снежный ком. 9 типов сбоев — это не случайность, а сигнал, что пора чистить контекст, пока «запах взаимодействия» не превратился в откровенную вонь.

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

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

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