Как стать автором
Обновить
41.96
Just AI
Разработка и внедрение технологий разговорного AI

Голосовые навыки с нуля: как Алиса учила песни Цоя, не давала уснуть за рулем и принесла мне шесть наград от Яндекса

Время на прочтение10 мин
Количество просмотров8.3K
Необязательно посвящать годы изучению разговорных интерфейсов, чтобы у тебя получился крутой голосовой навык. Меня зовут Сергей Кул, и я считаю, что каждый навык – это маленький стартап: либо выстрелит, либо нет. Я создал первый голосовой скилл меньше года назад, ничего не зная о разработке ботов и голосовом UX. Теперь у меня пять Премий Алисы и специальный приз от Яндекса. Рассказываю, как так вышло и чему я научился, осваивая вместе с Алисой JavaScript, формулу Видмарка и песни «Кино».



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


1 июля 2019 года я начал активно искать какое-то новое направление для бизнеса в интернете. Работа в IT приелась, хотелось сменить деятельность. И вдруг наткнулся на статью, что для голосового ассистента Алисы сторонние разработчики могут делать свои навыки. Это было озарение! Понял, что хочу освоить такую разработку и закрепиться в этой нише. Что на тот момент я знал про голосовые интерфейсы или разработку ботов? НИЧЕГО! Совершенно! Но решил в течение одного месяца всё изучить и сделать первый навык.

Весь следующий день я смотрел уроки в Школе Алисы на Youtube. Вот, например, один из самых популярных уроков – про выбор инструмента:


В итоге понял две вещи. Первое – я опоздал с этим направлением на год: возможность развивать экосистему Алисы разработчики получили в 2018 году. Второе – это все еще настолько в новинку, что есть смысл запрыгнуть в этот паровоз.
Еще пара дней ушла на изучение навыков, которые уже были представлены в каталогах Алисы и Google Ассистента. Оказалось, что интересных не так и много, и это явно шанс для творческих людей. Именно для творческих, а не с сугубо программистским опытом, т.к. залог успеха навыка – это идея и полезность, а уже потом реализация. По сути, каждый навык – это маленький стартап, который может выстрелит, а может и нет.

4 июля у нас в семье поселилась Яндекс.Станция с Алисой! Теперь было нужно определиться с платформой для создания навыков. Стало ясно, что работать над навыками можно в конструкторах или самостоятельно изучив Python или Node.js. Второй вариант я отверг (все-таки долго), а вот с конструкторами начать было куда проще, оставалось только выбрать.

В моем личном топе инструментов оказались два претендента: Dialogflower (это Google Dialogflow для Алисы) и Aimylogic (конструктор от Just AI). Dialogflower все же больше заточен под Google Ассистента, да и без минимального опыта программирования с ним было не справиться. Aimylogic мне подходил почти идеально.

1. Взаимосвязи


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



2. Свобода действий


Конструктор дает возможность подключить сторонние сервисы, такие как IFTTT, Google Таблицы или любые другие, к которым можно направлять запросы. Удобно, что можно использовать JavaScript для своих функций: в упрощенной форме, но, если разобраться, можно создавать условия, циклы, массивы и т.д.

3. Интенты


Навык для голосового ассистента – это не просто бот. Нужно заранее продумать все возможные ответы и действия пользователя. А их может быть в сотни раз больше, чем в обычных играх с кнопками. Так, например, на просьбу назвать свой город, пользователь может ответить: «Санкт-Петербург», «Петербург», «Питер», «Спб». И для таких моментов в конструкторе есть самообучающаяся система интентов, которая поймет любой ответ. Это особенно пригодилось мне в одном из навыков для распознавания имен игроков.

Первый блин: тестируем навык на бабушке


Я взялся за тестовый навык – «Капсула времени». На его примере я хотел посмотреть, как устроены навыки изнутри и какие функции вообще можно в них задействовать:

  • запись в Google Таблицу сообщения пользователя (как во внешнюю базу данных);
  • распознавание пользователя по ID и считывание его сообщения из Google Таблицы;
  • запись и считывание данных о пользователе;
  • распознавание, кто играет – новый или постоянный игрок, и выбор соответствующего приветствия;
  • разнообразные диалоги в зависимости от ситуации в игре.

