Чат-бот для Asset Control

Oct 29 2020
В этой статье я собираю чат-бота для Asset Control как небольшой забавный проект. Почему? Потому что я какое-то время хотел реализовать чат-бота - хотя бы для того, чтобы понять, как это сделать, - и делать это в домене AC кажется естественным.

В этой статье я собираю чат-бота для Asset Control как небольшой забавный проект. Почему? Потому что я какое-то время хотел реализовать чат-бота - хотя бы для того, чтобы понять, как это сделать, - и делать это в домене AC кажется естественным. Я также интегрирую его со Slack, чтобы увидеть, как это может вписаться в мои уже существующие инструменты и рабочий процесс.

Чат-бот для чего?

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

В этом случае я хочу реализовать прототип чат-бота для интеграции со Slack, который позволяет мне общаться с Asset Control. Возможно, я захочу запросить информацию о статусе моего AC env или запросить данные.

В качестве руководства по реализации я использовал следующие вопросы, на которые бот должен уметь ответить:

  • Какая последняя цена за XYZ?
  • Что в этом месяце было максимальным для XYZ?
  • Сколько подозреваемых сегодня?
  • Актуальна ли репликация?

Итак, мы реализуем бота с нуля? Конечно, нет. Есть несколько решений, и я быстро остановился на Google Dialogflow. Посмотрим, как это работает.

Создание бота в Dialogflow

Чтобы создать нашего бота в Google Dialogflow, нам нужно понять несколько концепций:

  • Намерения
  • Сущности
  • Исполнение

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

Затем сущности являются строительными блоками, которые составляют наш разговор и представляют особый интерес, поэтому мы хотим уловить их как параметры. В нашем случае это будет тикерный символ AAPL, когда мы зададим вопрос «Какая последняя цена для AAPL?»

Наконец, концепция выполнения позволяет нам обращаться к службам, находящимся в задней части чат-бота, через веб-перехватчики. То есть мы будем связываться с Asset Control, чтобы запросить данную акцию и получить последнюю доступную цену.

Теперь создадим нашего бота.

Шаг 1. Настройте своего бота.

Направляйтесь к https://dialogflow.cloud.google.com/#/login и войдите в систему. Затем создайте агента AcChatBot:

Шаг 2. Создайте объект Stock

В меню слева нажмите Плюс рядом с Сущностями, назовите его Акции и введите [A-Z][A-Z0-9]{1,6}как регулярное выражение. Хотя это не совсем подходит для тикерных символов, этого достаточно для нашего примера и работает с проверками регулярных выражений, выполняемыми самим Dialogflow (например, не слишком широкими и т. Д.). Тогда сохраните это.

Шаг 3. Создайте последнее ценовое намерение

Время для нашего последнего ценового намерения. Опять же, в меню слева выберите Плюс рядом с Намерениями, вызовите его Last priceи нажмите ДОБАВИТЬ ОБУЧАЮЩИЕ ФРАЗЫ:

Войдите What is the last price for AAPL?. Затем выделите AAPLмышью. Появится всплывающее окно. Найдите Stock, затем выберите представленный вариант:

Если все сделано правильно, результат будет выглядеть так, чтобы гарантировать, что Dialogflow правильно захватывает сущность Stock:

ВАЖНЫЙ! Затем прокрутите вниз, откройте раздел Fulfillment, нажмите Enable Fulfillment, а затем переключитесь Enable webhook call for this intentтак:

Это позволяет нам вызывать нашу собственную бэкэнд-функцию и общаться с Asset Control.

Обязательно сохраните намерение, прежде чем двигаться дальше.

Шаг 4. Внедрите службу REST для получения данных управления активами

Опять же, есть много способов сделать это. Мы будем использовать Spring Boot, поскольку он выполняет за нас всю тяжелую работу, и мы остаемся на Java и, следовательно, можем сразу же использовать тот же Java API управления активами, который использует Adetta .

Если вы еще этого не знаете, Adetta - это наше программное обеспечение для автоматизации тестирования для Asset Control. Обязательно прочтите Введение в Адетту здесь .

Интересный момент - это класс AcBotControllerи его handleIntentметод, как показано ниже:

Вы можете видеть, что веб-перехватчик для выполнения Dialogflow обрабатывает запрос POST. Его вход и выход - это JSON. И мы используем GoogleCloudDialogflowV2Webhook*классы для обработки как запроса, так и ответа JSON за нас.

Фактическая обработка намерения передается AcBotIntentHandler, который мы получаем от вызова AcBotIntents.getHandlerFor(request). Посмотрим на этот класс:

Мы создаем сопоставление намерений с обработчиками (помните наше Last priceнамерение?) И реализуем метод для получения подходящего обработчика с учетом намерения, закодированного в объекте запроса. Мы также определяем обработчик по умолчанию на тот случай, если мы не смогли найти фактический обработчик:

Теперь, чтобы получить последнюю цену данной акции, давайте посмотрим на AcBotLastPriceIntentHandler:

Вы видите, как мы получаем параметр объекта Stock из объекта запроса, используя, request.getQueryResult().getParameters().getOrDefault("Stock", "")а затем вызываем, getLastPriceMessageForStockкак показано здесь:

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

Вот как мы находим последнюю цену:

Мы загружаем таймсерии ADO, получаем последнюю запись и, если она есть, создаем сообщение, которое будет читаться как The last price for AAPL (C0.EQY.100101) is from 2020-06-12 at $338.00. И снова мы остерегаемся случаев, когда не можем найти цену.

Используя Spring Boot, мы можем запустить это и запустить нашу службу REST на localhost: 8080 / ac-bot. Что дальше?

Что ж, мы явно немного жульничаем, поскольку нигде не развертываем эту службу, поэтому, чтобы сделать ее доступной извне, мы будем использовать ngrok, чтобы настроить для нас туннель:

Шаг 5. Настройте собственный веб-перехватчик выполнения

Затем мы должны сообщить Dialogflow, где находится наша служба REST, поэтому вернитесь туда и нажмите Fulfillment в меню слева:

Затем введите https://...адрес, предоставленный ngrok, и убедитесь, что вы добавили /ac-botв конце.

Хорошо, момент истины. В правом верхнем углу, где написано Try it now, мы можем ввести, What is the last price for AAPL?и если все работает нормально, мы должны получить следующий ответ:

Это потрясающе!

Шаг 6. Интегрируйте нашего чат-бота со Slack

Теперь мы не собираемся продолжать использовать консоль Dialogflow для игры с нашим ботом. Вместо этого мы интегрируем его со Slack. Итак, выберите Интеграции в меню слева, найдите Slack и запустите тестового бота:

Затем зайдите в Slack и начните общаться с ботом:

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

Заключительные слова

Я думал, что это было весело. И проще, чем я думал. Конечно, я пошел несколькими сокращениями:

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

Надеюсь, вам понравилась эта статья. Свяжитесь с нами, чтобы поделиться своими мыслями, задать вопросы и т. Д. Мы здесь, чтобы помочь.