Руководство для начинающих по созданию Alexa Skills с использованием Python.

Привет, друг!

Это второй пост в серии из (как минимум) 5 руководств, в которых я делюсь с вами всем, что вам нужно знать, чтобы превратить любую идею в навык Alexa Skill.

Напоминаю, что в предыдущем посте мы договорились развивать навык Камень, ножницы, бумага, и под согласились я подразумеваю, что это я выбрал его 😈. Кроме того, я объяснил общую концепцию развития навыков Alexa. В общем, вы должны просто помнить, что развитие навыка означает две вещи:

  1. помощь службе Alexa в определении намерений пользователя;
  2. Выяснение того, что делать, зная об этом намерении (бэкенд-логика).

⚠️ Обратите внимание, что для лучшего представления и наглядности приведенные ниже фрагменты кода представлены в виде скриншотов. Однако эти же коды доступны в моем профиле GitHub [здесь], если вы хотите что-то скопировать/вставить.

Теперь давайте начнем!

Создайте навык

Первое, что нужно сделать, это создать учетную запись разработчика Amazon (это бесплатно 😇). Для этого перейдите в Консоль разработчика Amazon, нажмите Создать учетную запись Amazon, затем заполните форму, чтобы завершить процесс.

Вы должны добавить этот адрес в закладки https://developer.amazon.com/alexa/console/ask, так как это место, куда вы будете обращаться каждый раз, когда вам нужно будет работать над проектом Alexa.

Теперь, когда вы подключены, нажмите «Создать навык», как показано на следующем рисунке.

  • Введите название навыка, в нашем случае: камень, ножницы, бумага.
  • Прокрутите вниз под надписью «1. Выберите модель для добавления в свой навык», выберите «на заказ».
  • В разделе «2. Выберите способ размещения серверных ресурсов вашего навыка», выберите «Размещение на Alexa (Python)».
  • Нажмите «создать навык».
  • Выберите «Начать с нуля» -> «Продолжить с шаблоном».

Фаза создания может занять около минуты или около того. После этого вы получите вот такую ​​панель инструментов:

Привет, мир!

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

Оказывается, прежде чем иметь дело с каким-либо намерением, первое взаимодействие пользователя с навыком запускает специальный запрос с именем LaunchRequest. Итак, давайте начнем с обработки этого в первую очередь. Для этого перейдите в верхнее меню и выберите «Код».

В файле «lambda_funtion.py» перейдите к «классу LaunchRequestHandler» и измените сообщение «speak_output» на « Добро пожаловать в лучшую игру «Камень, ножницы, бумага»». Затем нажмите «Развернуть». (предыдущее изображение)

Проверка навыка

Чтобы сделать нашу жизнь еще проще, Alexa Skills Kit предоставляет нам интерфейс Testing. Это означает, что вы можете проверить свои навыки, фактически не владея устройством Alexa. Взаимодействие может осуществляться с помощью текста или голоса (удерживая значок микрофона на следующем рисунке).

Итак, после завершения фазы развертывания перейдите в раздел «Тест» (верхнее меню) и включите тестовый режим, изменив «Выкл.» на « Развитие».

Чтобы активировать навык, произнесите или напечатайте «открой камень, ножницы, бумагу»:

Бинго!

Попробуйте персонализировать переменную speak_ output, чтобы получать более приветливые ответы 😎.

⚠️ Если у вас есть устройство Alexa, подключенное к той же учетной записи Amazon, которую вы использовали для развития навыка, эта последняя будет доступна на вашем устройстве. Просто вызовите его, сказав: «Алекса, открой камень, ножницы для бумаги».

Сборка (или интерфейс)

Большой. Вы только что создали свой навык Hello world. А теперь давайте создадим что-нибудь реальное, потому что, как бы вы ни ценили свое мастерство, в глубине души вы знаете, что мало что сделали, не так ли?

Но да, это действительно первый шаг, так что я не буду с вами строг, поздравляю 🎉🎉

В этом разделе мы создадим новое намерение, которое будет вызываться пользователями, когда они захотят сыграть в RPS-игру. Представьте, что вы играете в RPS, как бы выглядел игровой процесс? Если подумать, первое, что нужно сделать, — это адаптировать LaunchRequest для запроса ввода пользователя.