В итоге через 10 дней ещё не опубликованный в каталоге Алисы навык был презентован нашей бабушке. И тут случилось ужасное! Бабушка ничего не поняла. Кому говорить? А уже можно отвечать? А что сказать? В общем, навык был полностью забракован. Стало ясно, что нужно делать проще и понятнее для пользователя.


В итоге навык был переименован в «Послание в бутылке», переписаны все диалоги, добавлены картинки и звук. Именно в такой версии мой первый навык появился в Каталоге Алисы. Теперь в него можно было играть на нашей Яндекс.Станции!
«Послание в бутылке»: можешь слушать реальные послания, оставленные игроками из других городов, и записывать свои сообщения, которые тоже кто-то услышит из уст Алисы. Google Таблицы служат в качестве базы данных для хранения посланий, а для сохранения данных о пользователе – база Aimylogic.

Гейм-джем для рывка


В конце июля я узнал, что 3-4 августа в Питере пройдет открытый гейм-джем «Игры с голосовым управлением». Это такой игровой хакатон, где за два дня нужно с командой придумать голосовой навык и его реализовать. Никогда раньше такие мероприятия не посещал, стало интересно. Решил пойти, тем более там разыгрывались три Яндекс.Станции, ну и вообще это был хороший повод завести новые знакомства.



Со мной в команде были еще три человека. Через пару часов мозгового штурма мы презентовали общий навык «Text Mixer». Еще во время обсуждения мне пришла идея навыка со стульями – ну, как та игра из детства, когда все бегают под музыку вокруг стульев и должны успеть сесть, когда музыка внезапно закончится. Но она никому не понравилась. А мне показалась настолько интересной, что я решил сделать навык лично, как дополнительный (если останется время).

Начали командную работу над «Text Mixer». Я взял на себя разработку, остальные должны были подобрать материалы и написать тексты. Но уже через 1.5 часа двое ребят решили делать квест и вышли из проекта. Вдвоем с напарником мы допилили навык к вечеру, разъехались по домам. На следующий день его нужно было только «причесать» и презентовать.

Уже дома я рассказал про «Музыкальные стулья» дочке, и она сказала, что они часто играют в такую игру в садике. Дал дочке задание нарисовать к навыку картинку для презентации, сам сел за разработку. К ночи навык был готов, утром мы поиграли дома в «Музыкальные стулья», стало понятно – это хит! Навык простой, понятный всем и зажигательный.



К обеду поехал на финал гейм-джема. Обещал дочке не возвращаться без приза! Но меня ждал сюрприз. Ребята, которые раскололи нашу команду, были на месте и сообщили, что делают «Text Mixer», от которого сами же и отказались. Мой вчерашний напарник по разработке не приехал. Я остался один. Тогда я решил, что буду презентовать только «Музыкальные стулья», т.к. игра была полностью готова.

Мой навык был единственным, который отработал без ошибок, да еще и развеселил всю аудиторию – всем пришлось играть! Но по итогам голосования «Музыкальные стулья» остались на задворках, и я не понимал почему. Решили с дочкой, что попытаемся завоевать Премию Алисы! 30 августа Яндекс объявил 5 лучших навыков августа. И «Музыкальные стулья» одержали победу в категории «Для детей».
«Музыкальные стулья»: игроки бегают вокруг стульев, пока играет музыка, но, как и в детстве, стульев на всех не хватит. Алиса в роли ведущей! Я задействовал блоки Условия и системную переменную $lastSeen для проверки, новый игрок перед вами или он уже участвовал. Для включения в сценарий разных мелодий использовал блок Текст, который позволяет указать несколько рандомных фраз (а в данном случае – несколько мелодий).

Хакатон Яндекса


В середине августа я присоединился к сообществу разработчиков Яндекс.Диалогов в Telegram, где можно не только новые знания получить, но и обзавестись друзьями и наставниками. Там мне рассказали, что Яндекс проводит на фестивале Chaos Constructions в Питере свой первый хакатон по голосовым навыкам. Я подал заявку на участие с навыком «Послание в бутылке». Он попал в число перспективных, и меня пригласили на хакатон.

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



