Настройка справочника примеров

При использовании классификатора в сценарии используются теги:

  • глобальные: eg! и e!;
  • локальные: eg и e.

Использование единичного примера

Использование тегов e и e! предполагает использование единичного примера: один тег — одна реплика. Например, в сценарии:

theme: /Bank
    state: Credit
        e!: Дайте кредит.
        a: Чтобы взять кредит, вам нужно просто...

    state: CatchAll
        q!: *
        a: Извините, я вас не понимаю.

Под тегом e! мы прописываем фразу, с которой будут сравниваться запросы пользователей. Если запросы по смыслу похожи на реплику-пример, то они будут опознаны смартапом как относящиеся к тому же классу, и поведение для них будет одинаковое.

Например, фразы "получить кредит", "как оформить кредит", "взять кредит", "дайте кредит" будут попадать в стейт Credit. А фраза "хочу оформить кредитную карту" будет определена к стейту CatchAll.


Использование группы примеров

В случае, когда примеров много, использовать теги e и e! нецелесообразно. В таких случая стоит применять теги eg и eg! и задавать примеры в отдельном файле-справочнике. Такой справочник можно задать как с помощью графического интерфейса платформы, так и вручную. В данной статье рассмотрим заполнение справочника вручную.

Работу с группой примеров можно условно разделить на этапы:


Создание справочника примеров

В папке /src/dictionaries создайте файл examples.json. Файл справочника создается в .json-форате и включает в себя массив объектов, каждый из которых описывает один класс примеров.

Пропишите в справочнике параметры, в каждом объекте могут быть определены следующие теги:

  • id: опциональное поле. Задает id класса для использования в сценариях в тегах eg и eg!. Если пример не задан, то id по умолчанию будет равен пути класса, прописанному через точку.
  • path: путь к стейту, в котором вызывается классификатор для обработки конкретного класса.
  • description: опциональное поле. Свободное текстовое описание класса.
  • disabled: задается булево значение true или false. Отключение класса примеров в классификаторе.
  • phrases: массив строк. Здесь записываются все примеры для класса.

Пример класса:

{
    "classes": [
        {
            "id": "common", // id класса
            "path": "/PlayGames/Games", // путь к стейту, в котором вызывается классификатор
            "description": "", // описание класса
            "disabled": false, // отключение класса
            "phrases": [
                // массив примеров
                "давай поиграем в какие-нибудь игры"
            ]
        },
        {
            "id": "",
            "path": "/PlayGames/Games/CanYouPlay",
            "description": "",
            "disabled": false,
            "phrases": ["ты умеешь во что-нибудь играть?", "ты знаешь какие-нибудь игры?", "ты знаешь как играть?"]
        }
    ]
}

Теперь, когда справочник примеров составлен, пропишите путь к нему в конфигурационном файле chatbot.yaml:

exampleGroups:
    - src/dictionaries/examples.json

Обращение к справочнику примеров в сценарии

Обращение к группе примеров, если id класса прописан:

state: Order
    eg!: common                                          // прописываем id класса
     a: Давай сыграем!

Обращение к группе примеров, если id класса не указан:

state: CanYouPlay
            q!: * [во что] * (умеешь/можешь/знаешь как) играть *
            q!: * {игры  * (знаешь/умеешь/можешь)} *
            eg!: PlayGames.Games.CanYouPlay            // id класса не указан, прописываем путь к стейту через символ `.`
            q: * как* [игры] * || fromState = "/Education/What can you do", onlyThisState = true
            script:
                $temp.canYouPlay = true;
            go!: ../../Games