JAICP

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


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

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

  1. Паттерны.
  2. Примеры и группы примеров.
  3. Интенты.

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

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

Паттерн? Пример? Интент? Сработавшее правило
Да Да Да Паттерн
Да Да Нет Паттерн
Да Нет Да Паттерн
Да Нет Нет Паттерн
Нет Да Да Пример
Нет Да Нет Пример
Нет Нет Да Интент
Нет Нет Нет 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.