Честно говоря, на призовое место не рассчитывал, т.к. «Послание в бутылке» было моей пробой пера. В итоге навык занял лишь пятое место, но этого хватило чтобы получить поощрительный приз – Яндекс.Станцию Мини и знаменитую футболку разработчика Алисы. Но, конечно, дело было не в призах, особенно запомнилась дружелюбная атмосфера.

Навык «Тест на алкоголь»: откуда брать идеи


Я работал на даче, и один из соседей постоянно просил глянуть в интернете табличку – сколько ему можно выпить, чтобы на утро можно было за руль. Я подумал, что на такой вопрос может ответить и Алиса. К началу сентября я подготовил уже свой третий навык «Тест на алкоголь».
«Тест на алкоголь»: Алиса узнает ваш вес, что вы пили и в каком количестве, а потом решает, можете ли вы сесть за руль прямо сейчас или нужно подождать (и сколько именно ждать!). Лучше поговорить с Алисой, чем с инспектором ДПС. Для сбора ответов пользователя используется блок Ввод текста, после чего ответы пользователя проходят проверку через блок Условия и выдается нужный результат.
Реализация навыка заняла около недели, пришлось досконально разобраться в формуле Видмарка и узнать, как рассчитываются промилле. Навык был опубликован в конце августа.

Через пять дней пришел фидбэк от Яндекса с советами, что можно улучшить. Изначально в моем сценарии можно было выбрать только определенные напитки. Ребята из Яндекс.Диалогов посоветовали сделать так, чтобы пользователь не выбирал из предложенного, а мог просто голосом назвать свой напиток. Пришлось добавлять инфу про спирт, абсент, самогон и так далее.

Сделав нужные доработки, я со спокойной душой, с семьей и на премию от «Музыкальных стульев» уехал на море. С собой я прихватил книжку Джона Даккетта «JavaScript и jQuery». Отличная книга для начинающих, хотя за отпуск осилил только половину из 640 страниц.



Всем подогретым солнцем туристам я показывал навык и тестировал их на степень выпитого. «Тест на алкоголь» сначала попал в Новинки Алисы, а потом получил премию в рубрике «Полезное»!

Освоение новых рубрик


Самая конкурентная категория навыков в каталоге Алисы – это «Игры и развлечения». И мне хотелось попробовать силы там. Я взялся за навык «Звездный поединок», разработка заняла примерно три недели. Большая часть времени ушла на придумывание поединков и шуток + подбор экшен-составляющих (музыки, звуков). Тут я уже вовсю использовал JavaScript. Это позволило реализовать ряд интересных фич – например, выдавать пользователю рандомные поединки, записывать их номера в массив и далее выводить только новые бои, чтобы в течение одной игры поединки не повторялись.
«Звездный поединок»: битвы звезд и известных персонажей (Иван Ургант или Дима Нагиев? Колобок или Красная Шапочка?), делаешь ставки и зарабатываешь монеты. Ну и теряешь тоже. Вычисления для подсчета баллов реализованы через блок Условия. Для записи данных об игроке использовался сервис IFTTT, с помощью которого можно отправить данные в Google Таблицу.



После публикации навыка в ноябре прошла пара месяцев. Но ни фидбэка от Яндекса, ни высоких позиций в каталоге Алисы навык не получил. Я решил, что потерял хватку. И тогда за неделю запилил навык, который придумал еще на гейм-джеме: навык должен был помогать водителям не заснуть за рулем и не попасть в аварию. Назвал его «Не спи за рулем». Он не очень сложный в исполнении, но довольно полезный.
«Не спи за рулем»: Алиса заботливо уточняет, насколько вы устали, а потом каждые несколько минут бодрит водителя затейливыми вопросами вроде «А вода легче масла?». В сценарии навыка есть небольшие вычисления на JS в блоке Условия, Google Таблицы используются в качестве базы данных для хранения вопросов.
Только в конце января Яндекс дал обратную связь по «Звездному поединку». Доработок было много, но это был хороший знак. К февралю я все доделал. Наступил конец месяца, день вручения премий. По моему прошлому опыту, если в этот день до обеда тебе не пришло сообщение от Яндекса, то ты в ауте. Я никаких сообщений не получил и уже потерял надежду. Но напрасно! Вечером пришло письмо о том, что на премию номинирован и «Звездный поединок», и «Не спи за рулем»! Было здорово понимать, что все не зря.