Итак, вернитесь к своему коду и измените speak_output примерно так:

Теперь нам нужно намерение, которое может получить ответ на этот вопрос.

Слоты

Давайте на мгновение остановимся и подумаем, какими были бы ответы пользователей. Если мы играем в голосовую версию RPS и настала ваша очередь, как бы вы играли?

Если вы спросите меня, я бы просто сказал камень, бумага или ножницы. Или я бы выбрал что-то вроде:

  • Выберите камень
  • я выбираю бумагу
  • я иду за ножницами

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

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

Теперь вернитесь к интерфейсу Build. В меню справа нажмите «Типы слотов», «Добавить тип слота», дайте ему имя и нажмите «Далее». ».

Добавьте значения ячеек «камень», «бумага» и «ножницы». Затем сохраните модель.

Намерения

Мы десятилетиями говорили о намерениях, теперь пришло время их создать. Таким образом, в разделе Build в меню слева выберите «Модель взаимодействия», «Намерения», затем « Добавить намерение».

Дайте своему намерению имя, скажем, «answerIntent», затем нажмите «Создать собственное намерение».

Добавьте несколько высказываний, например, примеры того, как пользователи будут вызывать это намерение:

⚠️ Обратите внимание, что в наших примерах мы использовали созданный ранее слот.

Прокрутите вниз до раздела «слоты намерений», затем выберите тип слота как «rpschoice», а затем нажмите «диалоговое окно редактирования».

Включите параметр заполнения слота «Требуется ли этот слот для выполнения намерения?».

Добавьте «речевую подсказку» и несколько «высказываний пользователя», как показано на этом рисунке.

Затем нажмите «сохранить модель», а затем «создать модель».

Код (или Back-end)

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

Перейдите к файлу lambda_function.py и создайте класс answerIntentHandler, как показано на рисунке ниже:

⚠️ Обратите внимание, что между LaunchRequest Handler, который мы видели ранее, и answerInetntHandler, с которым мы имеем дело, есть два основных изменения: выходное сообщение и средство проверки намерений. : is_intent_name.

Затем в конец файла lambda_function.py добавьте следующую строку:

Нажмите «Развернуть», вернитесь в раздел «Тест» и снова вызовите навык, сказав «открой камень, ножницы, бумага».

После приветственного сообщения вы можете попробовать начать игру, выбрав «Камень», «Ножницы, бумага», как показано на соседнем изображении. Теперь Alexa распознает его, когда пользователь выбирает свой ответ.

⚠️ Обратите внимание, что фразы «Я выбираю бумагу» не было в высказываниях, здесь вступает в действие магия глубокого обучения. Вам просто нужно предоставить несколько образцов, после чего модель может основываться на их и обобщить.

Один дополнительный шаг

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

Нам нужно, чтобы Alexa случайным образом выбирала камень, бумагу или ножницы в самом начале (в LaunchRequest). Затем, когда пользователь выбирает ответ, Alexa сравнивает эти два результата и выводит выигрышное сообщение. Полный код находится на GitHub, и он говорит сам за себя. Тем не менее, поскольку я добрый человек 😇, я покажу вам несколько фрагментов кода:

  1. Начните со случайного выбора и сохраните его в атрибуте сеанса (переменная, к которой вы можете получить доступ и использовать во время каждого сеанса).

2. Добавьте файл logic.py (щелкнув правой кнопкой мыши имя файла lambda_ function.py и выбрав создать файл). В этом файле создайте функцию для определения победителя между пользователем и Alexa.

3. В файле lambda_function.py импортируйте предыдущую функцию, затем добавьте answerIntentHandler следующим образом:

СДЕЛАННЫЙ! Сохраните, разверните, а затем перейдите к интерфейсу Test, чтобы оценить свои навыки 🎉

⚠️ Обратите внимание, что в окончательном коде [здесь] я удалил некоторые готовые намерения (HelloWorld) и изменил вывод некоторых других (Help, CancelOrStop и Fallback). ).

Следующий пост посвящен добавлению Alexa Presentation Language (APL) к нашим навыкам. Другими словами, мы предоставим визуальное представление устройствам Alexa с экраном. Увидимся там.

Больше контента на plainenglish.io