Рубрики
Без рубрики

Как построить и отлаживать навык Alexa с функциями Python и Azure

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

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

Это заставило меня думать о том, как я мог взять основание мой последний пост При генерировании презентации PowerPoint от последних обновлений Azure RSS Feed и используйте его для создания способа, чтобы люди слышали эти обновления через голосовой помощник.

Помощники большинства людей будут знакомы, являются Amazon Alexa, Google Assistant и Siri Apple. Для этого поста я собираюсь выбрать Alexa Assistant Assistant и создаю навык, который позволяет пользователям Alexa услышать последние новости Azure.

Большинство образцов кода в документации Alexa просто используют AWS Lambda Serverless Backends, но для моего поста я собираюсь заменить лямбда с ее эквивалентом в функциях Azure – Azure. Мы будем использовать Python, чтобы построить наши навыки.

Примечание: Я решил пойти с реализацией голых костей на Azure, но если вы хотите построить более сложный пользовательский опыт, который стоит смотреть на Сервис Azure Bot и SDK а потом Подключение полученного бота в Алекса Отказ Преимущество этого маршрута заключается в том, что вы можете построить свою логику бота и поток один раз, а затем опубликовать несколько каналов.

TL; DR … Покажите мне код!

Может быть, вы ищете полный выборки навыка «не-лямбда» в Python и изо всех сил пытаетесь найти что-либо в официальных документах или репозиториях. Если все, что вы хотите, это код из этого блога, вы можете Найти это на Github Отказ

Хотите знать, как все это все работать? Читать дальше!

До реквизиты

Если вы хотите построить свой собственный навык Alexa, похожий на The One в этом посте, это то, что вам нужно:

Начиная

После того, как у вас есть все предварительные реквизиты, находящиеся, вы можете начать с создания новых функций AZURE на основе Python Azure в Visual Studio Code с использованием Официальный Microsoft QuickStart как руководство. Вам нужен триггер HTTP (который использует QuickStart) и должен установить аутентификацию для метода «анонимным».

Если вы запустите функцию Azure локально, вы увидите, что URL, опубликованный в формате, аналогично:

http://localhost:7071/api/YourFunctionName

На данный момент мы готовы добавить код для поддержки нашего навыка Alexa.

Добавьте Alexa Python SDK на нашу функцию Azure

Нам нужно сначала добавить SDK, что Amazon публикует для разработчиков, желающих построить Alexa Backends, используя Python.

Если вы посмотрите в проект Azure Functions, вы увидите файл «требований. Atxt». Откройте этот файл в Visual Studio Code и добавьте нужные нам необходимые элементы Alexa SDK, наряду с парой других библиотек, которые нам нужно будет завершить нашу реализацию. После завершения ваш файл должен выглядеть как фрагмент ниже.

azure-functions
beautifulsoup4
requests
ask-sdk-core
ask-sdk-webservice-support

Как только вы сделали эти изменения, и поэтому у вас есть все библиотеки локально для целей разработки, вы можете запустить эту команду в терминале в Visual Studio Code:

pip install -f requirements.txt

Примечание: Я обнаружил, что библиотека Alexa WebServices имеет зависимость от версии библиотеки криптографической библиотеки, которая, кажется, чтобы столкнуться с версиями, необходимыми для некоторых библиотек Python Azure SDK, таких как хранение Azure. В этом образце это не проблема, но один, чтобы следить за. Пип будет жаловаться при попытке установить пакет, так что вы узнаете, если вы ударите его!

Теперь у нас есть необходимые компоненты локально для нашей среды развития, нам нужно настроить наши навыки Alexa через консоль разработчиков Alexa. У меня был быстрый взгляд на Алекса Кли (Спросите), но он снова появляется только привязанным к средам на основе лямбда, чтобы воспользоваться нам здесь, и нам нужно будет использовать консоль.

Настроить наши навыки Alexa

Когда пользователь призывает ваш навык, запрос направляется на ALEXA ALEXA ALEXA, которая выполняет действие голоса к тексту, а затем пересылает текст на реализацию Backend навыков.

Для того, чтобы Alexa узнать о вашем навыке и ее реализации, вы должны настроить его через Alexa Developer Console Отказ

Давайте идти вперед и сделаем это сейчас.

Сначала нам нужно определить навык, модель взаимодействия для использования и как будет реализован навык. Я позвонил в мой навык “Читайте новости azure cloud” (вы отметилируете консольную подсказку на используемя бренда – если я хотел опубликовать этот навык, мне нужно будет показать, что у меня есть право использовать бренд Azure, но для этого демо работает отлично). Я построю пользовательскую модель взаимодействия и использую свой собственный хостинг (два других параметра даст вам лямбда, принимающие решения).

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

Давайте давайте определим имя вызова навыков.

Это то, что пользователи скажут после того, как они просыпаются Alexa, поэтому для моего навыка я хочу, чтобы пользовательское взаимодействие было «Алекса», спросите услугу Azure Cloud News для последних новостей ».

В консоли разработчиков Разверните раздел «Завершение» и выберите «Название вызова навыков» и введите свой текст. Нажмите «Сохранить модель» вверху.

У нас есть еще один шаг, прежде чем мы сможем вернуться к Visual Studio Code и сократить некоторый код!

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

