JAICP

JAICP DSL


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

Файл сценария — древовидная структура. Степень вложенности управляется отступами, подобно языкам python и yaml.


В JAICP DSL используются языковые конструкции:

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

Локальные и глобальные теги

В DSL мы выделяем глобальные и локальные теги. Глобальные теги содержат ! в названии, например:

  • intent — локальный тег.
  • intent! — глобальный тег.

Локальный тег активен только в контексте диалога, переход в стейт возможен из ближайшего родительского или из дочерних стейтов. Глобальный тег позволяет осуществить переход диалога в данный стейт из любого другого стейта.


Список тегов


Тег Описание
intent После тега записывается путь к интенту. Интент — ключевая единица NLU-сервиса, объединяющая в себе набор фраз, намерение пользователя и другую метаинформацию.
q После тега записывается паттерн, описывающий ключевые слова и выражения пользователя.
e Предполагает использование единичного примера, эталона для сравнения с запросом пользователя. Один тег — одна реплика.
eg В случае, когда примеров для сравнения много, использовать тег e нецелесообразно. В таких случаях используется eg и задается необходимое количество примеров в отдельном файле справочнике.
event Реакция на событие, происходящее в канале, аккаунте или проекте.
init Тег позволяет задать скрипт, который будет выполнен при загрузке сценария один раз. Скрипт может содержать код, устанавливающий какие-либо обработчики, создающий временные переменные, выполняющий другую инициализацию.
patterns После тега объявляются именованные паттерны в .sc-файле, они доступны для использования во всех файлах проекта.
require Тег служит для загрузки зависимых файлов и, по сути, является альтернативой указанию всех зависимых файлов в chatbot.yaml.
state Cостояние чат-бота. Стейты могут иметь вложенную структуру.
theme Точка входа чат-бота, в это состояние переходит система при запуске бота.
a Передает текст ответа чат-бота.
buttons Кнопки. Осуществляют переходы между стейтам сценария.
go Тег выполняет отложенный переход, при этом реакции указанного стейта не выполняются, но обработка следующей фразы происходит в контексте указанного стейта.
go! Тег обеспечивает немедленный переход, при этом выполняются все реакции указанного стейта.
if/else/elseif Теги для записи простых условий, вывода различных ответов в зависимости от условий, перехода в другие состояния по условиям.
inlineButtons Inline-кнопки. При клике на inline-кнопку могут передаваться данные или URL (callback_data или URL, соответственно). Также inline-кнопки отображаются не под диалогом, а внутри него в виде реплик чат-бота.
newSession Тег определяет запуск новой сессии.
random В результате выполнения будет выполнена только одна из вложенных реакций.
script Скрипт реакции позволяет выполнять функции, логику обработки запросов, вызовы внешних систем, работу с памятью и другое.
audio Тег позволяет использовать аудиозаписи в ответах бота.
image Вывод изображения.