код алисы на python

Содержание

Алиса управляет компьютером-3 (Python)

Содержание

Вступление

В данной статье мы создадим виртуальный пульт для управления действиями ПК, которому будут доступны:

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

Мы используем в примере такие инструменты:

Установка и настройка Python

Нам потребуется скачать и установить среду разработки Python.

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

Регистрируемся и собираем пульт в Blynk

Регистрация в Blynk подробно описана здесь.

Добавляем в проект нужное количество кнопок (Button). Оформляем и подписываем по вкусу:

Настраиваем скрипт (вариант для ленивых)

Загружаем архив с файлами и распаковываем его в папку C:\blynk_2_0*. Если всё верно, в папке окажутся 7 файлов:

Настраиваем виртуальные пины

Таким образом Вы можете заполнить данные для всех 50 виртуальных пинов.

После всех изменений нужно сохранить файл config.py и запустить скрипт пакетным файлом запуска.

Настраиваем скрипт (вариант для дотошных)

Загружаем скрипт blynk.py, открываем любым текстовым редактором (мне по вкусу Sublime Text, но подойдёт и встроенный Блокнот) и видим:

Несмотря на страшный вид, все просто. Вместо ВАШ_ТОКЕН_Blynk вставляем токен, полученный при создании проекта:

Теперь настроим пины.

Настраиваем виртуальные пины

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

в любое место выше этого комментария:

Разберём работу блока:

В скрипте используется библиотека PyAutoGui, которая умеет не только обрабатывать виртуальное нажатие клавиш, но и:

Подробнее можно узнать в документации к библиотеке.

Проверяем работу скрипта и кнопок

И снова Алиса, и снова Кузя

Итак, у нас уже работает удалённое управление, осталось познакомить виртуальные пины Blynk с Алисой. Как это сделать, рассказано здесь.

Для перфекционистов

И всех тех, кому мешает окно командной строки 😉

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

Послесловие

Скрипт является простейшим примером использования Умного дома Яндекса в управлении вашим компьютером. На его основе можно и нужно экспериментировать дальше) В статье приведены лишь наиболее необходимые методы (например, горячие клавиши, которые можно использовать для AIMP или другого ПО, и NirCmd, которая может управлять звуком, или даже открывать cd-rom и пугать домашних, если таковой еще имеется =)

Источник

Создание stateful навыка для Алисы на serverless функциях Яндекс.Облака и Питоне

Начнём с новостей. Вчера Яндекс.Облако анонсировало запуск сервиса бессерверных вычислений Yandex Cloud Functions. Это значит: ты пишешь только код своего сервиса (например, веб-приложения или чатбота), а Облако само создаёт и обслуживает виртуальные машины, где он запускается, и даже реплицирует их, если возрастает нагрузка. Думать вообще не надо, очень удобно. И плата идёт только за время вычислений.

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

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

Моральная подготовка

Для нетерпеливых: необходимые зависимости я собираю make-файлом перед загрузкой функции в облако, состояние диалога храню в яндексовском Object Storage (оно поддерживает API S3), а для управления диалогом использую собственную библиотеку tgalice. В итоге получается такой демо-навык. А теперь разберём всё это чуть детальнее.

Для чуть менее нетерпеливых: прежде чем погружаться в мою историю про сложности, я очень рекомендую начать с простого. А именно, создать однофайловую функцию-эхобота, зарегистрировать и потестить её в консоли разработчика Диалогов; подробности — в блоге Диалогов и документации Облака. И только потом уже приступать.

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

Алиса: Привет! Вы находитесь в навыке «Айтишный гороскоп». Скажите «Старт», чтобы узнать, что сулят вам звёзды.
Юзер: Старт
А: Пожалуйста, назовите своё имя
Ю: Васисуалий
А: Теперь скажите мне год вашего рождения. Только четыре цифры, ничего лишнего.
Ю: второй
А: Пожалуйста, попробуйте ещё раз. Назовите год вашего рождения — четыре цифры.
Ю: 2002
А: Замечательно! Теперь назовите месяц вашего рождения.
Ю: Феврарь
А: Отлично! Наконец, назовите мне дату вашего рождения — только число, всего одна или две цифры.
Ю: 18
А: Спасибо, Васисуалий! Теперь мы знаем: вам 17 лет, и вы Водолей. Вот это вам, конечно, повезло! Звёзды говорят вам: а что говорят звёзды, вы узнаете, запустив навык.

