Dialogflower — Google Dialogflow для Яндекс Алисы


Несколько месяцев назад Яндекс запустил бету своего голосового помощника «Алиса», в которой открыл ее API. И вот совсем недавно выкатил все в паблик. Теперь миллионы пользователей могут запускать различные функции и сервисы голосом прямо из мобильного поиска, навигатора и из Яндекс браузера. Неудивительно, что голосовых навыков становится все больше. Но API диалогов предполагает, что вы должны уметь программировать, у вас должен быть свой сервер с HTTPS, и вдобавок вы должны уметь обрабатывать запросы на естественном языке…

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

Что такое Dialogflow


image

Dialogflow — это онлайн сервис от гугла, который позволяет создавать своих чат-ботов или функции для гугл ассистента (это называется agent). На хабре уже есть несколько неплохих статей, в которых рассматриваются основные инструменты этого продукта. Вот одна из них.

По сути, Dialogflow умеет сопоставить фразу пользователя на естественном языке (и на русском тоже) с некоторым «неязыковым» значением (называемым intent) и что-нибудь ответить. Вдобавок он еще и держит контекст диалога, чтобы на следующую фразу можно было среагировать в контексте предыдущих реплик.

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

Зачем это Алисе


У Алисы есть API, сходный с API телеграма. Другими словами, чтобы создать навык для Алисы, вам нужно поднять сервер, который будет получать от Алисы текстовый запрос пользователя и отвечать данными в нужном формате. Все вроде просто, но чтобы создать даже самый простой навык, вам понадобится изучить протокол Алисы, поднять свой публичный сервер с HTTPS, написать код, который умеет понимать человеческий язык и поддерживать контекст беседы.

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

Dialogflower


image

Только вот Dialogflow не поддерживает протокол Алисы, поэтому нельзя так вот просто превратить агента в навык. Для этого и был сделан сервис dialogflower.com который по сути представляет собой адаптер — он с одной стороны реализует протокол Алисы, а с другой подключается к вашему агенту на Dialogflow. И таким образом превращает агента в навык. Без всяких серверов и кода.

image

Создаем агента


image

Итак, теперь мы можем сосредоточиться только на логике самого диалога в нашем агенте. Для начала нужно создать этого самого агента на сайте dialogflow.com

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

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

Default welcome intent


Этот интент существует по умолчанию в каждом агенте. Он срабатывает не на какую-то фразу пользователя, а на событие welcome. То есть когда пользователь запускает ваш навык в Алисе фразой типа «Запусти навык мой самыйнужныйнавык». Тогда от пользователя еще нет никакой команды, и агент в ответ как правило должен просто рассказать, что же дальше можно делать.

Если кликнуть на Default welcome intent в списке интентов, то внизу страницы можно добавить Responses — ответы, из которых агент каждый раз случайно выберет какой-нибудь и отправит Алисе.

Алиса еще умеет показывать кнопки и ссылки, далее мы покажем как их добавить в ответ

Жмем Add response — Text response и добавляем варианты текстовых ответов.

Default Fallback Intent


image

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

Реагируем на реплики


Если нажать на плюсик рядом со словом Intents в левом меню, то можно добавить новый интент и указать для него список фраз, на которые нужно что-то ответить. В списке Training phrases добавьте те фразы, которые скорее всего будет произносить пользователь. Чем их больше, тем лучше.

Конечно, Dialogflow лучше понимает английский, чем русский. Поэтому не ожидайте, что он поймет все синонимичные фразы, подходящие по смыслу. В этом плане лучше работает наш аналог Aimylogic, о котором я еще скажу ниже.

Не забудьте добавить ответы к вашему интенту и нажмите на кнопку Save. Без нее ничего не заработает.
Потестировать можно прямо тут — в правой части экрана. Напишите вашу тестовую фразу в поле Try it now и посмотрите, что ответил ваш агент.

Создаем навык


