Создание бота
На этом этапе мы создадим бота, который будет реагировать на простые фразы клиента. На сообщения Привет
и Пока
бот будет отвечать Привет привет
и Пока пока
. Кроме того, предусмотрим действие бота в ответ на другие сообщения клиента.
Создание и настройка проекта
Начнем создание простого бота с того, что авторизуемся на платформе и создадим новый проект.
Проект — это сценарий бота, подключенный к нескольким каналам. Сценарий — это бизнес-логика, которую выполняет бот.
После авторизации вы попадете на главную страницу JAICP. Нажмите на кнопку + Создать проект.
Вам будет предложено четыре способа создания проекта. Выберите способ Использовать шаблон.
Для настройки проекта заполните ключевые поля:
- Название проекта — имя проекта;
- Язык NLU — язык, который будет понимать бот;
- Шаблон — по умолчанию проект для NLU. В шаблоне содержится сценарий простого бота, работа которого будет рассмотрена в этом туториале.
- Разместить во внешнем Git-репозитории — оставьте эту опцию неактивной, чтобы проект сохранился локально в JAICP.
Нажмите Создать проект.
Алгоритм создания
-
После создания проекта автоматически откроется его страница. Если вы находитесь на другой странице, вы можете открыть проект следующими способами:
- выбрав его из выпадающего списка на верхней панели;
- перейдя на главную страницу JAICP и выбрав его в секции Мои проекты.
- Нажмите Редактор → Код на панели управления.
Здесь находится сценарий бота из шаблона. Обратите внимание на директорию проекта, она содержит:
- Файл
chatbot.yaml
содержит дескриптор проекта и лежит в корневой папке проекта. - Папка
src
, в которой лежит файл с основным сценарием работы ботаmain.sc
. Также в этой папке могут лежать файлы с дополнительными сценариями, словари в формате.csv
и скрипты в формате.js
. - Папка
test
содержит тесты в формате.xml
для проверки сценария бота.
Для добавления папки или файла выберите директорию, затем нажмите правой кнопкой мыши в боксе справа от панели управления. Или воспользуйтесь иконками, которые расположены над областью с файлами.
В правой части экрана — область редактирования файла.
- В файле
chatbot.yaml
указаны параметры конфигурации проекта:
# Название проекта
name: echo-bot
# Точка входа
entryPoint:
- main.sc
# Параметры NLU:
botEngine: v2 # Версия диалогового движка
language: ru # Язык бота
nlp:
intentNoMatchThresholds:
phrases: 0.2
patterns: 0.2
- В папке
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
.
Структура сценария
Рассмотрим процесс выполнения этого сценария:
-
Запускается сценарий, бот посылает сообщение
Начнем
. Обработка сообщений клиента включает в себя стейты стартаstart
и конца диалогаNoMatch
.При запуске бота первым запросом по умолчанию посылается регулярное выражение
/start
. Для его обработки необходимо состояниеstart
. Если его не будет, то при запуске бот найдет состояние, реагирующее на любой текстовый ввод, либо выведет ошибку обработки запроса. -
Клиент вводит сообщение
Привет
илиПока
и получает соответствующий ответ от ботаПривет привет
илиПока пока
.Глобальный тег
intent!
позволяет осуществить переход диалога в данный стейт из любого другого стейта. Например, клиент ввёл сообщениеПока
, запрос попадет в стейтBye
, так как был активирован интент/пока
. -
Стоит помнить, что люди могут ошибаться, набирая команды, и присылать боту текст, отличающийся от всех учтенных вариантов. Для этого используется стейт
NoMatch
, который обрабатывает конец сценария в случае, когда сообщение клиента не подходит ни под один описанный стейт.При вводе клиентом сообщения, например
Как дела?
, активируется событиеnoMatch
, указанное под глобальным тегомevent!
в стейтеNoMatch
. Бот посылает сообщениеЯ не понял. Вы сказали: Как дела?
.
Теперь перейдем к тестированию бота и созданию канала.