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

На этот раз я улучшил нашего основного административного бота, используя настраиваемые действия, слот и сложные истории домена. Теперь наш чат-бот rasa-startup-admin-chat может автоматически отправлять электронные письма административному персоналу, используя данные, предоставленные пользователем в самом чате. Интересно, не так ли?

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

Пользовательские действия:

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

Мы используем настраиваемые действия для заполнения слотов и отправки электронных писем административному персоналу.

Чтобы запустить настраиваемое действие, вам необходимо запустить сервер действий, указав конечную точку действия в файле endpoints.yml.

action_endpoint:
  url: 'http://localhost:5055/webhook'

И передать его скрипту сервера действий с помощью — endpoints endpoints.yml.

Слои:

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

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

Каждое отдельное пользовательское действие и используемые слоты должны быть определены в нашем файле домена, то есть domain.yml. Слоты могут быть разных типов, например: text — для значения текстового типа, boolean — для значений true или false, unfeatured — чтобы не влиять на ход диалога и так далее. Подробнее о типах слотов можно прочитать в документах rasa.

Почтовый сервер в пользовательском действии:

Python имеет встроенный модуль для отправки электронной почты через SMTP в своей стандартной библиотеке. Простой протокол передачи почты (SMTP) — это протокол, который обрабатывает отправку электронной почты и маршрутизацию электронной почты между почтовыми серверами. Модуль smtplib определяет объект сеанса клиента SMTP, который можно использовать для отправки почты на любой Интернет-компьютер с помощью демона прослушивателя SMTP или ESMTP. Модули smtplib полезны для связи с почтовыми серверами для отправки почты. Мы используем SMTP от Google, так как они бесплатны и отлично работают для ретрансляции электронной почты. Поскольку мы будем использовать SMTP-сервер Google для доставки наших электронных писем, нам потребуется собрать такую ​​информацию, как сервер, порт, аутентификация. Вы можете увидеть, как используется почтовый сервер, в нашем экшен-файле здесь.

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

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

Интерактивное обучение:

Интерактивное обучение — это способ предоставления обратной связи вашему боту во время разговора с ним. Это также способ создавать обучающие истории во время разговора с вашим ботом. Все разговоры, которые вы ведете со своим ботом во время сеанса интерактивного обучения, впоследствии можно экспортировать в виде обучающих примеров NLU и диалогов и прикрепить к исходному образцу обучающих данных. Интерактивное обучение — одна из мощных функций RASA. Мы также можем выполнить небольшую отладку и посмотреть, правильно ли классифицируются наши намерения и объекты с помощью интерактивного обучения. Разработчики и тестовые пользователи могут использовать их для создания новых обучающих историй, задавая новые и неожиданные вопросы боту. Если информация не попадает ни на один из заданных интентов, мы также можем создать новый интент и назначить его туда.

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

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

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

«Имя» в нашем случае определяется как сущность, и если мы начнем с чего-то вроде «Меня зовут…», пользователь может указать любое имя, и слот будет установлен. Но так будет не всегда, потому что пользователь также может ответить только именем и ничем другим. Поэтому для этого конкретного сценария я определил все в файле намерений. Аналогично в случае, когда бот запрашивает «причину ухода». Я обязательно постараюсь разобраться с этим вопросом RASA в ближайшие дни. А пока наслаждайтесь созданием чат-бота! ;)

Примечание: полный исходный код доступен по адресу https://github.com/Gritfeat-Solutions/rasa-startup-admin-chatbot