Intent Recognition

intent recognition — определение, что пользователь хочет получить

Раздел
Промпты
Обновлено
11.08.26

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:

  1. Intent Classification. Главное: какая именно задача? Список intent'ов конечен (order_food, cancel_subscription, check_balance, small_talk).
  2. Slot Filling. Извлечь параметры: «во сколько», «куда», «сколько штук».
  3. Out-of-scope detection. Понять, что запрос вне доступных intent'ов («поговори со мной о смысле жизни» в банковском боте).
  4. 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. Выбор подхода определяется качеством на реальных обращениях, задержкой и стоимостью поддержки.