Правила активации
Для определения намерения клиента вы можете использовать различные правила активации стейтов: паттерны, примеры фраз, интенты CAILA.
При совместном использовании в одном сценарии нескольких типов правил активации они срабатывают в порядке убывания приоритета:
- Паттерны.
- Примеры и группы примеров.
- Интенты.
Порядок активации правил
Следующая таблица иллюстрирует порядок срабатывания правил активации в различных вариантах их совместного использования:
Паттерн? | Пример? | Интент? | Сработавшее правило |
---|---|---|---|
Да | Да | Да | Паттерн |
Да | Да | Нет | Паттерн |
Да | Нет | Да | Паттерн |
Да | Нет | Нет | Паттерн |
Нет | Да | Да | Пример |
Нет | Да | Нет | Пример |
Нет | Нет | Да | Интент |
Нет | Нет | Нет | noMatch |
Таким образом, если на запрос клиента сработал паттерн, то произойдет переход в стейт с паттерном, даже если пример или интент сработали бы с большим весом.
Обработка нераспознанных запросов
В проектах с несколькими типами правил активации не используйте паттерн *
для обработки нераспознанных запросов:
state: CatchAll
q!: *
a: Вы сказали: {{$request.query}}
В такой стейт будут попадать все запросы, не распознанные при помощи других паттернов. При этом примеры и интенты будут игнорироваться, поскольку приоритет у паттерна будет выше.
Для не предусмотренных сценарием запросов клиента используйте событие noMatch
:
state: CatchAll
event!: noMatch
a: Вы сказали: {{$request.query}}
Пример сценария
Предположим, что в CAILA заданы интенты /паттерн
, /пример
и /интент
, обученные на тренировочных фразах паттерн
, пример
и интент
соответственно. Рассмотрим следующий сценарий:
theme: /
state: Pattern
q!: * паттерн *
a: Сработал паттерн.
state: Example
e!: паттерн
a: Пример не сработает, потому что сработает паттерн выше.
state: Intent
intent!: /паттерн
a: Интент также не сработает, потому что сработает паттерн.
state: Example2
e!: пример
a: Сработал пример.
state: Intent2
intent!: /пример
a: Интент не сработает, потому что сработает пример.
state: Intent3
intent!: /интент
a: Сработал интент.
state: CatchAll
event!: noMatch
a: Вы сказали: {{$request.query}}
Запустим тестовый виджет и проверим, в какие стейты попадут следующие запросы:
Запрос | Стейт |
---|---|
паттерн |
/Pattern |
пример |
/Example2 |
интент |
/Intent3 |
Другие запросы | /CatchAll |
Продвинутые возможности
Если стандартный приоритет правил активации не подходит для вашего сценария, воспользуйтесь следующими возможностями, чтобы определить собственную логику обработки результатов классификации:
- Вы можете задать механизм выбора нужного правила при одновременном срабатывании правил разных типов на этапе классификации запроса при помощи обработчика
selectNLUResult
. - Если вам необходимо иметь доступ к результатам классификации из любого места сценария, воспользуйтесь
$context.nBest
.