Проблема в том, что для поддержания даже такого простого диалога нужно помнить имя и дату рождения пользователя, а в среде бессерверных функций это нетривиально. Хранить контекст в оперативной памяти или файликом на диске не получится, т.к. Яндекс.Облако может запустить функцию на нескольких виртуальных машинах одновременно и переключаться между ними произвольным образом. Придётся воспользоваться каким-то внешним хранилищем. Выбрано было Object Storage, как довольно недорогое и несложное хранилище прямо в Яндекс.Облаке (т.е. наверное быстрое). В качестве бесплатной альтернативы можно попробовать, например, халявный кусочек облачной Монги где-то далеко. И для Object Storage (он поддерживает интерфейс S3), и для Mongo существуют удобные питоновские обёртки.

Другая проблема — что для хождения и в Object Storage, и в MongoDB, и в любую другую базу или хранилище данных, нужны какие-то внешние зависимости, которые нужно залить на Yandex Functions вместе с кодом своей функции. И хотелось бы делать это удобно. Совсем удобно (типа как на heroku), увы, не получится, но какой-то базовый комфорт можно создать, написав скрипт для сборки окружения (make-файл).

Как запустить навык-гороскоп

При ручном создании функции все параметры заполняются аналогично.

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

Что там под капотом

Работу по разбору этого конфига и вычислению финального результата берёт на себя питонячий класс

Точнее, базовый класс FormFillingDialogManager занимается заполнением «формы», а метод дочернего класса handle_completed_form говорит, что делать, когда она готова.

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

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

Если хочется более серьёзного NLU, можно прикрутить к своему навыку Rasa или DeepPavlov, но для их настройки потребуются дополнительные пляски с бубном, особенно на serverless. Если совсем не хочется кодить, стоит воспользоваться визуальным конструктором типа Aimylogic. Создавая tgalice, я думал о каком-то промежуточном пути. Посмотрим, что из этого получится.

Ну а нынче вступайте в чат разработчиков алисьих навыков, читайте документацию, и создавайте замечательные навыки!

Источник

Все мы не в своем уме. Как сделать новый навык для «Алисы» на Python

Содержание статьи

Как вообще работают навыки? Если говорить простыми словами, то «Алиса» и твой сервер будут обмениваться файлами в формате JSON, где будет содержаться необходимая информация. Причем на сервер придет не просто распознанный текст, но уже подготовленный для обработки запрос. Ты можешь выбрать любой удобный язык программирования — нужна только возможность создавать на нем веб-сервер. Мы выберем Python как один из самых простых и популярных.

Чтобы все примеры исходного кода, приведенные в статье, успешно запускались, тебе понадобится установить:

Первый навык — эхо-бот

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

Для начала основные термины:

Как будет работать наш навык? На наш сервер поступает request, мы будем получать из него содержимое в виде текста, а затем отправлять response, где в качестве содержимого укажем текст запроса. Переходим к коду!

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

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

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

Вроде бы все? Теперь нужно проверить, работает наш пример или мы где-то ошиблись. Но как протестировать?

Тестирование навыков

Существует несколько способов тестирования навыков. Один из самых простых — с помощью утилиты alice-nearby, которую можно запускать локально на своем компьютере. О том, как ее установить, написано достаточно подробно, так что не буду заострять на этом внимание. Итак, начинаем тестирование.

Запускаем наше приложение.

Отображение в IDLE

Приложение для тестирования

Поздравляю, твой первый навык работает! Обрати внимание: справа отображаются запрос и ответ в JSON. Но на самом деле авторы этой утилиты не придумывали интерфейс самостоятельно. Они просто сделали локальную версию приложения для тестирования навыков на основе тестового стенда в личном кабинете «Яндекс.Диалоги».

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

Откроется страница с настройками. Их много, сконцентрируемся на основных.

Основные настройки

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

Тестирование на «Я.Диалогах»

Хотелось бы не только писать, но и проверить, как бы все это звучало, если бы наши ответы зачитывала «Алиса». Это можно будет сделать, если наш навык пройдет модерацию… Он вряд ли ее пройдет, но не надо отчаиваться! Существует целых два решения.

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

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


Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Источник

Все мы не в своем уме. Как сделать новый навык для «Алисы» на Python

Содержание статьи

По примеру американских коллег из Apple, Amazon, Google и Microsoft в «Яндексе» в 2017 году сделали своего голосового ассистента, который понимает русский язык и пользуется неплохой популярностью в России. Одна из причин успеха — это возможность создания своих навыков, то есть собственных приложений. О том, как научить «Алису» новым вещам, используя Python и веб-фреймворк Flask, мы и поговорим в этой статье.