Теперь все готово, чтобы прикрутить нашего созданного агента к Алисе и потестить его в консоли Яндекс Диалогов. Для этого зайдите на dialogflower.com и нажмите на Создать навык. В появившемся окне нужно указать Client access token от вашего агента. Его можно найти на странице настроек агента в Dialogflow. Жмите Готово и через секунду у вас будет Webhook URL с которым мы отправимся на Яндекс Диалоги.

image

Тут создайте новый навык для Алисы и в его настройках укажите этот Webhook URL. Кроме него для тестов нужно только придумать называние навыка, все остальные поля заполнять пока не обязательно. Жмите Сохранить и переходите на вкладку Тестирование. Тут можно написать что-нибудь и проверить, что ваш навык работает как ожидается.

Наращиваем функционал


Теперь наш навык готов, и все изменения будут касаться только агента на Dialogflow. Просто добавляйте и изменяйте интенты, не забывайте нажимать кнопку Save и тестируйте результат в консоли Яндекс Диалогов.

Как понимать контекст


Dialogflow может выстраивать интенты в цепочки, чтобы ваш навык мог реагировать правильным образом на фразы, сказанные в контексте беседы. Чтобы это сделать, просто добавьте интент к другому интенту. Для этого перейдите на список интентов и наведите мышь на один из них. Справа появится еле заметная надпись Add follow up intent. Нажмите на нее и добавьте интент, который будет работать в контексте предыдущего.

То есть например, если у вас есть интент, который реагирует на фразы типа «Какая погода», то к нему можно добавить интент с фразами типа «а завтра». Тогда эта фраза будет обрабатываться агентом только если пользователь сперва попросил рассказать о погоде.

Как добавить кнопки в ответ Алисы


Алиса умеет отвечать не только текстом, но и показывать кнопки и ссылки. НАжав на кнопку, пользователь как бы формирует новый запрос, только не произнося его и не набирая текстом.

Чтобы добавить кнопки в ответ, нужно написать кусочек JSON в формате, который понимает Алиса. Для этого зайдите в нужный интент, там перейдите к ответам и нажмите Add Responses — Custom Payload. Тут можно указать кусочек ответа из API Алисы. Например, чтобы добавить кнопки, напишите

{"buttons": [ 
  {"title": "Текст запроса", "hide": true} 
]}

Тут добавляется одна кнопка, которая пошлет Алисе запрос «Текст запроса» при нажатии и автоматически скроется после этого из истории чата. А вот другой пример

{"buttons": [ 
  {"title": "Текст запроса", "hide": true},
  {"title": "Ссылка на сайт", "url": "https://dialogflower.com"}
]}

Тут добавится две кнопки, одна из которых ссылка на сайт dialogflower.com

Вообще, в Payload можно написать любой JSON в формате поля «response» из протокола Алисы.

Где логика?


Конечно не всегда нужно отвечать пусть и рандомными, но статичными фразами. Для того чтобы добавить какую-то логику, нужно будет написать немножко кода. Ну или множко, зависит от вас. Зато Dialogflow позволяет это сделать без аренды серверов.

Перейдите на вкладку Fulfillment и включите переключатель Disabled. Тут вы можете написать код на Javascript, который будет нужным образом реагировать на сработавший интент и выполнять какую-то логику, прежде чем ответ отправится пользователю. Собственно сам ответ можно тут же и переопределить в коде.

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

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

В итоге


Алисой пользуется все больше и больше людей в стране. Она работает и в поиске, и в навигаторе, и в браузере, а скоро в продажу поступит домашняя колонка с Алисой на борту.

У Алисы есть API и каждый день для нее появляется все больше голосовых навыков.

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

Dialogflower связывает агента на Dialogflow с Алисой, чтобы можно было быстро создавать навыки и экспериментировать.

Так за чем же дело встало? Тем более что Dialogflower такой же бесплатный, как и Dialogflow с Алисой.

Ложка дегтя


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

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

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

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

© Habrahabr.ru