Голосові помічники все частіше присутні в нашому житті. Не тільки на наших телефонах, але ми маємо всі види пристроїв, таких як Google Home або Amazon Echo, обидва з різними варіантами.

поетапно

Як і у випадку з мобільними пристроями та сенсорними інтерфейсами, зараз для розробників з голосовими інтерфейсами відкривається новий світ можливостей. У цій статті ми зупинимось на голосовому помічнику, створеному Amazon: Alexa. Яка вже включає 5 пристроїв, таких як Echo Dot, Echo, Echo Plus, Echo Spot та Echo Show.

За останні кілька місяців я дізнався про це як створити вміння, це назва програм у цьому майстрі та різних інструментів, які ми маємо для цього. Я написав серію дописів, які буду використовувати тут як посилання, коли кожен крок коментується.

З чого я починаю?

Перше, що потрібно подумати про вміння, яке ми хочемо створити. Моя порада - вибрати щось просте, що не вимагає баз даних або зовнішніх викликів API. По-перше, ми завжди можемо створити щось, що містить інформацію в самому коді сервера, або зі статичним кодом, файлом JSON або подібним. Це був мій випадок, коли я вирішив створити свою першу навичку, яка дозволяє консультуватися з кінопрем'єри певного періоду часу. Важливим є те, що ми зосереджуємось на вивченні парадигми створення навички.

Є багато офіційної документації та деякі інші розмови іспанською мовою. Я зробив невеличку компіляцію у своєму першому дописі серії. Щоб дізнатися, як працює Alexa кількома словами, ви можете переглянути наступне відео (англійською мовою) з офіційного облікового запису Alexa Developers на YouTube.

Розвиток навичок

A Alexa майстерність вона нічим не відрізняється від будь-якої заявки, яка подається сьогодні. Він має клієнтську та серверну частини. Клієнтська сторона відповідає за визначення моделі взаємодії (Interaction Model) з користувачем. Ця модель складається з кількох частин, які ми побачимо пізніше. Для серверної частини ми будемо використовувати AWS Lambda та SDK, надані Alexa для Java. Хоча це для Java, ми побачимо його використання з Kotlin. Будь-яка мова JVM підійде.

Перш ніж приступати до справи, нам потрібно мати обліковий запис розробника Amazon. Ми можемо зробити це на офіційному веб-сайті Alexa, і це дозволить нам отримати доступ до набору послуг, які Amazon пропонує розробникам. У нашому випадку це дозволить нам отримати доступ як до консолі розробника Alexa, так і до служб AWS, де ми будемо використовувати AWS Lambda.

Перша навичка, яку я розробив, і яку я взяв за основу статей, дозволяє користувачеві запитувати прем’єри фільмів із зазначенням періоду часу. В якості базового сценарію ми можемо запропонувати наступну взаємодію:

Подібним чином користувач міг використовувати вміння за допомогою "одного виклику". Або це може вказувати період часу, протягом якого прем’єри невідомі:

І, як еволюція, спочатку це не змушувало вказувати певний проміжок часу, але потім я змінив його:

Створення моделі взаємодії за допомогою консолі розробника Alexa

Консоль розробника Alexa - це основний сайт для розвитку навичок для Alexa. Це дозволить нам охопити значну частину циклу розробки, тестування, розподілу, сертифікації та аналітики.

Створюючи навичку, він запитує нас: ім’я, мова навички та який це тип. Доступні типи залежать від вибраної мови за замовчуванням. Для іспанської мови ми збираємося створити "власну навичку", оскільки це дозволить нам мати повний контроль над користувацьким досвідом та створити власну модель взаємодії.

Після створення ви перейдете до вікна з різними вкладками. Вкладка "побудувати" буде тією, яка пропонує всі необхідні функції для створення моделі взаємодії. Визначення цієї моделі - це не що інше, як генерування файлу JSON із певною структурою. Ми матимемо доступ до цього файлу, якщо хочемо, наприклад, його версію або створити іншу навичку на основі існуючої моделі.

