This site is no longer updated.Go to new Conversational Cloud docs

Зависимости


Разрабатывать сложные проекты со множеством тем, справочников и скриптовых расширений может быть неудобно и неэффективно, если хранить весь код проекта в одном сценарии.

Вместо этого JAICP позволяет разбивать код сценария на изолированные составные части и подключать их в основной сценарий как зависимости. Такой подход имеет ряд преимуществ:

  • Благодаря модульной архитектуре проект легче разрабатывать и поддерживать.
  • Одну зависимость можно использовать во множестве разных проектов.

В качестве зависимостей также можно подключить системные модули — наборы готовых именованных паттернов, функций и т. д. Их можно подключить в любой проект без дополнительного объявления.

Подключение

Зависимости указываются в разделе dependencies конфигурационного файла chatbot.yaml. В каждом из элементов списка зависимостей должны быть указаны следующие поля:

Поле Описание Допустимые значения
name Имя зависимости, по которому она будет подключаться в сценарий. Произвольная строка.
type Тип зависимости: внешний репозиторий или локальный модуль. git, module.
url Адрес внешнего репозитория. Строка, начинающаяся с https://, git:// или file://.
version Название ветки, где содержится код зависимости. <имя_ветки> или heads/<имя_ветки>.

Поля url и version применимы только к зависимостям с типом git.

Локальные модули

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

Структура проекта

Предположим, что имеется существующий проект, состоящий из двух файлов:

  • main.sc — основной сценарий.
  • offtopic.sc — «болталка» бота: ответы на часто задаваемые вопросы не по теме.

Пример фрагмента offtopic.sc:

patterns:
    $you = (~ты/~вы)

theme: /

    state: WhatCanYouDo
        q!: * {~что * [$you] * (~уметь/научил*/способ*)} *
        q!: * ([~что] $you/что-то) [еще] * (уме*/мож*/научил*/способ*) [делать] *
        q!: * как* * $you * [поставлен*/установлен*] (сервис*/программ*) *
        a: Я умею отвечать на вопросы.

Структура директории проекта имеет следующий вид:

├── chatbot.yaml
├── src
│   ├── main.sc
│   └── offtopic.sc
└── test
    └── test.xml

Если «болталку» планируется расширять новой функциональностью, например специализированной темой о вымышленной биографии бота или своими функциями для обработки данных, целесообразно вынести ее в отдельный модуль, независимый от основного сценария.

В таком случае необходимо создать в корне вложенные директории под основной сценарий, например main, и под создаваемую зависимость. Все файлы, относящиеся к зависимости, нужно перенести в эту директорию, добившись следующего расположения файлов:

├── main
│   ├── chatbot.yaml
│   ├── src
│   │   └── main.sc
│   └── test
│       └── test.xml
└── offtopic
    └── src
        └── offtopic.sc

В зависимостях наличие конфигурационного файла chatbot.yaml и XML-тестов не требуется.

Подключение зависимости

Проделайте следующие шаги, чтобы подключить зависимость.

  1. Перейдите в меню редактирования проекта. На вкладке Размещение смените значение поля Путь на название новой корневой директории проекта — main.

Если поле Путь не отображается на вкладке, обратитесь к своему аккаунт-менеджеру.

  1. Укажите в chatbot.yaml раздел dependencies. В типе зависимости укажите module, а в имени — название соответствующей директории:
dependencies:
  - name: offtopic
    type: module
  1. Добавьте в сценарный файл main.sc название подключаемого файла и имя зависимости при помощи тега require.

После этого из основного сценария станет доступно содержимое подключенных файлов: стейт WhatCanYouDo и именованный паттерн $you.

require: offtopic.sc
    module = offtopic

theme: /

    state: You
        q!: * $you *
        a: Я понял, что вы ко мне обратились, но не понял, зачем.

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

Внешние зависимости

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

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

Структура проекта

Рассмотрим ранее приведенный пример файла offtopic.sc. В случае внешней зависимости его нужно расположить в директории со стандартной структурой:

└── src
    └── offtopic.sc

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

Репозиторий может быть размещен на любом внешнем хостинге, например Bitbucket, GitLab или GitHub.

Подключение зависимости

Подключение внешней зависимости отличается от локального модуля необходимостью указать адрес репозитория и нужную ветку:

dependencies:
  - name: offtopic
    type: git
    url: https://github.com/example/offtopic
    version: master

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

Вы можете просмотреть код подключенных к проекту внешних зависимостей в редакторе сценариев.