Интент пользователя определяется с помощью паттернов и классификатора Brain
При использовании в одном сценарии паттернов, интентов и групп примеров, обработка правил активаций происходит с приоритетом по мере убывания:
- Паттерны.
- Группа примеров классификатора STS.
- Интенты.
Механизм активации правил
- Если запрос пользователя сработал в стейте с паттерном, группой примеров
e!
и интентом, то приоритет будет у паттерна. Сработает стейт с паттерном. - Если запрос пользователя сработал в стейте с группой примеров
e!
и интентом, то приоритет будет у группы примеров. Cработает стейт с группой примеров. - Если запрос пользователя сработал только в стейте с интентом, отработает только он.
- В остальных случаях запрос пользователя будет обработан стейтом
CatchAll
.
Пример сценария
Рассмотрим сценарий:
theme: /
state: Pattern
q!: * паттерн *
a: Сработал паттерн
state: Example
e!: паттерн
a: Этот пример не срабатывает, потому что отрабатывает паттерн
state: Second example
e!: пример
a: Сработал пример
state:
intent!: /паттерн
a: Этот пример не срабатывает, потому что отрабатывает паттерн
state:
intent!: /пример
a: Этот пример не срабатывает, потому что отрабатывает группа примеров
state: Intent
intent!: /интент
a: Сработал интент
state: CatchAll
event: noMatch
a: Вы сказали: {{ $request.query }}
При этом тренировочные фразы для интентов:
/паттерн
— паттерн;/пример
— пример;/интент
— интент.
Запускаем тестовый виджет и проверям сценарий:
- При запросе
Паттерн
отрабатывает стейтPattern
. - При запросе
Пример
отрабатывает стейтSecond example
. - При запросе
Интент
отрабатывает стейтIntent
. - Все непредусмотренные сценарием запросы обрабатывает стейт
CatchAll
.
При использовании в одном сценарии паттернов, интентов и групп примеров, вы можете самостоятельно определить приоритет обработки правил активаций.
Обработка нераспознанных запросов
В проектах с несколькими типами правил активации не используйте паттерн * для обработки нераспознанных запросов::
state: CatchAll
q!: *
a: Не понял
В такой стейт будут попадать все запросы, не распознанные при помощи других паттернов. При этом примеры и интенты будут игнорироваться, поскольку приоритет у паттерна будет выше
Для непредусмотренных сценарием запросов пользователя используйте событие noMatch
:
state: CatchAll
event: noMatch
a: Вы сказали: {{ $request.query }}