Таким чином, частинами моделі є:

  • Ім'я заклику, ім’я, яке користувач використовуватиме для посилання на нашу майстерність.
  • Наміри, дії, які зможе виконати користувач.
  • Висловлювання, - це оператори, визначені на рівні наміру, і використовуються для їх запуску.
  • Слоти, Вони є аргументами у висловлюванні, призначеному для збору інформації про користувачів. Їм повинен бути присвоєний тип при їх створенні. Amazon вже пропонує деякі заздалегідь визначені типи, але ми можемо створити власні.

Використання слоти у нашій моделі це буде залежати від випадку використання. З наведених елементів вони є єдиними, які не є обов’язковими для визначення, оскільки нам може не знадобитися збирати інформацію про користувача. Як ми бачили в попередньому розділі, моя майстерність розвивалася таким чином, що в підсумку я визначив обов’язковий слот з інформацією про певний проміжок часу (цього тижня, цього місяця, наступного тижня тощо).

Після того, як ми визначили модель, ми повинні її побудувати. Це дозволить нам протестувати його за допомогою Utterance Profiler, інструменту в консолі, який не вимагає розгортання сервера для здійснення моделі.

Використання AWS Lambda та Kotlin для серверної частини

Після створення передньої частини навички ми пояснимо задню. Як ми вже говорили раніше, ми будемо використовувати AWS Lambda, що дозволить нам дуже просту інтеграцію. Я не збираюся вдаватися в деталі безсерверних концепцій, оскільки це не мета цього допису. Я залишаю тут посилання на статтю, яку написав Рікардо Борилло на цю тему.

Єдине, що слід прокоментувати, це те, що ви використовуєте регіон Ірландії, оскільки не всі вони дозволять вам налаштувати Alexa Skill.

Нам потрібно створити функцію на панелі AWS Lambda, і ми будемо використовувати Java 8 як середовище виконання. Нам доведеться виконати додаткову процедуру конфігурації, якщо ми раніше не створювали ролі для питань дозволів в AWS, але це просто. Також рекомендую працювати на основі версій створеної вами функції. Це дасть вам гнучкість і контроль, коли справа доходить до розгортання різних версій коду відповідно до ваших навичок.

Після створення функції ми повинні встановити зв’язок із вмінням. Для них ми повинні додати тригер Alexa Skills Kit у нашу функцію та додати ідентифікатор навички, який ми можемо знайти в консолі розробника Alexa. Далі, ми повинні використовувати ARN нашої функції, щоб сказати вміння, яку кінцеву точку ми збираємось використовувати. Таким чином, спереду і ззаду пізнають одне одного.

Для зворотного коду, незважаючи на те, що ми вибрали час виконання Java 8, я вирішив використовувати Kotlin. Спочатку я робив це на Java, але в підсумку переніс його. У мене все розміщено в репозиторії GitHub, і ви побачите процес фіксації шляхом коміту. В якості основи ми використовуємо SDK, який пропонує нам Alexa, щоб отримувати запити на вміння та надсилати повні відповіді на всі пристрої, які його використовують.

Існує два типи базових класів, які нам доведеться створити:

  • Скільки завгодно RequestHandlers для обробки намірів, що походять від навички. Той самий RequestHandler може обробляти більше одного наміру.
  • SkillStreamHandler, який буде основним класом нашого серверного сервера. Тут ми зареєструємо обробники, які ми створили раніше.

Метод canHandle використовується, щоб перевірити, чи може обробник обробляти вхідний запит. Тут основна логіка, яка зазвичай робиться, полягає в тому, щоб подивитися назву наміру запиту.

Метод дескриптора відповідає за отримання вхідних даних та побудову відповіді для користувача на його запит. Це метод, куди піде найцікавіший код обробника. Тут ми також обробимо будь-який слот, який потрібен нашим навичкам. У випадку прикладу я хотів би виділити три речі:

  • withSpeech ми даємо відповідь текст, який Alexa вимовить голосом користувачеві.
  • withSimpleCard, тут ми створюємо вихід для Alexa, який буде корисний для пристроїв з екраном, таких як мобільний додаток.
  • withShouldEndSession, цим ми вказуємо Alexa, що після обробки запиту ми не чекаємо чергової взаємодії з користувачем і закриваємо сесію, тобто вміння.

Після створення необхідних нам RequestHandlers ми можемо зареєструвати їх у SkillStreamHandler:

