Я полагаю, что вы прочитали мою предыдущую статью Создание разговорного чат-бота с Rasa Stack и Python - Rasa NLU до того, как попали сюда. Если нет, то сначала прочтите это, прежде чем продолжить.

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

Rasa Core - Управление диалогом

Если вы помните (из предыдущей статьи), мы говорили о историях, которые представляют собой не что иное, как образец взаимодействия между пользователем и чат-ботом. Вводимые пользователем данные выражаются в виде намерений с соответствующими объектами, а ответы чат-бота выражаются в виде действий. Для диалогового обучения Rasa имеет 4 основных компонента:

1. Домен (domain.yml)

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

  • слоты: слоты - это в основном память бота. Они действуют как хранилище "ключ-значение", которое может использоваться для хранения информации, предоставленной пользователем (например, его родного города), а также информации. собраны о внешнем мире (например, в результате запроса к базе данных).
  • действия: не что иное, как реакция ботов на ввод пользователя. В Rasa Core есть 3 типа действий: действия по умолчанию, стандартные действия и настраиваемые действия.
  • шаблоны: шаблоны - это сообщения, которые бот отправляет пользователю.

Вот пример домена для нашего бота:

Если вы видите, мы определили слот, который поможет боту немного вспомнить о разговоре. Тот же самый слот используется в строках № 42 и 43, чтобы дать пользователю определенные ответы. Упоминаются все сущности и намерения из предыдущей части. Мы также определили некоторые действия и шаблоны, чтобы бот отвечал на сообщения пользователей. В действиях - есть действия по умолчанию (action_restart), полные действия (utter_greet, utter_reply….) И пользовательские действия (action_get_news). В дополнение к этому есть еще одно действие «utter_default», которое является не чем иным, как запасным вариантом на случай, если бот не может понять сообщение пользователя. Мы обсудим настраиваемые действия и откат в ближайшее время.

2. Истории (stories.md)

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

Запишем в файл. Я назвал этот файл stories.md и сохранил его в каталоге данных, где мы ранее хранили nlu.md.

$ cd wall-e
$ cd data
$ touch stories.md

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

3. Политики (policy.yml)

Основные политики rasa решают, какие действия предпринимать на каждом этапе разговора. Есть разные политики на выбор, и можно включить несколько политик в один агент rasa core, но на каждом шагу будет использоваться политика, которая предсказывает следующее действие с наивысшей степенью уверенности. Мы настроили базовую политику (policy.yml) для нашего бота, как показано ниже, которая также имеет FallbackPolicy. Резервная политика проявляется, когда "nlu_threshold" и "core_threshold" соответствуют уровням, определенным в политике, что означает, что бот не может понять сообщение пользователя и отвечает "utter_default".

4. Настраиваемые действия (actions.py)

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

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

Чтобы указать наш сервер действий, мы используем endpoints.yml и передаем его скриптам с помощью --endpoints endpoints.yml

Хотя мы можем создать сервер действий на node.js, .NET, Java или любом другом языке и определить наши действия там, но Rasa предоставила небольшой пакет SDK для python, чтобы упростить нам задачу.

Единственное, что нужно установить нашему серверу действий, это rasa_core_sdk:

$ pip install rasa_core_sdk

Давайте определим actions.py и добавим наше настраиваемое действие action_get_news.

К вашему сведению, мы использовали сторонние API (NY Times API) для отображения новостей в определенных категориях. Портал для разработчиков NY Times очень нагляден и хорошо определен для того, чтобы воспринимать сообщения. Следуйте инструкциям, чтобы получить ключ API, который потребуется для выполнения вызовов Rest Call общедоступным API. (замените ключом API)

Теперь запустите команду ниже, чтобы запустить действие. Держите его работающим, так как когда мы запустим ядро, для его запуска потребуются действия (запуск в отдельном терминале)

$ conda activate botenv
$ cd wall-e
$ python3 -m rasa_core_sdk.endpoint --actions actions

Теперь мы создали все необходимые файлы / компоненты, необходимые для управления диалогами. Пришло время обучить диалог и запустить Rasa Core, чтобы запустить бота для разговора.

Сначала мы обучим диалог (не забудьте активировать виртуальную среду (botenv), которую мы создали в предыдущей части)

$ conda activate botenv
$ cd wall-e
$ python3 -m rasa_core.train -d domain.yml -s data/stories.md -o models/dialogue -c policy.yml

затем запустите ядро

$ python3 -m rasa_core.run -d models/dialogue -u models/current/nlu --endpoints endpoints.yml

При использовании python мы можем сделать и то, и другое в одном файле python. Мы создали файл Python dialog_model.py, и можно просто запустить этот файл для обучения и запуска диалога.

$ conda activate botenv
$ cd wall-e
$ python3 dialogue_model.py

Когда файл python будет запущен, вы увидите сообщение: «Ваш бот готов к разговору! Введите свое сообщение или отправьте «стоп». Фактический разговор с ботом выглядит так, как показано ниже. Обязательно проверьте журналы (nlu_model.log и dialog_model.log), чтобы получить больше информации о том, как бот классифицирует намерения и извлекает сущности, а затем выполняет вызов настраиваемых действий, которые в конечном итоге вызывают сторонние API.

Наконец, бот готов к чату :) и теперь ему нужен приятный интерфейс для взаимодействия с ним, который мы рассмотрим в следующей, заключительной части этой серии Разверните своего чат-бота в Slack.

Я настоятельно рекомендую пройти каждый раздел шаг за шагом, проверить предыдущую часть о Rasa NLU, прежде чем двигаться дальше, и прочитать документацию Rasa, чтобы лучше понять ее. Если вам нужен код, это репозиторий git.

Поделитесь своими мыслями, отзывами, комментариями и пояснениями. Это поможет мне импровизировать.

Если вам понравился этот пост, вы можете помочь мне поделиться им, порекомендовав его ниже ❤

Следуйте за мной в Linkedin и Twitter