Hello, Bot! Чат-боти – наступне покоління додатків?

Нещодавно пройшла конференція //BUILD, на якій Microsoft традиційно представляє нові технології для розробників. ключовій доповіді першого дня була висловлена одна дуже важлива думка – по мірі того, як спілкування з комп'ютерами стає все більш природним, зростає роль діалогового спілкування природною мовою. Мова тут не тільки про те, що ми зможемо просити голосовий помічник Cortana просити поставити нам будильник, але і безліч інших завдань (замовити піцу, забронювати готель, купити квитки і т. д.) може бути вирішено за допомогою діалогу. Більш того, це може бути не тільки діалог між користувачем і комп'ютером: в більш складному випадку людина може попросити Cortana спланувати подорож, і потім Cortana буде сама спілкуватися з іншими ботами, здійснюючи замовлення готелю та квитків.



Тут цікаво те, що саме «спілкування» може відбуватися а різних місцях: на десктопі з допомогою клієнта Cortana, але також і в інших традиційно використовуваних для чату каналах: Skype, Telegram, Slack і т. д. Особистість і пам'ять нашого персонального асистента не залежить від каналу спілкування, а розташовується десь в хмарі, готова поспілкуватися з нами на будь-якому з так званих «conversational canvases».

Для створення ботів була представлена попередня версія Microsoft Bot Framework і відповідні API, про які ми поговоримо нижче. Ми також покажемо, як можна створити свого найпростішого бота, підтримує розмову з користувачем англійською мовою.

