Как научить Алису своим функциям

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

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

Как вы наверное помните, мы пару лет назад запустили свою платформу для создания чат-ботов под названием Zenbot. Она позволяет легко создавать своих чат-ботов для любых мессенджеров и каналов типа Telegram, Facebook, или даже создать чат-бота или функцию для Дуси. И при этом вам не понадобится арендовать сервера и искать решения для процессинга естественного языка или диалогового движка. Все это уже есть в Zenbot.

С тех пор прошло довольно много времени. И хотя теперь у нас уже почти готова гораздо более продвинутая платформа с крутым интерфейсом, которую мы представим совсем скоро (в конце мая), но zenbot.org по-прежнему хорошо справляется со своими функциями и его вполне можно использовать уже сегодня для создания функций Алисы.

Яндекс Диалоги (бета)

Итак, Яндекс решил предоставить всем энтузиастам возможность первыми попробовать свои силы в создании дополнительных навыков для Алисы. Да-да, в Алисе это называется «Навыки». Собственно это аналог скриптов в ассистенте Дуся, но с некоторыми различиями.

Различие первое — дополнительные навыки Алисы запускаются только специальными командами «включи», «открой» или «запусти». Например если ваш навык называется «Мой новый навык», то пользователь сперва должен сказать Алисе «Запусти мой новый навык». Только после этого Алиса запустит ваш навык и передаст управление ему.

Различие второе — все навыки Алисы работают только на сервере, а не на устройстве. Поэтому не получится выполнить какую-либо операцию прямо на устройстве (например, открыть другое приложение, отправить СМС контакту или совершить звонок). Также навык Алисы не сможет отправить какой-либо запрос на локальный IP адрес в вашем доме или офисе (а это бывает нужно для функций типа умный дом).

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

Кстати каталог пользовательских навыков для Алисы сейчас доступен только в бета-версии приложения Яндекс. Нажимаем меню в правом верхнем углу и далее — Что умеет Алиса.

Как создать навык для Алисы

Сейчас чтобы создать навык для Алисы вам потребуется зарегистрировать навык на https://beta.dialogs.yandex.ru/ и предоставить webhook сервера, где собственно и работает вся логика вашего навыка. То есть Яндекс предлагает нам самим арендовать сервер, написать программу навыка на каком-нибудь языке программирования, которая реализует API Алисы и потом развернуть ее на этом сервере. Вдобавок к этому, нужно еще и научиться обрабатывать речь на естественном языке, ведь пользователи Алисы используют микрофон или клавиатуру, чтобы взаимодействовать с ассистентом…

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

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

Итак, с чего начать создание навыка для Алисы на Zenbot? Конечно же с логина на zenbot.org. Открываем страничку и нажимаем кнопку Sign in with Github.

Вам понадобится создать аккаунт на github.com где заодно и можно хранить исходный код навыка для Алисы

Откроется окно, где можно добавить нового бота (бот — это и  есть наша голосовая функция для Алисы). После добавления откроется страница настроек бота. Тут же можно будет бота потестировать.

Если хотите поскорее потестировать зенбот с Алисой, то используйте наш тестовый проект как написано тут https://github.com/uzyovoys/zenbot/tree/master/alice

Код для Zenbot

Бот на Zenbot — это тоже код.  Код для Zenbot — это XML и JS файлы, в которых описывается, как развивается диалог с пользователем. Собственно вокруг понятий «диалог», «контекст», «сущности» и крутится вся платформа Zenbot. Подробно об этом можно прочитать в документации к Zenbot. Тут же мы опишем основные моменты и приведем простой пример.

Итак, создадим на своем ПК обычный текстовый файл например skill.xml и напишем там

<context>
  <input pattern="* привет* *">
    <output value="Ну првиет"/>
  </input>
</context>

Все просто. У нас есть главный диалоговый контекст (тэг context), в нем пользователь говорит что-то типа «Ну привет Алиса», а Алиса отвечает «Ну привет». Тэг input описывает, какие фразы ожидаются от пользователя, а output — что нужно ответить, когда пользователь говорит что-то похожее.

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

Как загрузить бота на Zenbot

Файл мы создали (кстати в реально больших проектах можно создать много файлов xml и js). Теперь нам нужно создать Git репозиторий например на github.com и загрузить код туда. Это нужно сделать один раз для проекта, потом можно просто заливать новый код на github и Zenbot будет автоматически или вручную обновлять вашего бота.

После этого зайдем в настройки нашего бота на Zenbot и нажмем Configure Git repository. Заполняем поля для нашего репозитория. Если вы используете github, то поля имя пользователя и пароль можно не указывать. Еще в каждом репозитории можно держать код для нескольких ботов. Поэтому в настройках есть поле Directory. Тут можно указать папку в ваших исходниках, где лежат XML и JS файлы для именно этого бота.

Нажимаем Save settings. После этого Zenbot попытается собрать вашего бота и расскажет о своем успехе или провале на странице Build reports. Кстати тут же можно нажать кнопку Rebuild now чтобы поскорее пересобрать бота, когда вы изменили его код в репозитории.