Слід зазначити, що порядок реєстрації обробників впливає на вибір правильного для обробки запиту користувача. SDK перевірить обробники в тому порядку, в якому вони були зареєстровані, і першим, хто поверне значення true для методу canHandle, буде вибраний.

Тепер нам залишається лише створити артефакт для відображення в нашій лямбда.

Як перевірити вміння вручну за допомогою інструментів Amazon

Готуючи задню частину, ми можемо вручну перевірити роботу нашої майстерності кількома способами:

  • За допомогою Utterance Profiler, як ми говорили при побудові моделі. Не відображаючи задню частину, ми зможемо запускати висловлювання, що перевіряють намір і значення слота, які він в кінцевому підсумку надсилатиме лямбда.
  • За допомогою інструментів AWS Lambda ми можемо створювати події, які запускатимуться до тих, які ми створили. Таким чином, ми можемо імітувати запити, які надходитимуть від Alexa. Amazon вже пропонує нам шаблони для створення цих тестових подій, і ми маємо вбудовану систему журналів AWS.

  • За допомогою консолі розробника Alexa ми можемо перевірити всю майстерність за допомогою симулятора. Таким чином ми будемо використовувати вміння так само, як і будь-який користувач із будь-якого пристрою з Alexa. Цей симулятор пропонує нам декілька результатів використання навички з дуже цікавою та корисною інформацією.

Поширення та сертифікація

І ми вже досягаємо кінця процесу. Як і мобільні додатки, ми маємо публікувати свої навички в Інтернет-магазині, який має Amazon. Щоб потрапити туди, ми повинні заповнити всю інформацію про розподіл навичок і витратити a процес попередньої сертифікації, проведений Amazon.

Все це ми робимо через консоль розробника Alexa:

  • З вкладки Поширення Нам просто потрібно заповнити форму, яку Amazon просить нас зробити. Це легко, і тут нема чого пояснити, але я хотів виділити один розділ: приклади речень. Те, що ми розміщуємо там, значною мірою вплине на процес сертифікації та на те, як користувачі будуть взаємодіяти із вмінням вперше. Крім того, звідси ми також можемо ввімкнути бета-тестування, не публікуючи його.

  • Після того, як ми завершимо вищезазначене, ми можемо перейти до сертифікації. Звідси ми можемо зробити пару перевірок перед тим, як відправити вміння на сертифікацію Amazon. Попередні перевірки займають мало часу, і ми матимемо відгуки в самій консолі розробника Alexa. Остаточна сертифікація займає трохи більше часу, і ви отримаєте результат електронною поштою. Або відгук, щоб виправити ситуацію, або те, що ваша майстерність пройшла процес, і буде автоматично опубліковано в магазині.

Висновки

У цій статті ми розглядали всі необхідні кроки для створення нашого першого вміння Alexa:

Я не мав великих попередніх знань з цієї теми, а також якої парадигми голосових інтерфейсів, як AWS. Завдяки ресурсам, якими діляться інші, та чудовій офіційній документації, я встиг швидко створити свою першу навичку та виграти кілька безкоштовних пристроїв Alexa. Зазвичай Amazon час від часу проводить акції для розробників навичок. Я розмістив пару посилань у останньому розділі ресурсу.

Я багато чому навчився під час цього процесу, особливо усвідомлюючи проблеми використання програми своїм голосом. Такі питання, як наголоси під час розмови, конкретний спосіб кожного з них вимовляти певні слова або багатство мови, щоб виразити одну і ту ж дію. Це труднощі, з якими ви зіткнетесь при створенні таких типів програм. Такі технології, як Alexa, і все, що стоїть за ними від Amazon, полегшують управління цими розробками, але ще багато чого потрібно зробити. Крім того, як ви можете бачити з цієї статті, створення вашої першої навички - це процес з низькою складністю.

Я закликаю вас заглибитися в такі теми, як покрокові розмови, тобто створити справжні діалоги між Alexa та користувачем. А також надання навички з можливістю підтримувати контекст або давати прогресивні відповіді, тому що вам потрібно зробити якусь дорогу або асинхронну операцію на сервері. І, одна з речей, яка, на мою думку, вам може сподобатися найбільше, пограйте з мовою розмітки мови, якою володіє Alexa, за допомогою якої ви можете говорити речі різними мовами, надавати інтонації словам, використовувати заздалегідь визначені фрази тощо.