Як створити чатбот за допомогою Azure AI Bot Service
Чатботи є всюди: у месенджерах, застосунках, на сайтах. Вони спрощують життя користувачів, проте інколи потребують чималих зусиль від розробників саме під час їх створення та налаштування. На щастя, вже винайшли чимало інструментів, які допомагають швидко писати якісні чатботи. Одним із найбільш вдалих сервісів, на мій погляд, є Azure AI Bot Service від Microsoft.
Вітаю! Мене звати Данило Міхов, я .NET Developer в NIX і сьогодні розповім вам, як створювати чатботи за допомогою Azure AI Bot Service.
Чому Azure AI Bot Service
Azure AI Bot Service є дуже потужним інструментом з багатьма унікальними фічами. Наприклад, Microsoft дозволяє формувати власні JSON-файли для взаємодії з API різних месенджерів, завдяки чому у вас більше можливостей під час створення ботів. Але у конкурентів теж є цікаві особливості. Тому дійсно серйозний плюс використання Azure AI Bot Service полягає насамперед в активній підтримці продукту з боку Microsoft. Команда розробників цього сервісу уважно прислухається до відгуків та швидко усуває знайдені проблеми.
Варто згадати й інші важливі функціональні переваги:
- Підтримка опенсорсних SDK. В Azure AI Bot Service можна використовувати open-source засоби для розроблення, тестів та деплою чатботів.
-
Наявність Cognitive Services. Ці сервіси використовують машинне навчання для вирішення повторюваних завдань. Це гарантує більш природний рівень взаємодії чатбота з юзером.
-
Доповнення функціональності. Ви можете розвивати бот та доповнювати новими функціями. Наприклад, можна впроваджувати додаткові канали та на кожному з них тестувати вашу програму.
-
Мультиплатформенність. Це дозволяє інтегрувати бота з різноманітними каналами без змін у вихідному коді.
-
Доступність best practices. На GitHub зібрано безліч прикладів коду, що спрощує процес створення та запуску власного сервісу.
Окрім цього, можна використовувати Cosmos DB для збереження діалогів та інтегрувати LUIS для навчання чатбота. Останній сервіс застосовує методи ML для більш ефективного спілкування з користувачами, проте є платним рішенням. Тому це підходить не для кожного проєкту.
Структура чатбота в Azure AI Bot Services
Принцип роботи бота на Azure детально описаний на наступній ілюстрації. У правій частині відображається список каналів для інтеграції сервісу. Цей список регулярно оновлюється, у ньому з’являються нові платформи. У нижній частині розміщені згадані Cognitive Services, які дозволяють взаємодіяти з ботом у різний спосіб, наприклад, не тільки текстом, але й голосом.
Для створення чатботів на Azure застосовується Bot Builder SDK. Цей продукт відкритий для користувачів та постійно отримує підтримку від розробників. На GitHub можна знайти останні оновлення та звернутися з питаннями безпосередньо до творців цього інструменту.
Що слід врахувати при створенні чатбота на Azure
- Оновлення впливають на функціональність. Часто нові версії Bot Builder SDK можуть порушувати роботу раніше написаного коду. Тож слід уважно відстежувати всі виправлення. Цілком можливо, що посібники, якими ви користуєтеся, вже застарілими.
-
Нестандартні підходи добре працюють. При роботі з Bot Builder SDK варто бути готовим до інновацій та не боятися відхилятися від звичного курсу. Тож завжди експериментуйте та випробуйте нові рішення.
-
Універсальність коду не є панацеєю. Чатбот можна без змін у вихідному коді запустити на різних платформах. Однак кожен месенджер має свої особливості, і при створенні сервісу подібні нюанси можуть потребувати особливої уваги.
Як відбувається спілкування з ботом
Комунікація з чатботом відбувається через UI. Він є мостом між вами та машинним кодом. В Azure AI Bot Services для цього використовується система ієрархічних діалогів, де є 3 базові моделі побудови діалогу:
- Prompt. Це метод взаємодії, де бот надає користувачеві набір підказок і чекає на відповідь. Якщо вона коректна, діалог продовжується. В іншому випадку користувачеві пропонується вказати правильні дані.
-
Waterfall. Це послідовний збір даних від користувача. Метод складається з серії запитань, кожне із яких реалізується як асинхронна функція. Відповідь на одне запитання передається як аргумент для наступного.
-
Component. Цей метод розбиває складний діалог на більш прості сегменти. Це дозволяє повторно використовувати частини діалогу у різних сценаріях, які мало або взагалі не пов’язані один з одним.
Запити можуть бути одним із шести типів:
- текст;
- число;
- дата і час;
- підтвердження;
- вибір;
- прикріплення файлу.
Підписуйтеся на наші соцмережі
Ці запити служать для покрокової комунікації. Спочатку бот запитує інформацію, потім надає допустимі значення чи просить повторити введення, якщо отримана некоректна інформація. Все інтуїтивно зрозуміло для користувачів.
Як працювати з контролерами і темплейтами
Для прикладу розберемо створений мною чатбот під назвою Remind me later. Його головна функція — нагадувати про завдання, які слід виконати найближчим часом. Для розробки цього сервісу я використовував шаблон Empty Template від Visual Studio, в якому міститься BotController. Цей контролер відповідає за прийом повідомлень від користувача та їх перенаправлення до бот-фреймворку. Крім того, в арсеналі бота присутні Deployment Templates — шаблони, що полегшують деплой на Azure.
Також є NotifyController. Він відповідає за встановлення часу, коли слід надіслати нагадування. Але про цей інструмент буде трохи нижче.
Що таке Startup та як наповнювати ToDoDialog
Насамперед треба звернутися до розділу Startup.cs. Тут є зареєстрований обробник помилок під назвою AdapterWithErrorHandler. Його завдання — відловлювати і обробляти помилки у програмі. Важливо відзначити й наявність компонента ConversationState. Він потрібен для відстеження ботом, в якому контексті відбувається спілкування з користувачем.
Тепер звернемо увагу на вкладку ToDoDialog.cs. Тут я створив набір дій під назвою waterfallSteps — це послідовність діалогу, який згадано вище. У цьому розділі описано, які асинхронні функції будуть задіяні на кожному етапі спілкування.
Далі розглянемо, які команди система прийматиме від користувача. Чатбот буде задавати стандартний набір питань про захід та пропонувати встановити нагадування.
А для перевірки працездатності чат-боту я використовував Bot Framework Emulator. Це утиліта, призначена для тестування та дебагу чатботів як на комп’ютері, так і в мережі. За допомогою цього інструмента можна взаємодіяти з ботом та контролювати вхідні і вихідні повідомлення. Емулятор показує все так само, як відображається у чаті.
Bot Framework Emulator
За активації програми отримаємо посилання, за яким бот приймає повідомлення.
До початку тестів треба вказати це посилання у Bot Framework Emulator.
Спочатку бот просить задати назву заходу для нагадування. Для цього викликається наступний код.
Щойно ви вперше звернетесь до бота, він відповість: «Please enter event description». Після введення інформації про захід (наприклад, Buy milk) бот перейде до наступного етапу та запропонує вибрати час для нагадування. Важливим елементом коду є stepContext, який зберігає деталі діалогу та інтерактивних значень.
Для надання юзеру варіантів нагадувань я застосував ChoicePrompt. Він представляє 3 можливі інтервали: за 2 хвилини, за 5 хвилин і наступного дня. Хоча може бути більше варіантів — це можна налаштовувати. Вибрані інтервали задаються через Choice.
Візуалізація цього вибору у Bot Framework Emulator:
Отримані результати можна розібрати за допомогою Parse, механізму збирання та структурування даних. А після вибору користувача бот підтвердить час, застосовуючи для цього ConfirmPrompt.
В емуляторі це виглядає так:
На останньому етапі ми беремо вже наявну інформацію зі stepContext і створюємо SavedNotificationModel. Важливо включити до останнього conversationReference. Це дозволяє боту ідентифікувати конкретного користувача в діалозі.
Я використовував dictionary для тимчасового зберігання подій, надаючи кожному діалогу свій instanceid.
Закінчувати спілкування краще певним повідомленням, яке підтвердить успішність задачі. У цьому прикладі це було: Thanks. Notification has been successfully saved.
Як бот визначає час
Я розробив метод NotifyTimeCheck() у NotifiedController, щоб допомогти боту стежити за часом. Цей метод перевіряє події і при наближенні заданого часу витягує івент із dictionary та надсилає повідомлення користувачеві.
Щоб надіслати нагадування, я використовав метод ContinueConversationAsync() в BotAdapter та передав ConversationReference. Треба завжди вказувати першим параметром функції аppId бота, інакше він не працюватиме. Крім того, щоб нагадати боту про подію, можна використовувати BotTimerFunction із часовим тригером TimerTrigger.
У результаті функція перевіряє створені події щохвилини. І якщо наближається заданий час, бот повідомляє користувачеві про потрібний йому івент. Все легко та зручно!
Звісно, це простий приклад. Але він гарно демонструє принципи роботи з Azure AI Bot Service. З цим інструментом ви можете швидко створювати різних чатботів для оптимізації повсякденних завдань, надання актуальної інформації про товари або для оброблення унікальних запитів клієнтів. Тож раджу кожному розробнику зануритися у тему створення ботів. Це дійсно корисні навички, які стануть у пригоді на багатьох проєктах.