# 5. Распознавание намерений

Распознавание намерений (intent recognition) — ключевой компонент многих интерактивных систем: чат-ботов, голосовых ассистентов, сервисов поддержки, а также внутренних инструментов для операторов. Его задача — преобразовать неструктурированный пользовательский ввод в компактное представление цели запроса, пригодное для дальнейшей обработки бизнес-логикой.

## Роль в общей архитектуре

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

- В диалоговых системах компонент intent recognition является первым шагом после нормализации пользовательского ввода и тесно связан с управлением диалогом.
- В микросервисных архитектурах он может предоставлять API для других сервисов, которым нужно понимать высокоуровневые категории запросов (например, маршрутизация обращений клиентов).
- В голосовых фронтах intent recognition часто комбинируется с распознаванием речи, образуя связку «голос → текст → намерение».

Выделение распознавания намерений в самостоятельный компонент позволяет переиспользовать его в разных продуктах и эволюционировать независимо от остальной логики.

## Концептуальная модель обработки

Процесс распознавания намерений можно описать в виде последовательности этапов.

1. **Нормализация входа**. Входящий текст очищается от технических артефактов, приводится к унифицированному формату, при необходимости учитывается язык, орфография и особенности канала (смартфон, голосовой ввод).
2. **Построение внутреннего представления**. Текст преобразуется в форму, удобную для дальнейшей обработки моделью: векторное представление, последовательность токенов и т.п. На архитектурном уровне этот этап может быть реализован как часть отдельного сервиса или совместно с классификатором.
3. **Классификация намерений**. Модель сопоставляет вход внутреннему набору возможных намерений и выдаёт распределение вероятностей или оценок уверенности.
4. **Извлечение сущностей и слотов**. Параллельно или последовательно с классификацией могут извлекаться конкретные параметры запроса: суммы, даты, идентификаторы, наименования объектов.
5. **Формирование результата**. На выходе компонент предоставляет структуру с идентификатором намерения, оценкой уверенности, списком сущностей и, при необходимости, вспомогательной информацией.

Такое представление позволяет чётко отделить технические детали реализации от контракта с потребляющими сервисами.

## Архитектурные варианты размещения компонента

В зависимости от требований к задержке, масштабируемости и степени переиспользования можно выделить несколько типичных вариантов.

- **Отдельный сервис распознавания намерений**. Предоставляет сетевой API, может масштабироваться независимо, иметь собственные версии моделей и конфигурации. Удобен, когда одним и тем же набором намерений пользуются несколько фронтов или продуктов.
- **Встроенная библиотека**. Модель и логика распознавания поставляются как библиотека, встраиваемая в фронтовые или бэкенд-сервисы. Такой подход снижает организационные накладные расходы, но усложняет обновление моделей и мониторинг.
- **Часть конвейера LLM**. В системах, основанных на больших языковых моделях, распознавание намерений может быть реализовано как часть промпта или отдельный шаг пайплайна, который сопоставляет результат генерации с фиксированным набором действий. В этом случае архитектурно важно обеспечить детерминированные контракты между этапами.

Выбор варианта зависит от зрелости продукта, требований к изолированности ML-компонентов и организационной структуры команд.

## Требования к качеству и задержкам

Так как распознавание намерений находится в начале цепочки обработки, оно критично влияет на пользовательский опыт.

- **Задержка**. В интерактивных сценариях допустимы десятки миллисекунд до сотен миллисекунд на полный цикл распознавания. Это накладывает ограничения на сложность моделей и необходимость кэширования типичных запросов.
- **Точность и устойчивость к шуму**. Компонент должен корректно обрабатывать опечатки, незавершённые фразы, смешение языков. Важна возможность настраивать пороги уверенности и fallback-стратегии.
- **Интерпретируемость**. Для отладки и совместной работы с бизнесом полезно иметь возможность объяснить, почему то или иное намерение было выбрано, какие фрагменты текста оказались значимыми.

Часто вводятся дополнительные требования к стабильности поведения: например, изменения модели не должны радикально нарушать уже отлаженные сценарии без явного решения продуктовой команды.

## Взаимодействие с правилами и fallback-логикой

Даже при наличии сильного ML-компонента распознавания намерений важную роль играют правила и резервные сценарии.

- **Фолбэк по низкой уверенности**. Если модель не уверена в результате, запрос может быть перенаправлен на оператора, задан уточняющий вопрос или использовано общее справочное намерение.
- **Приоритетные правила**. Для критичных сценариев (блокировка карты, сообщения об инцидентах) могут действовать жёсткие сигнатуры, которые срабатывают вне зависимости от вывода модели.
- **Комбинированные стратегии**. В одних доменах сначала применяются правила, затем — ML, в других — наоборот. Это должно быть явно отражено в архитектуре компонента и в его конфигурации.

Наличие таких механизмов повышает устойчивость системы к ошибкам модели и позволяет постепенно вводить всё более сложные ML-решения, не теряя контроля над поведением продукта.