TL;DR
Intent Reasoning — подход, который заставляет LLM генерировать несколько пар "интерпретация → ответ" для неоднозначного запроса вместо молчаливого выбора одного варианта. Вместо "вот ответ" модель выдаёт: "Если вы имели в виду X — ответ A. Если Y — ответ B. Если Z — ответ C."
Обычно LLM встречают неоднозначный вопрос (например, "Покажи требуемый опыт для лучшей вакансии" при наличии полей Min_Years и Pref_Years) и неявно выбирают одну интерпретацию, выдавая единственный ответ. Пользователь не знает, что модель рассматривала другие варианты и выбрала за него. Если выбор не совпал с намерением — фрустрация. В критичных сценариях (код, SQL, действия) это может привести к необратимым ошибкам. Модель тратит токены на рассуждения по неверной интерпретации, одновременно расходуя ресурсы и углубляя ошибку.
Метод учит модель сначала рассуждать о намерении пользователя: выделить возможные интерпретации запроса, затем дать ответ для каждой в структурированном формате. Одна генерация вместо диалога с уточняющими вопросами. Формат легко парсится для агентных систем и позволяет пользователю быстро найти нужный вариант. Исследователи обучали модель через reinforcement learning: для неоднозначных запросов максимизировали recall (покрыть все валидные интерпретации), для однозначных — precision (не генерировать лишнее).
Схема подхода
ШАГ 1: Анализ запроса на неоднозначность
↓
ШАГ 2: Генерация структурированного вывода (один промпт)
Если неоднозначный:
1. [Интерпретация 1] → [Ответ 1]
2. [Интерпретация 2] → [Ответ 2]
3. [Интерпретация 3] → [Ответ 3]
Если однозначный:
1. [Переформулировка или повтор вопроса] → [Ответ]
Всё происходит в одной генерации. Каждая последующая интерпретация учитывает предыдущие (autoregressive), что обеспечивает разнообразие и согласованность интерпретаций с ответами.
Пример применения
Задача: Планируешь запуск нового продукта. Спрашиваешь у модели: "Когда мы сможем выйти на 100К пользователей?" — но не уточняешь, имеешь в виду активных пользователей, зарегистрированных или платящих.
Промпт:
Проанализируй вопрос на неоднозначность. Если есть несколько возможных
интерпретаций — перечисли их явно и дай ответ для каждой в формате:
1. [Интерпретация]
Ответ: [конкретный ответ]
Вопрос: Когда мы сможем выйти на 100К пользователей?
Контекст:
- Сейчас 5K зарегистрированных, из них 2K активных (заходят раз в неделю), 300 платящих
- Рост регистраций: 500 в месяц
- Конверсия в активных: 40%
- Конверсия в платящих: 15% от активных
- Цель компании: устойчивая монетизация
Результат: Модель выдаст структурированный список: интерпретация "100К зарегистрированных", "100К активных", "100К платящих" с отдельными расчётами и прогнозами для каждого варианта. Увидишь, что для 100К зарегистрированных нужно 16 месяцев при текущем темпе, для 100К активных — гораздо дольше с учётом конверсии, а для 100К платящих — нереально без изменения бизнес-модели. Каждая интерпретация чётко обозначена, ответы не смешиваются.
Почему это работает
LLM плохо определяют границы своего понимания. Встретив неоднозначность, модель не говорит "не уверена" — она молча выбирает наиболее вероятную по её весам интерпретацию и отвечает так, будто других не существует. Пользователь не знает о существовании альтернатив.
LLM хорошо перечисляют варианты, когда их об этом попросить явно. Autoregressive генерация (каждое следующее слово учитывает предыдущие) естественно создаёт последовательное перечисление: сгенерировав первую интерпретацию, модель "видит" её в контексте и генерирует вторую как отличную от первой. Это даёт разнообразие без манипуляций температурой или параллельных сэмплов.
Метод явно инструктирует модель рассуждать о намерении перед ответом — сдвигает фокус с "как ответить" на "что имел в виду пользователь". Структурированный формат вывода делает интерпретации видимыми и заставляет модель их артикулировать, а не держать "в голове". Каждая интерпретация получает свой ответ, что делает связь "интерпретация → ответ" прозрачной.
Рычаги управления:
- Число интерпретаций: исследователи ограничили 5 максимум. Можно снизить до 3 для простоты или увеличить, если задача сложная
- Формат интерпретаций: можно попросить короткие ("Min years" vs "Pref years") или развёрнутые ("Вопрос относится к минимально требуемому опыту")
- Условие включения: добавить "генерируй несколько вариантов только если действительно неоднозначно" vs "всегда рассматривай альтернативы"
- Стиль ответов: "только факт" vs "с объяснением логики"
Шаблон промпта
Проанализируй вопрос на возможную неоднозначность.
Если вопрос может иметь несколько разных интерпретаций — перечисли их
явно и дай ответ для каждой интерпретации.
Если вопрос однозначен — дай один ответ.
Формат вывода:
1. [Интерпретация 1]
Ответ: [конкретный ответ для этой интерпретации]
2. [Интерпретация 2]
Ответ: [конкретный ответ для этой интерпретации]
[и так далее, максимум 5 интерпретаций]
Контекст: {контекст}
Вопрос: {вопрос}
Что подставлять:
- {контекст} — информация, относящаяся к вопросу (документ, данные, схема базы, предыдущие сообщения)
- {вопрос} — сам запрос пользователя
Адаптация под задачу: Можно добавить ограничения на формат ответа (например, "SQL запрос", "число в рублях", "список действий"). Можно указать типы неоднозначности, которые ожидаешь ("референс может относиться к разным объектам", "может быть несколько подходящих временных периодов").
Ограничения
⚠️ Переоценка неоднозначности: Модель иногда видит неоднозначность там, где её нет, генерируя избыточные интерпретации для простых вопросов. Precision для однозначных вопросов ~40-70%, что означает — каждый третий-пятый "простой" вопрос получит несколько вариантов ответа.
⚠️ Качество интерпретаций не контролируется напрямую: Метод не включает явной проверки качества самих интерпретаций — только соответствие ответов эталонам. Интерпретация может быть сформулирована невнятно, но если ответ совпал с эталоном, reward высокий.
⚠️ Требует эталонных ответов для обучения: Полноценное применение подхода (с RL) требует датасет с несколькими валидными ответами на вопрос. Через промптинг можно использовать идею, но без гарантии покрытия всех интерпретаций.
⚠️ Не заменяет уточняющие вопросы в сложных случаях: Если интерпретаций больше 5 или они требуют знания намерений пользователя (например, "подходящий стиль текста"), перечисление всех вариантов становится громоздким — лучше спросить.
Как исследовали
Исследователи взяли две задачи: Abg-CoQA (conversational QA, ~6K примеров для обучения) и Ambrosia (text-to-SQL, ~3.4K примеров). Обе содержат вопросы с несколькими валидными ответами — естественный сигнал неоднозначности без дорогой аннотации интерпретаций.
Обучали Qwen 4B Instruct через reinforcement learning (DAPO — улучшенная версия GRPO). Ключевая идея: разные reward-функции для разных типов вопросов. Для неоднозначных максимизировали recall (Hungarian algorithm для оптимального matching предсказаний и эталонов), для однозначных — precision. Это учит модель когда генерировать несколько вариантов, а когда один.
Данные ребалансировали 3:1 в пользу неоднозначных примеров — иначе модель училась только отвечать однозначно (supervised fine-tuning дал 70% precision, но лишь 48% recall и 20% full coverage для неоднозначных).
Сравнивали с zero-shot промптингом (4B и 235B MoE модели, обычные и thinking варианты), SFT, многоэтапным методом (сначала интерпретации, потом SQL) и ACT (multi-turn clarification через RL).
Результаты удивили: IntentRL достиг 78% recall и 61% full coverage на Abg-CoQA (то есть в 61% случаев модель покрыла ВСЕ валидные интерпретации), обогнав даже модели в 50+ раз крупнее (235B Thinking: 69% recall, 50% full coverage). На Ambrosia — 75% recall, 57% full coverage.
Неожиданное: thinking-модели не превзошли обычные instruct-модели на этой задаче, иногда даже уступали. Длинные reasoning traces не помогли — модель тратила тысячи токенов на неверную интерпретацию вместо перечисления альтернатив. Крупные модели склонны подозревать неоднозначность чаще (высокий recall, низкий precision) — пытаются выдать несколько ответов, но неэффективно.
Практический инсайт: Одношаговая генерация всех интерпретаций эффективнее multi-turn диалога с уточнениями. IntentRL (83% similarity на Abg-CoQA) обогнал ACT (75%) при том, что ACT требовал несколько раундов взаимодействия с симуляцией пользователя.
Адаптации и экстраполяции
🔧 Техника: Гибридный формат → показать уверенность
Можно комбинировать перечисление интерпретаций с оценкой вероятности каждой:
Проанализируй вопрос на неоднозначность. Для каждой интерпретации укажи
насколько она вероятна (высокая/средняя/низкая) и дай ответ.
Формат:
1. [Интерпретация 1] — вероятность: [высокая/средняя/низкая]
Ответ: [...]
Контекст: {контекст}
Вопрос: {вопрос}
Это позволяет пользователю сразу видеть, какую интерпретацию модель считает наиболее вероятной, сохраняя альтернативы.
🔧 Техника: Запрос на пояснение → чем интерпретации отличаются
Добавить после каждой интерпретации короткое объяснение почему это отдельный вариант:
Для каждой интерпретации объясни в одном предложении, чем она
отличается от других.
1. [Интерпретация 1]
Отличие: [что делает эту интерпретацию уникальной]
Ответ: [...]
Полезно для обучения или когда пользователь хочет понять логику модели.
Ресурсы
Reasoning About Intent for Ambiguous Requests
Исследование с кодом: https://github.com/saparina/intentRL
Irina Saparina, Mirella Lapata — University of Edinburgh
Упоминаемые датасеты и методы: - Abg-CoQA (Guo et al., 2021) — conversational QA с неоднозначностью - Ambrosia (Saparina & Lapata, 2024) — text-to-SQL с multiple valid queries - ACT (Chen et al., 2025) — multi-turn clarification через preference optimization - DAPO (Yu et al., 2025) — RL алгоритм с decoupled clipping