Чтобы помочь понять, что такое намерение, рассмотрите пользовательское взаимодействие «Алекса», спросите услугу Azure Cloud News для последних новостей ». В этом взаимодействии наше намерение происходит из заявления «Последние новости».

В консоли разработчики Разверните раздел «Intents» и нажмите кнопку «+ Add Ament». Мы собираемся создать намерение чтения последних пяти лучших новостей. Дайте ему намеренное имя и нажмите «Создать пользовательский намерение».

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

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

Если модель Alexa соответствует командам голоса или текста для высказывания, то она выберет намерение и отправить его до вашей реализации Backend. Обратите внимание, что эти совпадения не просто 1: 1 матч – эти высказывания помогают приучить модель распознавания голоса к тексту, которая соответствует более чем просто образцам, которые вы предоставляете!

Хорошо, теперь мы готовы реализовать первые части нашей Alexa Skill Backend в нашей функции Azure.

Обращение с Alexa Intents в вашей функции Azure

Есть несколько способов, которыми вы можете реализовать навык Alexa в Python, но для этого поста я использую классы Python, где каждый класс будет использоваться для обработки единого намерения.

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

Для нашего навыка мы загружаем Azure обновленные RSS Feed и вернитесь в лучшие пять заголовков для Alexa, чтобы прочитать.

Вы можете встроить Язык разметки речевого синтеза (SSML) фрагменты в тексте, чтобы контролировать, как Alexa читает текст.

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

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

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

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

Тестирование вашего мастерства

Наш код теперь достаточно заполнен, чтобы он будет управлять простыми взаимодействиями. Прежде чем мы сможем проверить, используя консоль разработчиков Alexa, нам нужно сделать несколько вещей:

  • Опубликовать нашу местную функцию Azure через Ngrok Proxy (Помните, что мы установили расширение в VS-коде). Используйте порт 7071, который по умолчанию функции Azure Core Tools будут использовать. Свободный уровень для Ngrok должен достаточно.
  • Скопируйте адрес прокси-сервера Ngrok в наш буфер обмена.
  • Зайдите в консоль разработчиков Alexa для наших навыков и выберите раздел конечной точки.
  • Переключите конечную точку из arambda arn в https, а затем поместите в адрес прокси-сервера Ngrok и наша функция Azure относительно относительного пути (/API/YourFableNeNameName).
  • Восстановите модель Алекса.

Видео ниже показывает вам эти шаги. Обратите внимание, что видео не имеет аудио.

Как только мы сделали вышеупомянутые шаги, мы теперь можем переключиться на вкладку Test в наших навыках в консоли Developer Alexa и проверьте наш навык. Вот образец того, как он работает.

Обратите внимание, что если вы остаетесь в точке останова в Visual Studio Studio Code для слишком долго, сервис Alexa автоматически отправится в тайм-классу и предоставляет пользователю сообщение по умолчанию, не способным выполнить запрос.

Переезд на производство

Если вы идете и посмотрите на репозиторий GitHub, вы увидите, что есть Github Действия Рабочий процесс который был создан центром развертывания функций Azure в Azure после того, как этот репозиторий был выбран в качестве источника. Обновления, толкаемые на репозиторий, автоматически создаются и развернуты.

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

В этот момент мы можем обновить нашу конечную точку навыков в консоли разработчиков Alexa, чтобы указать на нашей развернутой функции Azure URL, восстановить модель, и мы тогда называем наш навык производства!

Если вы хотите запустить сервис, вам все равно нужно пройти через проверку распределения с Amazon. В моем примере они вряд ли будут утверждать мое использование Microsoft Brand «Azure», поэтому я должен был изменить это, но, кроме того, наши навыки в значительной степени полны!

Бонусные баллы – намерение с слотом

Прямо сейчас у нас есть полнофункциональный, если базовый, умение Alexa, питаемое функциями Azure. Если вы хотите увидеть, как мы можем продлить полезность сервиса, читайте!

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

В консоли Alexa добавьте новое намерение под названием «ReaditMesfromdate».

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

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

В нашем случае мы будем использовать заранее определенный тип « Amazon.date ». В качестве кончика обязательно понять, как эти слоты могут интерпретировать. Например, любую дату, которая не указывает в год, всегда считается будущей датой … что на самом деле не полезно, если мы просим прошедших новостей !!!

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

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

Большая вещь с типом слота мы используем, это навычный пользователь может сказать что-то вроде «Лучшие новости от прошлого вторника», и Alexa выяснит это и просто отправит вам дату в формате ISO-8601 (YYYY-MM-DD ). Вы даже можете пройти даты обратно в Alexa в формате ISO-8601, и Alexa полностью высказывает их пользователю.

Упаковка

Whaw! В этом посте много, но я так надеюсь, что вы нашли это полезным, и он сэкономит вам некоторое время – даже просто имея полную образец не-лямбда, чтобы помочь понять, как Webservice Hosted Alexa навыки висят вместе.

В качестве последней мысли, даже если я использовал Azure Functions в качестве варианта хостинга, я могу легко контестрировать это решение, а затем развернуть его где я могу запустить контейнер , что означает, что я могу доставить очень доступную услугу Alexa, которая является облачным агностическим без какого-либо кода или хостинга времени выполнения!

До следующего раза, счастливые дни! 😎

Оригинал: “https://dev.to/simonwaight/how-to-build-and-debug-an-alexa-skill-with-python-and-azure-functions-ke0”