Intent Recognition
intent recognition — определение, что пользователь хочет получить
Intent Recognition (Intent Detection) — задача NLP: понять, какую цель преследует пользователь в своём сообщении, даже если он сформулировал её криво или неполно. «Хочу пиццу с грибами в восемь вечера» → intent: order_food, slots: {item: пицца, topping: грибы, time: 20:00}. Лежит в основе чат-ботов, голосовых ассистентов, поисковых систем, customer support.
Коротко
Коротко. Intent Recognition (Intent Detection) — задача NLP: по сообщению пользователя определить, какую задачу он хочет решить, и извлечь параметры. «Заказать билет в Берлин на пятницу» → intent:
book_flight, slots:{destination: Берлин, date: пятница}. Используется в чат-ботах, голосовых ассистентах, customer support, поисковых системах.
Что это такое
Любой умный диалоговый интерфейс начинается с одного вопроса: что человек хочет?
Раньше это было трудно. Системы класса Siri (2011) использовали жёстко прописанные правила: «если в сообщении есть „погода", вызови weather_api». Любая нестандартная формулировка ломала систему.
С 2015-х появилось машинное обучение для intent classification: разметить тысячи примеров «фраза → intent», обучить нейросеть-классификатор, выкатить в prod. С 2018 — BERT-эры NLU (Natural Language Understanding) — точность дошла до production-уровня.
Что входит в Intent Recognition:
- Intent Classification. Главное: какая именно задача? Список intent'ов конечен (
order_food,cancel_subscription,check_balance,small_talk). - Slot Filling. Извлечь параметры: «во сколько», «куда», «сколько штук».
- Out-of-scope detection. Понять, что запрос вне доступных intent'ов («поговори со мной о смысле жизни» в банковском боте).
- Multi-intent. Один запрос — несколько intent: «отмени бронь и переведи деньги на карту».
- Чат-боты в support. Tinkoff, Яндекс.Алиса, банки, телекомы.
- Голосовые ассистенты. Siri, Алиса, Google Assistant, Salute.
- Поисковые системы. Google пытается понять «что вы имели в виду», а не просто match keywords.
- In-app actions. «Оплати счёт за интернет» в банковском приложении → автоматически открыть нужную форму.
- Аналитика обращений. Категоризация thousands of customer messages для понимания топов проблем.
Как это работает
Обучаемый классификатор
1. Разметить датасет: ~5000 примеров «сообщение → intent».
2. Векторизация: TF-IDF / embeddings (Word2Vec, BERT).
3. Обучить классификатор: логрег / SVM / маленькая нейросеть.
4. Slot filling — отдельная модель (CRF / BiLSTM-CRF / BERT-CRF).
5. Production: новая фраза → embedding → predict intent.
На закрытом наборе знакомых intent'ов метрика обычно выглядит лучше, чем на реальных запросах вне каталога. Поэтому out-of-scope примеры и неоднозначные формулировки проверяют отдельно.
Современный (LLM-based)
1. Список intent'ов и 3-5 примеров на каждый.
2. System prompt: «Ты классификатор. intent ∈ {A, B, C}. Верни JSON».
3. Запрос → LLM → JSON {intent, slots, confidence}.
4. Никакой разметки большого датасета. Никакого fine-tuning.
LLM часто лучше справляется с новыми формулировками без отдельного обучения под каждую фразу. При этом каждый API-вызов стоит денег, а скорость разработки зависит от требований, интеграций и качества тестового набора.
Структура запроса в LLM-варианте
SYSTEM = """
Ты классификатор намерений. Возможные intent:
- order_food: заказ еды
- check_order: проверить статус заказа
- cancel_order: отменить заказ
- support: жалоба или вопрос к человеку
Верни JSON: {intent: ..., confidence: 0-1, slots: {...}}.
"""
EXAMPLES = """
USER: «Хочу пиццу маргарита на 8 вечера»
ASSISTANT: {"intent": "order_food", "confidence": 0.97, "slots": {"item": "пицца маргарита", "time": "20:00"}}
USER: «Где мой заказ #12345?»
ASSISTANT: {"intent": "check_order", "confidence": 0.99, "slots": {"order_id": "12345"}}
"""
LLM по этим 4 примерам обобщает и обрабатывает любые формулировки.
Пример на практике
Пиццерия делает чат-бота в Telegram. Раньше для распознавания намерений часто собирали отдельный классификатор и набор правил. С LLM первый прототип можно построить вокруг понятной схемы намерений и примеров:
import anthropic
client = anthropic.Anthropic()
INTENTS = ["order_pizza", "check_order", "menu_info", "delivery_zones",
"complaint", "small_talk"]
def classify_intent(user_message):
response = client.messages.create(
model="<supported-model-id>",
max_tokens=200,
system=f"""Ты классификатор для пиццерии.
Возможные intent: {INTENTS}.
Верни ТОЛЬКО JSON: {{"intent": "...", "slots": {{...}}}}.
Если не понял — intent="small_talk".""",
messages=[{"role": "user", "content": user_message}]
)
return json.loads(response.content[0].text)
# Использование:
result = classify_intent("Хочу пеперони, большую, на адрес Ленина 5")
# {"intent": "order_pizza", "slots": {"item": "пеперони", "size": "большая",
# "address": "Ленина 5"}}
Тарифы, квоты и доступность меняются; актуальные условия лучше сверять на официальной странице сервиса.
В ComfyUI intent recognition не используется напрямую (там нет диалоговых сценариев), но похожая идея — text-to-workflow ноды, где LLM понимает что хочет пользователь и собирает нужный pipeline из узлов.
С чем часто путают
- Intent Recognition и NLU — Intent Recognition — часть NLU (Natural Language Understanding). NLU broader: ещё entity recognition, sentiment, coreference, etc.
- Intent и Entity — Intent: что хочет (order_food). Entity: параметры (пицца, маргарита, 20:00). Часто детектятся вместе.
- Intent и Topic — Intent: действие. Topic: тема. «Расскажи про Луну» — intent: small_talk/info_request, topic: astronomy.
- Intent Classification и Sentiment Analysis — Intent: цель. Sentiment: эмоция. Похожие задачи, разные предметы.
- Intent Recognition и Semantic Search — Intent: понять задачу. Semantic Search: найти релевантный документ. Часто работают вместе.
Частые ошибки и заблуждения
- «LLM делают intent recognition идеально». Нет. Модель может выбрать правдоподобный класс даже для запроса вне сценария, поэтому out-of-scope проверяется отдельными примерами и порогами.
- «Достаточно одной LLM-модели для всего». Иногда да, иногда выгоднее гибрид с быстрым классификатором и fallback. Выбор зависит от нагрузки, качества и задержки.
- «Примеры либо всегда нужны, либо никогда». Few-shot может уточнить границы похожих классов, но польза зависит от модели и качества примеров. Это проверяют на одинаковом наборе запросов.
- «Slot filling — это просто». В реальной речи человек говорит косвенно: «как обычно, на сегодня вечером, на тот же адрес». Значения зависят от истории, профиля и часового пояса, поэтому их извлечение проверяется отдельно.
- «Чем больше intent'ов, тем лучше». Слишком похожие классы начинают пересекаться. Число категорий выбирают по рабочим действиям и confusion matrix, а не по универсальному пределу.
Связанные термины
- NLP — общая область, intent recognition — её задача.
- AI Search / Semantic Search — комплементарная задача.
- Function Calling — как LLM-агенты вызывают tools после распознавания intent.
- Context Engineering — intent recognition — один из элементов pipeline.
- AI Agent — главный «потребитель» intent recognition.
Частые вопросы
Какая модель лучшая для intent recognition? Для self-hosted выбирают классификатор или open-weight LLM, которая помещается в инфраструктуру и проходит тест на нужных языках.
Сколько примеров нужно в few-shot? 3-5 на каждый intent. Меньше — модель не поймёт паттерн. Больше — раздувается prompt, дороже за запрос.
Как обрабатывать многоязычные запросы? Мультиязычные LLM способны работать с разными языками, но качество классов и slot filling различается. Для каждого рабочего языка нужен свой набор примеров и ошибок.
Что делать с out-of-scope?
В intent-список добавь явный out_of_scope или general_chat. Модель будет туда классифицировать всё, что не подходит к основным intent.
Можно ли локально без API? Да, через совместимую локальную модель и среду вроде Ollama или LM Studio. Качество зависит от модели и языка, а вместо платы за API появляются расходы на оборудование и поддержку. Зато данные можно оставить внутри своей инфраструктуры.
Главное
Intent Recognition — задача определить, какую цель преследует пользователь в своём сообщении. Она применяется в чат-ботах, голосовых интерфейсах, поддержке и поиске. Один путь — разметить датасет и обучить классификатор; другой — использовать LLM с примерами или схемой. Главные подзадачи: intent classification, slot filling, out-of-scope detection и multi-intent. Выбор подхода определяется качеством на реальных обращениях, задержкой и стоимостью поддержки.