Создание голосовых навыков для Google Assistant и Amazon Alexa

Опубликовано: 2022-03-10
Краткий обзор ↬ Голосовые помощники переходят из новых технологий в повседневную жизнь. Как разработчик интерфейса, у вас уже есть навыки для его создания, поэтому давайте углубимся в платформы.

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

Чтобы бороться с усталостью экрана, на рынок вышли голосовые помощники, которые стали предпочтительным вариантом для быстрого получения информации. Согласно хорошо повторяемой статистике, в 2020 году 50% поисковых запросов будет осуществляться с помощью голоса. Кроме того, по мере роста внедрения разработчики должны добавлять «разговорные интерфейсы» и «голосовые помощники» в свой набор инструментов.

Проектирование невидимого

Для многих запуск проекта голосового пользовательского интерфейса (VUI) может быть чем-то вроде входа в Неизвестное. Узнайте больше об уроках, извлеченных Уильямом Мерриллом при проектировании для голоса. Читать статью по теме →

Что такое диалоговый интерфейс?

Разговорный интерфейс (иногда сокращаемый до CUI, представляет собой любой интерфейс на человеческом языке. Считается, что он является более естественным интерфейсом для широкой публики, чем графический интерфейс пользователя, к созданию которого привыкли разработчики интерфейсов. Для создания графического интерфейса требуются люди. чтобы изучить его специфический синтаксис интерфейса (кнопки, ползунки и раскрывающиеся списки).

Это ключевое отличие в использовании человеческого языка делает CUI более естественным для людей; это требует небольших знаний и возлагает бремя понимания на устройство.

Обычно CUI бывают двух видов: чат-боты и голосовые помощники. В обоих случаях за последнее десятилетие наблюдается значительный рост популярности благодаря достижениям в области обработки естественного языка (NLP).

Понимание голосового жаргона

(Большой превью)
Ключевое слово Имея в виду
Навык/Действие Голосовое приложение, которое может выполнять ряд намерений
Намерение Предполагаемое действие для выполнения навыка, то, что пользователь хочет, чтобы навык выполнял в ответ на то, что он говорит.
высказывание Предложение, которое пользователь говорит или произносит.
Слово пробуждения Слово или фраза, используемая для запуска голосового помощника, например «Привет, Google», «Alexa» или «Привет, Siri».
Контекст Фрагменты контекстуальной информации в высказывании, которые помогают навыку реализовать намерение, например, «сегодня», «сейчас», «когда я вернусь домой».
Еще после прыжка! Продолжить чтение ниже ↓

Что такое голосовой помощник?

Голосовой помощник — это программа, поддерживающая NLP (обработку естественного языка). Он получает голосовую команду и возвращает ответ в аудиоформате. В последние годы объем того, как вы можете взаимодействовать с помощником, расширяется и развивается, но суть технологии заключается в естественном языке, большом количестве вычислений, естественном языке.

Для тех, кто хочет немного больше подробностей:

  1. Программное обеспечение получает звуковой запрос от пользователя, обрабатывает звук в фонемы, строительные блоки языка.
  2. С помощью ИИ (в частности, преобразования речи в текст) эти фонемы преобразуются в строку приблизительного запроса, которая сохраняется в файле JSON, который также содержит дополнительную информацию о пользователе, запросе и сеансе.
  3. Затем JSON обрабатывается (обычно в облаке) для определения контекста и цели запроса.
  4. В зависимости от намерения возвращается ответ, опять же в более крупном ответе JSON, либо в виде строки, либо в виде SSML (подробнее об этом позже).
  5. Ответ обрабатывается обратно с помощью ИИ (естественно, наоборот — Text-To-Speech), который затем возвращается пользователю.

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

(Большой превью)

Голосовые устройства

Требования к устройству, на котором может быть встроен голосовой помощник, довольно низкие. Для них требуется микрофон, подключение к Интернету и динамик. Умные колонки, такие как Nest Mini и Echo Dot, обеспечивают такое низкокачественное голосовое управление.

Следующим в рейтинге идет голос + экран, известное как «мультимодальное» устройство (подробнее об этом позже), и это такие устройства, как Nest Hub и Echo Show. Поскольку смартфоны обладают этой функциональностью, их также можно рассматривать как тип многомодального голосового устройства.

Голосовые навыки

Во-первых, каждая платформа имеет свое название для своих «Голосовых навыков», Amazon использует навыки, которые я буду использовать как общепонятный термин. Google выбирает «Действия», а Samsung выбирает «капсулы».

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

Явный вызов : «Привет, Google, поговори с <имя приложения>».

Явно указано, какой навык запрашивается:

Неявный вызов : «Эй, Google, какая сегодня погода?»

Контекст запроса подразумевает, какую услугу хочет пользователь.

Какие голосовые помощники существуют?

На западном рынке голосовые помощники — это гонка на трех лошадях. Apple, Google и Amazon имеют очень разные подходы к своим помощникам и поэтому обращаются к разным типам разработчиков и клиентов.

Siri от Apple

Имя устройства : «Сири»

Фраза пробуждения : «Привет, Siri».

У Siri более 375 миллионов активных пользователей, но для краткости я не буду вдаваться в подробности о Siri. Хотя он может быть хорошо принят во всем мире и встроен в большинство устройств Apple, он требует, чтобы разработчики уже имели приложение на одной из платформ Apple и были написаны на языке swift (тогда как другие могут быть написаны на любимом всеми: Javascript). Если вы не являетесь разработчиком приложений, который хочет расширить предложение своего приложения, в настоящее время вы можете пропустить Apple, пока они не откроют свою платформу.

Google Ассистент

Имена устройств : «Google Home, Nest».

Фраза пробуждения : «Привет, Google»

У Google больше всего устройств из большой тройки, более 1 миллиарда по всему миру, в основном это связано с массой устройств Android, в которые встроен Google Assistant, что касается их выделенных интеллектуальных динамиков, цифры немного меньше. Общая миссия Google с его помощником — радовать пользователей, и они всегда были очень хороши в предоставлении легких и интуитивно понятных интерфейсов.

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

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

Амазонка Алекса

Имена устройств : «Amazon Fire, Amazon Echo».

Фраза пробуждения : «Алекса»

Amazon превысил 100 миллионов устройств в 2019 году, в основном это связано с продажами их интеллектуальных динамиков и интеллектуальных дисплеев, а также их линейки «огонь» или планшетов и потоковых устройств.

Навыки, созданные для Amazon, как правило, нацелены на приобретение навыков. Если вы ищете платформу для расширения своей электронной коммерции/услуги или предлагаете подписку, то Amazon для вас. При этом ISP не является обязательным требованием для Alexa Skills, они поддерживают все виды использования и гораздо более открыты для отправки.

Другие

Существует еще больше голосовых помощников, таких как Bixby от Samsung, Cortana от Microsoft и популярный голосовой помощник с открытым исходным кодом Mycroft. У всех троих достаточно поклонников, но они все еще в меньшинстве по сравнению с тремя гигантами Amazon, Google и Apple.

Опираясь на Amazon Alexa

Экосистема Amazon для голоса эволюционировала, чтобы позволить разработчикам развивать все свои навыки в консоли Alexa, поэтому в качестве простого примера я собираюсь использовать ее встроенные функции.

(Большой превью)

Alexa занимается обработкой естественного языка, а затем находит соответствующее намерение, которое передается нашей лямбда-функции для обработки логики. Это возвращает некоторые диалоговые биты (SSML, текст, карточки и т. д.) в Alexa, которая преобразует эти биты в аудио и визуальные эффекты для отображения на устройстве.

Работать на Amazon относительно просто, так как они позволяют вам создавать все части вашего навыка в консоли разработчика Alexa. Существует гибкость для использования конечной точки AWS или HTTPS, но для простых навыков должно быть достаточно запуска всего в консоли Dev.

Давайте создадим простой навык Alexa

Перейдите к консоли Amazon Alexa, создайте учетную запись, если у вас ее нет, и войдите в систему.

Нажмите « Create Skill », затем дайте ему имя,

Выберите custom в качестве вашей модели,

и выберите Alexa-Hosted (Node.js) в качестве внутреннего ресурса.

Как только это будет сделано, у вас будет базовый навык Alexa, у него будет создано ваше намерение, и некоторый внутренний код, чтобы вы могли начать.

Если вы нажмете HelloWorldIntent в своих намерениях, вы увидите несколько уже настроенных для вас примеров высказываний, давайте добавим новый вверху. Наш навык называется hello world, поэтому добавьте Hello World в качестве образца высказывания. Идея состоит в том, чтобы зафиксировать все, что пользователь может сказать, чтобы вызвать это намерение. Это может быть «Привет, мир», «Привет, мир» и так далее.

Что происходит в Fulfillment JS?

Так что же делает код? Вот код по умолчанию:

 const HelloWorldIntentHandler = { canHandle(handlerInput) { return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest' && Alexa.getIntentName(handlerInput.requestEnvelope) === 'HelloWorldIntent'; }, handle(handlerInput) { const speakOutput = 'Hello World!'; return handlerInput.responseBuilder .speak(speakOutput) .getResponse(); } };

Это использует ask-sdk-core и, по сути, создает для нас JSON. canHandle , что ask знает, что он может обрабатывать намерения, в частности «HelloWorldIntent». handle принимает ввод и строит ответ. То, что это генерирует, выглядит следующим образом:

 { "body": { "version": "1.0", "response": { "outputSpeech": { "type": "SSML", "ssml": " Hello World! " }, "type": "_DEFAULT_RESPONSE" }, "sessionAttributes": {}, "userAgent": "ask-node/2.3.0 Node/v8.10.0" } } { "body": { "version": "1.0", "response": { "outputSpeech": { "type": "SSML", "ssml": " Hello World! " }, "type": "_DEFAULT_RESPONSE" }, "sessionAttributes": {}, "userAgent": "ask-node/2.3.0 Node/v8.10.0" } } { "body": { "version": "1.0", "response": { "outputSpeech": { "type": "SSML", "ssml": " Hello World! " }, "type": "_DEFAULT_RESPONSE" }, "sessionAttributes": {}, "userAgent": "ask-node/2.3.0 Node/v8.10.0" } }

Мы видим, что в нашем json-файле speak выводится ssml, и это то, что пользователь услышит, когда Alexa произнесет.

Создание для Google Ассистента

(Большой превью)

Самый простой способ создать Actions в Google — использовать их консоль AoG в сочетании с Dialogflow. Вы можете расширить свои навыки с помощью firebase, но, как и в случае с учебником по Amazon Alexa, давайте не будем усложнять.

Google Assistant использует три основные части: AoG, который имеет дело с NLP, Dialogflow, который обрабатывает ваши намерения, и Firebase, который выполняет запрос и создает ответ, который будет отправлен обратно в AoG.

Как и в случае с Alexa, Dialogflow позволяет вам создавать свои функции непосредственно на платформе.

Давайте создадим действие в Google

Есть три платформы, на которых можно работать одновременно с решением Google, доступ к которым осуществляется с трех разных консолей, так что включайте!

Настройка диалогового потока

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

Дайте своему агенту имя и добавьте его в «Раскрывающийся список проектов Google», выбрав «Создать новый проект Google».

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

Настройка функций Firebase

Хорошо, теперь мы можем начать подключать логику Исполнения.

Перейдите на вкладку «Выполнение». Установите флажок, чтобы включить встроенный редактор, и используйте приведенные ниже фрагменты JS:

index.js

 'use strict'; // So that you have access to the dialogflow and conversation object const { dialogflow } = require('actions-on-google'); // So you have access to the request response stuff >> functions.https.onRequest(app) const functions = require('firebase-functions'); // Create an instance of dialogflow for your app const app = dialogflow({debug: true}); // Build an intent to be fulfilled by firebase, // the name is the name of the intent that dialogflow passes over app.intent('Default Welcome Intent', (conv) => { // Any extra logic goes here for the intent, before returning a response for firebase to deal with return conv.ask(`Welcome to a firebase fulfillment`); }); // Finally we export as dialogflowFirebaseFulfillment so the inline editor knows to use it exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

пакет.json

 { "name": "functions", "description": "Cloud Functions for Firebase", "scripts": { "lint": "eslint .", "serve": "firebase serve --only functions", "shell": "firebase functions:shell", "start": "npm run shell", "deploy": "firebase deploy --only functions", "logs": "firebase functions:log" }, "engines": { "node": "10" }, "dependencies": { "actions-on-google": "^2.12.0", "firebase-admin": "~7.0.0", "firebase-functions": "^3.3.0" }, "devDependencies": { "eslint": "^5.12.0", "eslint-plugin-promise": "^4.0.1", "firebase-functions-test": "^0.1.6" }, "private": true }

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

(Большой превью)

Настройка зоны действия

Сейчас мы приближаемся к финишу. Перейдите на вкладку «Интеграция» и нажмите «Настройки интеграции» в опции Google Assistant вверху. Откроется модальное окно, поэтому давайте нажмем «Тест», чтобы ваш Dialogflow интегрировался с Google и открылось тестовое окно в «Действиях в Google».

В тестовом окне мы можем нажать «Поговорить с моим тестовым приложением» (мы изменим это через секунду), и вуаля, у нас есть сообщение из нашего javascript, отображаемое в тесте помощника Google.

Мы можем изменить имя помощника на вкладке «Разработка» вверху.

Так что же происходит в Fulfillment JS?

Во-первых, мы используем два npm-пакета: action-on-google, который обеспечивает выполнение всех функций, необходимых как для AoG, так и для Dialogflow, а во-вторых, firebase-functions, которые, как вы уже догадались, содержат помощники для firebase.

Затем мы создаем «приложение», которое представляет собой объект, содержащий все наши намерения.

Каждое созданное намерение передало «conv», который является объектом диалога, который отправляет Actions On Google. Мы можем использовать содержимое conv для обнаружения информации о предыдущих взаимодействиях с пользователем (например, его идентификатор и информация об их сеансе с нами).

Мы возвращаем «объект conv.ask», который содержит наше ответное сообщение для пользователя, готовое к ответу с другим намерением. Мы могли бы использовать 'conv.close', чтобы закончить разговор, если мы хотим закончить разговор на этом.

Наконец, мы заворачиваем все в HTTPS-функцию Firebase, которая обрабатывает логику запроса-ответа на стороне сервера.

Опять же, если мы посмотрим на сгенерированный ответ:

 { "payload": { "google": { "expectUserResponse": true, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Welcome to a firebase fulfillment" } } ] } } } }

Мы видим, что текст conv.ask был вставлен в область textToSpeech . Если бы мы выбрали conv.close , для параметра expectUserResponse было бы установлено значение false , и беседа закрылась бы после того, как сообщение было доставлено.

Сторонние разработчики голоса

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

Jovo и Voiceflow в настоящее время являются двумя самыми популярными, особенно после приобретения PullString компанией Apple. Каждая платформа предлагает различный уровень абстракции, так что это действительно зависит от того, насколько упрощен ваш интерфейс.

Расширение ваших навыков

Теперь, когда вы разобрались с созданием базового навыка «Hello World», есть множество наворотов, которые можно добавить к вашему навыку. Это вишенка на торте голосовых помощников, которые дадут вашим пользователям большую дополнительную ценность, что приведет к повторному заказу и потенциальным коммерческим возможностям.

SSML

SSML расшифровывается как язык разметки синтеза речи и работает с синтаксисом, аналогичным HTML, главное отличие состоит в том, что вы создаете устный ответ, а не контент на веб-странице.

Термин «SSML» немного вводит в заблуждение, он может делать гораздо больше, чем просто синтез речи! У вас могут быть голоса, идущие параллельно, вы можете включать атмосферные шумы, спичконы (которые стоит послушать сами по себе, подумайте о смайликах для известных фраз) и музыку.

Когда следует использовать SSML?

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

Начните с простой речи в своем навыке, а когда она будет завершена, усовершенствуйте области, которые являются более статичными, с помощью SSML, но правильно разберитесь в сути, прежде чем переходить к прибамбасам. При этом в недавнем отчете говорится, что 71% пользователей предпочитают человеческий (настоящий) голос синтезированному, поэтому, если у вас есть возможность сделать это, идите и сделайте это!

(Большой превью)

В покупках навыков

Покупки в навыках (или ISP) аналогичны концепции покупок в приложении. Навыки, как правило, бесплатны, но некоторые позволяют покупать «премиум» контент / подписки в приложении, они могут улучшить опыт пользователя, открыть новые уровни в играх или предоставить доступ к контенту с платным доступом.

Мультимодальный

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

Мультимодальные навыки предназначены для дополнения основного голосового опыта, предоставляя дополнительную дополнительную информацию для улучшения UX. При создании мультимодального взаимодействия помните, что голос является основным носителем информации. Многие устройства не имеют экрана, поэтому вам все равно придется работать без него, поэтому обязательно протестируйте несколько типов устройств; либо в реальности, либо в симуляторе.

(Большой превью)

Многоязычный

Многоязычные навыки — это навыки, которые работают на нескольких языках и открывают ваши навыки для нескольких рынков.

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

Хитрость многоязычия заключается в том, чтобы иметь надежного партнера по переводу, будь то агентство или переводчик на Fiverr. Вы должны быть в состоянии доверять предоставленным переводам, особенно если вы не понимаете язык, на который они переводятся. Гугл-перевод здесь не поможет!

Заключение

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

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

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