Для роботи з ботами використовуються наступні ключові елементи:
  • Bot Builder SDK (доступний для C# та для Node.js) призначений для створення ключовий функціональності бота. Він заснований на WebAPI, і визначає протокол спілкування бота з зовнішнім світом. В рамках SDK є емулятор, що дозволяє налагоджувати ботів, а також набір класів для спрощення реалізації деяких ключових абстракцій, таких, як тривалі діалоги з станом.
  • Cognitive Services (раніше відомі як LUIS, складова частина Project Oxford) дозволяють спростити аналіз природної мови і виділення сенсу текстових речень. За допомогою веб-інтерфейсу ми можемо визначити основні синтаксичні конструкції, і автоматично присвоїти їм відповідні наміри користувача (intents), на які потім буде реагувати бот.
  • Bot Connector дозволяє прив'язати наш бот до одного або декількох каналів спілкування, таких, як Skype, Slack, Telegram та ін Для цього достатньо налаштувати з'єднання бота на сайті botframework.com.
  • Каталог ботів, в якому з часом можна буде публікувати посилання на різні боти.


Приклад: знайомимося з Murphy Bot
Відмінний приклад бота – це Murphy, створений в рамках проекту http://www.projectmurphy.net/. Зайшовши на сайт, ви можете встановити Murphy собі в Skype і почати з ним спілкуватися (тільки переконайтеся, що ви використовуєте останню версію Skype, яка підтримує ботів). Цьому боту можна задавати питання виду «What if Cindy Crawford were a superman?» (приклад діалогу ви бачите нижче), або «What if I were a programmer» (в цьому разі він попросить вас завантажити свою фотографію).



Hello, Bot! Пишемо собі співрозмовника
В якості прикладу давайте розглянемо, як створити найпростішого бота на базі Bot Framework. Згадаймо, що серце і мозок бота – це веб-сервіс, який зазвичай розташовується в хмарі.



Для створення такого сервісу найпростіше завантажити Bot Framework Template для Visual Studio (переконайтеся, що у вас стоїть Visual Studio 2015 Update 1 з веб-інструментами). Отриманий ZIP-файл покладіть в каталог з шаблонами Visual Studio, зазвичай це “%USERPROFILE%\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C#". Після цього в Visual Studio ви зможете створити новий проект типу Bot Application:



В створеному проекті за основну функціональність бота відповідає метод Post у файлі Controllers/MessagesController.cs. Для найпростішого Hello-бота реалізуємо цей метод таким чином:

public async Task<Message> Post([FromBody]Message message)
{
if (message.Type == "Message")
{
var reply = 
message.Text.ToLower() == "привіт" ?
"Hello!" :
"I do not understand you!";
return message.CreateReplyMessage(reply);
}
else
{
return HandleSystemMessage(message);
}
}


Щоб протестувати бота, запустимо проект на локальному веб-сервері (F5), скопіювати адресу та порт з адресного рядка відкрився браузера, і відкриємо його у Microsoft Bot Framework Emulator(його необхідно попередньо завантажити та встановити). Зверніть увагу, що до адресному рядку сайту необхідно дописати шлях /api/messages.



Щоб змусити бот робити щось трохи більш корисне, я використовував порт на C# відомої програми Eliza. Одержаний чат-бот ви можете завантажити у нашому репозиторії GitHub. У першій версії схема побудови бота мало чим відрізняється від наведеної вище програми, тільки для формування відповіді викликається метод готової бібліотеки Eliza.

Така проста реалізація не дуже підходить для підтримки тривалих діалогів з користувачем, оскільки метод Post використовується для обробки запитів користувачів, і немає поділу стану між ними. Щоб це зробити, можна в явному вигляді дивитися на ідентифікатор сесії (message.ConversationID), використовувати об'єкти BotUserData/BotConversationData, або задіяти більш просунуті API з підтримкою діалогів (про них ми розповімо в наступних статтях). Поки ж не будемо звертати уваги на ці деталі, вважаючи, що бот є stateless.

Щоб запустити бота в хмарі, нам для початку потрібно опублікувати получившися Web API в Azure. Потім слід увійти на сайт http://dev.botframework.com і зареєструвати нового бота. Важливо придумати для бота унікальний AppID, і отримати згенерований автоматично App Secret.

Після цього необхідно зробити важливий крок – у файлі Веб.Config нашого додатка необхідно додати App ID і App Key:

<configuration>
<appSettings>
<add key="AppId" value="YourAppId" />
<add key="AppSecret" value="YourAppSecret" />
</appSettings>


Після чого необхідно розгорнути бота в хмарі, щоб Web Config оновився.



Зробивши це, можна протестувати працездатність бота в панелі властивостей на сайті Bot Framework, або ж скористатися вже знайомим нам емулятором – правда в цьому випадку треба буде ввести правильні AppID і App Secret:



Тепер, коли бот працює в емуляторі, можна прив'язати його до різних каналах зв'язку. Для цього в панелі управління ботом на сайті Bot Framework необхідно додати і налаштувати ці канали. Для цього вибираємо бажаний канал зв'язку, і слідуємо інструкціям:



Наприклад, у випадку з Telegram необхідно створити новий бот в Telegram з допомогою бесіди зі спеціальним ботом Bot Father, після чого отримати Access Tokem, та надати його сайту Bot Framework. Після цього Bot Connector візьме на себе всі посередницькі операції між Telegram API і вашим ботом, і ви зможете спілкуватися з вашим ботом з Telegram. До речі, мій бот називається в телеграме @ElllizaBot, можете з ним поговорити!

Докладніше про створення бота з нуля за допомогою Bot Framework ви можете подивитися у цьому англомовному доповіді BUILD.

Канальна абстрация
Основна принадність Bot Framework API полягає в тому, що ми можемо тепер писати боти, не орієнтуючись на якийсь один канал спілкування. По суті справи, Bot Framework дає нам правильний рівень абстракції для реалізації механізмів бесіди і діалогів, а конкретну зв'язок з різними інструментами спілкування бере на себе Bot Connector. Цей поділ дозволяє програмісту написати бот один раз, а спілкуватися з ним звідусіль. Можна сформулювати цей принцип таким чином, перефразовуючи відомий зі світу Java слоган: Write Once – Chat Everywhere.

Кілька слів про Skype Bot API
Ще одна новина, оприлюднена на //BUILD – це доступність окремого Skype API для створення ботів. Насправді створювати Skype-ботів можна і через Bot Framework, але можливості Bot Framework поки дозволяють нам працювати тільки з текстом (плюс з деякими видами attachemnt-ів), в той час як Skype Bot API дещо ширше, і дозволяє в тому числі створювати відео-боти. При виборі технології слід віддавати перевагу Bot Framework, з-за її універсальності, однак якщо ви хочете створити дійсно дивовижний бот саме для Skype – подивіться на Skype Bot SDK.

Висновок
Діалог – це природна форма взаємодії людей, і може статися, що вона стане природною формою взаємодії людей і комп'ютерів. Microsoft пропонує зручну програмну абстракцію у вигляді Bot Framework, яка дозволяє почати досить просто створювати свої чат-боти, які працюють відразу з багатьма каналами спілкування. Це не тільки перспективно, але ще й дуже цікаво! Давайте поки експериментувати зі створенням ботів, а через кілька років (місяців) подивимося, чи є боти заміною веб-сайтів і мобільних додатків, як про те кажуть аналітики.

Джерело: Хабрахабр
  • avatar
  • 0

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.