Как вообще работают навыки? Если говорить простыми словами, то «Алиса» и твой сервер будут обмениваться файлами в формате JSON, где будет содержаться необходимая информация. Причем на сервер придет не просто распознанный текст, но уже подготовленный для обработки запрос. Ты можешь выбрать любой удобный язык программирования — нужна только возможность создавать на нем веб-сервер. Мы выберем Python как один из самых простых и популярных.

Чтобы все примеры исходного кода, приведенные в статье, успешно запускались, тебе понадобится установить:

Первый навык — эхо-бот

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

Для начала основные термины:

Как будет работать наш навык? На наш сервер поступает request, мы будем получать из него содержимое в виде текста, а затем отправлять response, где в качестве содержимого укажем текст запроса. Переходим к коду!

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

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

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

Вроде бы все? Теперь нужно проверить, работает наш пример или мы где-то ошиблись. Но как протестировать?

Тестирование навыков

Существует несколько способов тестирования навыков. Один из самых простых — с помощью утилиты alice-nearby, которую можно запускать локально на своем компьютере. О том, как ее установить, написано достаточно подробно, так что не буду заострять на этом внимание. Итак, начинаем тестирование.

Поздравляю, твой первый навык работает! Обрати внимание: справа отображаются запрос и ответ в JSON. Но на самом деле авторы этой утилиты не придумывали интерфейс самостоятельно. Они просто сделали локальную версию приложения для тестирования навыков на основе тестового стенда в личном кабинете «Яндекс.Диалоги».

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

Откроется страница с настройками. Их много, сконцентрируемся на основных.

Основные настройки

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

Тестирование на «Я.Диалогах»

Хотелось бы не только писать, но и проверить, как бы все это звучало, если бы наши ответы зачитывала «Алиса». Это можно будет сделать, если наш навык пройдет модерацию… Он вряд ли ее пройдет, но не надо отчаиваться! Существует целых два решения.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Источник

Создание stateful навыка для Алисы на serverless функциях Яндекс.Облака и Питоне

Категории

Свежие записи

Наши услуги

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

Моральная подготовка

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

Алиса: Привет! Вы находитесь в навыке «Айтишный гороскоп». Скажите «Старт», чтобы узнать, что сулят вам звёзды.
Юзер: Старт
А: Пожалуйста, назовите своё имя
Ю: Васисуалий
А: Теперь скажите мне год вашего рождения. Только четыре цифры, ничего лишнего.
Ю: второй
А: Пожалуйста, попробуйте ещё раз. Назовите год вашего рождения — четыре цифры.
Ю: 2002
А: Замечательно! Теперь назовите месяц вашего рождения.
Ю: Феврарь
А: Отлично! Наконец, назовите мне дату вашего рождения — только число, всего одна или две цифры.
Ю: 18
А: Спасибо, Васисуалий! Теперь мы знаем: вам 17 лет, и вы Водолей. Вот это вам, конечно, повезло! Звёзды говорят вам: а что говорят звёзды, вы узнаете, запустив навык.

Проблема в том, что для поддержания даже такого простого диалога нужно помнить имя и дату рождения пользователя, а в среде бессерверных функций это нетривиально. Хранить контекст в оперативной памяти или файликом на диске не получится, т.к. Яндекс.Облако может запустить функцию на нескольких виртуальных машинах одновременно и переключаться между ними произвольным образом. Придётся воспользоваться каким-то внешним хранилищем. Выбрано было Object Storage, как довольно недорогое и несложное хранилище прямо в Яндекс.Облаке (т.е. наверное быстрое). В качестве бесплатной альтернативы можно попробовать, например, халявный кусочек облачной Монги где-то далеко. И для Object Storage (он поддерживает интерфейс S3), и для Mongo существуют удобные питоновские обёртки.

Другая проблема — что для хождения и в Object Storage, и в MongoDB, и в любую другую базу или хранилище данных, нужны какие-то внешние зависимости, которые нужно залить на Yandex Functions вместе с кодом своей функции. И хотелось бы делать это удобно. Совсем удобно (типа как на heroku), увы, не получится, но какой-то базовый комфорт можно создать, написав скрипт для сборки окружения (make-файл).

Как запустить навык-гороскоп

При ручном создании функции все параметры заполняются аналогично.

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

Что там под капотом

Работу по разбору этого конфига и вычислению финального результата берёт на себя питонячий класс

Точнее, базовый класс FormFillingDialogManager занимается заполнением «формы», а метод дочернего класса handle_completed_form говорит, что делать, когда она готова.

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

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

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Источник

Большой информационный справочник
Adblock
detector