Если все прошло хорошо и ваш бот написан правильно, то увидим вот такое сообщение

Тестируем бота в Zenbot

Нажмем на кнопку Test this bot — и откроется страничка для тестов. ТУт можно написать «приветы» и увидеть ответ от сервера Zenbot. Это простой вывод в формате JSON, в котором можно увидеть все что получилось в итоге. Нам это понадобится только для отладки. И наконец теперь можно подключить бота к Алисе.

Подключаем бота к Алисе

Зайдите в настройки навыка Алисы в интерфейсе https://beta.dialogs.yandex.ru/developer/ и укажите в качестве Webhook URL адрес вида https://zenbot.org/api/alice/ключ

В качестве ключа впишите идентификатор вашего бота в Zenbot. Его можно увидеть в адресной строке на zenbot.org. Это последовательность латинских букв и цифр в конце адреса.

И теперь можно нажать на вкладку Тестирование в Диалогах для Алисы и попробовать написать «привет». Мы увидим ответы от нашего бота!

Делаем бота умнее

Давайте попробуем научить нашего бота делать хоть что-нибудь полезное. Например, давайте научим его знакомиться с пользователем и потом здороваться с ним по имени.

<context>
  <input pattern="* (привет*|здравствуй*) *">
    <!-- Здороваемся если знаем имя -->
    <output value="Привет $UserName!" if="full($UserName)"/>

    <!-- Или переходим к внутреннему контексту чтобы выяснить имя -->
    <context if="empty($UserName)">
      <output value="Привет! А как тебя зовут?"/>

        <input pattern="$Text">
          <!-- Сохранем мия пользователя в переменную UserName -->
          <var name="UserName" value="cap($Text)" scope="user"/>
          <output value="Приятно познакомиться, $UserName!"/>
        </input>
      </context>
    </input>
</context>

Разберем. Тут после того как пользователь скажет «Привет Алиса», бот проверит переменную UserName, и если она пуста (то есть ее нет вовсе), переведет пользователя в другой диалоговый контекст, где попросит назвать свое имя. После того как пользователь ответит, бот сохранит имя в переменную UserName (функция cap просто сделает первую букву имени заглавной) и скажет пользователю «Приятно познакомиться, Вася» (если пользователь назвал себя Вася).

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

А что-нибудь поинтереснее есть?

Есть конечно. Специально для нашей статьи мы подготовили более интересный навык для Алисы, который умеет не только знакомиться с пользователем, но и искать информацию  в Википедии и отображать кнопки в интерфейсе Алисы. Этого бота можно найти на нашем гитхабе https://github.com/uzyovoys/zenbot/tree/master/alice

Делаем те же шаги. Создаем бота на zenbot.org, в настройках репозитория прописываем URL https://github.com/uzyovoys/zenbot и в поле Directory указываем alice. Потом идем на https://beta.dialogs.yandex.ru/developer/ и создаем новый диалог. Привязываем его к боту на Zenbot через Webhook URL. И тестируем.

Несколько полезностей

Как добавить кнопки?

Используйте тэг sample. Он создает кнопку, при нажатии на которую в бота придет запрос, текст которого указан на кнопке. Подробнее в документации по sample.

Первый запрос

Когда пользователь активирует ваш навык фразой «Запусти такой-то навык», вашему боту придет пустой запрос. На него нужно выдать реакцию (например поздороваться или что-то еще). Для этого обязательно заведите в своем боте input такого вида

<input pattern="*">
  <output value="Например привет"/>
</input>

Как закончить сессию

Если в вашем навыке в какой-то момент нужно закончить сессию, просто создайте переменную end_session вот так

<input pattern="* пока *">
 <var name="end_session" value="javascript: true"/>
 <output value="Пока"/>
</input>

Как синтезировать речь

Если вы хотите, чтобы Алиса произнесла не то, что ваш бот возвращает в виде текстового ответа, то создайте переменную tts вот так

<input pattern="* пока *">
 <var name="tts" value="Пок+асики"/>
 <output value="Пока"/>
</input>

Как сформировать JSON ответ

Если вы хотите полностью сформировать ответ в JSON формате по протоколу Алисы (например если вам не хватает функционала тэга sample), то вы можете вернуть JSON ответа в output вот так

<input pattern="* пока *">
 <output value='{"text":"Пока!","end_session":false,"buttons":[]}'/>
</input>

Куда дальше?

Для Zenbot мы написали подробную документацию с примерами. Еще у нас есть репозиторий с примерами готовых ботов и FAQ который описывает некоторые основные особенности платформы. У вас не займет много времени, чтобы понять, как писать сценарии ботов, которые понимают естественный язык и могут выполнять полезные (и бесполезные) функции.

Как уже было сказано ранее, мы готовим к выходу более продвинутую платформу с множеством уникальных NLP инструментов. Но релиз будет только через два месяца, а сейчас zenbot.org поможет вам освоить создание навыков для Алисы, которые умеют работать с голосовыми и текстовыми командами.

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

 

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

w

Connecting to %s