Перейти к основному содержимому

Правила активации

подсказка
Для определения намерения клиента вы можете использовать в качестве правил активации стейтов паттерны и интенты.

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

Порядок активации правил

Следующая таблица иллюстрирует порядок срабатывания правил активации в различных вариантах их совместного использования:

Паттерн?Интент?Сработавшее правило
ДаДаПаттерн
ДаНетПаттерн
НетДаИнтент
НетНетnoMatch
предупреждение
Таким образом, если на запрос клиента сработал паттерн, то произойдет переход в стейт с паттерном, даже если интент сработал бы с большим весом.

Обработка нераспознанных запросов

предупреждение
В проектах с несколькими типами правил активации не используйте паттерн * для обработки нераспознанных запросов:
state: CatchAll
q!: *
a: Вы сказали: {{$request.query}}

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

подсказка
Для не предусмотренных сценарием запросов клиента используйте событие noMatch:
state: CatchAll
event!: noMatch
a: Вы сказали: {{$request.query}}

Пример сценария

Предположим, что в NLU заданы интенты /паттерн и /интент, обученные на тренировочных фразах паттерн и интент соответственно. Рассмотрим следующий сценарий:

theme: /

state: Pattern
q!: * паттерн *
a: Сработал паттерн.

state: Intent
intent!: /паттерн
a: Интент не сработает, потому что сработает паттерн.

state: Intent2
intent!: /интент
a: Сработал интент.

state: CatchAll
event!: noMatch
a: Вы сказали: {{$request.query}}

Запустим тестовый виджет и проверим, в какие стейты попадут следующие запросы:

ЗапросСтейт
паттерн/Pattern
интент/Intent2
Другие запросы/CatchAll

Продвинутые возможности

Если стандартный приоритет правил активации не подходит для вашего сценария, определите собственную логику для обработки результатов классификации:

  • Чтобы изменить механизм выбора правил активации, используйте обработчик selectNLUResult.
  • Чтобы иметь доступ к результатам классификации из любого места сценария, воспользуйтесь $context.nBest.