В итоге – победа в желанной категории «Игры и развлечения», а «Не спи за рулем» попал в категорию «Специальный приз». Так что пока осталась неохваченной одна премиальная рубрика – «Образование»!

И что, всё правда так просто?


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

Самое главное не расстраиваться, что сначала все будет не так, как планировали. А вот мои советы – как создать навык, который достоин премии:

  1. Навык не обязательно должен быть идеальным, но он должен нести новую идею, которой еще не было в каталоге Алисы.
  2. Навык должен быть полезным или интересным, поднимать настроение.
  3. Диалоги в навыке должны быть живыми, чтобы Алиса проявляла свой характер и эмоции в беседе с пользователем.
  4. Все навыки я проектирую для умной колонки, ведь если навык понятен и удобен в использовании на Яндекс.Станции, то на смартфоне будет понятен наверняка, но еще и с кнопочными подсказками.
  5. Во всех навыках я использую экшен-приемы – музыку при запуске навыка и при выходе. Обязательно думаю о звуковом оформлении – звуки делают навык дружелюбнее. Беру их обычно здесь: zvukipro.com, а редактирую здесь: mp3cut.net/ru.
  6. Почти во всех моих навыках, если пользователь играет повторно, Алиса его узнает и приветствует индивидуально.
  7. Моя боль и гордость – склонения. Если хотите, чтобы Алиса в навыке не звучала, как робот, и говорила «у вас 5 подсказок», а не «у вас 5 подсказка», этому нужно уделить время. Это как раз решается JavaScript. Текст идет числами, а озвучка в TTS – словом. И это, конечно, касается не только чисел, но склонения мужского/женского/среднего рода.
  8. Во всех навыках я использую TTS, проверяю паузы и правильность произношения через Яндекс SpeechKit.
  9. Все новые навыки я презентую сначала в сообществе разработчиков Яндекс.Диалогов. Конечно, тут не стоит ждать поощрения или похвалы, зато можно хватануть полезной критики и единиц в оценках по самое не хочу! Но если сможете это пережить и доработать навык, то он точно станет лучше. Считайте, что станете героем фильма «Выживший».
  10. Модерация навыка не всегда проходит гладко. После того, как навык «Музыкальные стулья» был опубликован и уже несколько дней висел в каталоге Алисы, я решил поменять аватарку к нему. Подал на повторную модерацию. В итоге навык не одобрили. Причина – неподходящее название! Только когда я письмом написал, что навык уже давно в каталоге с этим названием, повторная модерация была пройдена. И так случается часто, судя по рассказам других разработчиков.
  11. Остальное – вера в свою идею!

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


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

P.S. Хочу поблагодарить всех камрадов по разработке, которые продвигают голосовые навыки, верят в свою полезность, помогают в чатах, делают что-то новое! Навыки становятся лучше, переходят на новый уровень. И сейчас совсем не поздно подключиться, чтобы занять своё место под солнцем. Я тоже постараюсь не отставать. И надеюсь после карантина увидеться на Боткэмпе или Хакатоне! А пока можно глянуть мой новый навык «Память о Викторе Цое», который в мае получил Премию Алисы.
«Память о Викторе Цое»: навык, в котором нужно не только узнать песню группы «Кино» по отрывку, но и правильно вспомнить название. А Алиса подскажет, в каком году песня была записана и в какой альбом вошла. Песни и стихи сохраняются в Google Таблице. Для описания различных фактов используется блок Текст, а для проверки правильного варианта – блок Условия. Для сохранения данных о пользователе использовал базу Aimylogic.

Всем желаю здоровья и признания!
Сергей Кул (GarEngin)

Обложка: dribbble.com
Теги:
Хабы:
Всего голосов 10: ↑10 и ↓0+10
Комментарии9

Публикации

Информация

Сайт
just-ai.com
Дата регистрации
Дата основания
2011
Численность
101–200 человек
Местоположение
Россия

Истории