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

Создание бота

На этом этапе мы создадим бота, который будет реагировать на простые фразы клиента. На сообщения Привет и Пока бот будет отвечать Привет привет и Пока пока. Кроме того, предусмотрим действие бота в ответ на другие сообщения клиента.

Создание и настройка проекта

Начнем создание простого бота с того, что авторизуемся на платформе и создадим новый проект.

Проект — это сценарий бота, подключенный к нескольким каналам. Сценарий — это бизнес-логика, которую выполняет бот.

После авторизации вы попадете на главную страницу JAICP. Нажмите на кнопку + Создать проект.

Вам будет предложено четыре способа создания проекта. Выберите способ Использовать шаблон.

Для настройки проекта заполните ключевые поля:

  • Название проекта — имя проекта;
  • Язык NLU — язык, который будет понимать бот;
  • Шаблон — по умолчанию проект для NLU. В шаблоне содержится сценарий простого бота, работа которого будет рассмотрена в этом туториале.
  • Разместить во внешнем Git-репозитории — оставьте эту опцию неактивной, чтобы проект сохранился локально в JAICP.

Нажмите Создать проект.

Алгоритм создания

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

    • выбрав его из выпадающего списка на верхней панели;
    • перейдя на главную страницу JAICP и выбрав его в секции Мои проекты.

Управление проектами

  1. Нажмите РедакторКод на панели управления.
Редактор

Здесь находится сценарий бота из шаблона. Обратите внимание на директорию проекта, она содержит:

  • Файл chatbot.yaml содержит дескриптор проекта и лежит в корневой папке проекта.
  • Папка src, в которой лежит файл с основным сценарием работы бота main.sc. Также в этой папке могут лежать файлы с дополнительными сценариями, словари в формате .csv и скрипты в формате .js.
  • Папка test содержит тесты в формате .xml для проверки сценария бота.

Для добавления папки или файла выберите директорию, затем нажмите правой кнопкой мыши в боксе справа от панели управления. Или воспользуйтесь иконками, которые расположены над областью с файлами.

Добавление папки/файла

В правой части экрана — область редактирования файла.

  1. В файле chatbot.yaml указаны параметры конфигурации проекта:
# Название проекта
name: echo-bot
# Точка входа
entryPoint:
- main.sc

# Параметры NLU:
botEngine: v2 # Версия диалогового движка
language: ru # Язык бота

nlp:
intentNoMatchThresholds:
phrases: 0.2
patterns: 0.2
подсказка
  1. В папке src находится файл main.sc, в котором хранится сценарий работы бота:
require: slotfilling/slotFilling.sc
module = sys.zb-common
theme: /

state: Start
q!: $regex</start>
a: Начнём.

state: Hello
intent!: /привет
a: Привет привет

state: Bye
intent!: /пока
a: Пока пока

state: NoMatch
event!: noMatch
a: Я не понял. Вы сказали: {{$request.query}}

В начале сценария под тегом require подключаем дополнительный модуль sys.zb-common и slotFilling. В рассматриваемом примере они не используются, но являются частью шаблонного сценария.

подсказка

Сценарий описывает переходы бота из одного состояния state в другое в зависимости от полученного ответа клиента.

Далее рассмотрим ключевые единицы NLU-ядра — интенты, а затем перейдем к алгоритму обработки запросов клиента.

Интенты

Интент — ключевая единица NLU-ядра, объединяющая в себе набор фраз, намерение клиента и другую метаинформацию.

Чтобы ознакомиться с настройками интентов, перейдите на вкладку NLUИнтенты на панели управления.

Интенты

Простые интенты задаются через набор фраз. Алгоритм создания интента прост: задаем имя интента, а затем создаем набор тренировочных фраз, на которые бот будет реагировать. Также можно задать автоматические ответы бота с помощью слот-филлинга.

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

Чтобы бот лучше понимал клиентов, добавьте в поле Тренировочные фразы больше фраз. Чем больше фраз там будет, тем больше вероятность того, что бот правильно выявит намерение клиента. При этом важно использовать различные формулировки. Например, для интента /привет добавьте фразы Приветики или Здравствуйте. Теперь бот будет реагировать на эти фразы, попадая в стейт Hello.

Структура сценария

Рассмотрим процесс выполнения этого сценария:

  1. Запускается сценарий, бот посылает сообщение Начнем. Обработка сообщений клиента включает в себя стейты старта start и конца диалога NoMatch.

    При запуске бота первым запросом по умолчанию посылается регулярное выражение /start. Для его обработки необходимо состояние start. Если его не будет, то при запуске бот найдет состояние, реагирующее на любой текстовый ввод, либо выведет ошибку обработки запроса.

  2. Клиент вводит сообщение Привет или Пока и получает соответствующий ответ от бота Привет привет или Пока пока.

    Глобальный тег intent! позволяет осуществить переход диалога в данный стейт из любого другого стейта. Например, клиент ввёл сообщение Пока, запрос попадет в стейт Bye, так как был активирован интент /пока.

  3. Стоит помнить, что люди могут ошибаться, набирая команды, и присылать боту текст, отличающийся от всех учтенных вариантов. Для этого используется стейт NoMatch, который обрабатывает конец сценария в случае, когда сообщение клиента не подходит ни под один описанный стейт.

    При вводе клиентом сообщения, например Как дела?, активируется событие noMatch, указанное под глобальным тегом event! в стейте NoMatch. Бот посылает сообщение Я не понял. Вы сказали: Как дела?.

подсказка
Подробнее ознакомьтесь с тегами в разделе DSL.

Теперь перейдем к тестированию бота и созданию канала.