Возможности Alexa и идея проекта

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

В Украине наиболее популярны Siri от Apple и Google Assistant от Google благодаря возможности их интеграции в смартфоны. Компании хотят интегрировать этих ассистентов не только в смартфоны, но и сделать центром всей экосистемы устройств.

Яркий пример — Alexa от Amazon с возможностью управления умным домом.

Alexa не ограничена интеграцией только в девайсы Amazon, сторонние компании могут также встраивать её в свои продукты. В Украине Alexa пока не получила популярности, главным образом из-за ограниченного количества доступных языков: их у нее только три. Тем не менее в Provectus Alexa прижилась: наш COO Ник Антонов привез из Штатов смарт-колонки Echo Dot от Amazon для каждой конференц-комнаты.

Так мы оценили отличие отдельно стоящего голосового помощника от такого же, но встроенного в телефон. Главное преимущество ассистента вроде Alexa — наличие микрофона и хорошего вывода звука. Даже если у вас активированы функции «Привет, Siri» или «Ok, Google» на телефоне, удобным их использование не назовешь. Вам все равно нужно брать телефон в руки и подносить устройство ближе для вывода звуковых команд. Наличие в амазоновских колонках чувствительных микрофонов позволяет общаться с ассистентом, как с обычным человеком, даже находясь к нему спиной или в другом конце комнаты. Колонка также обладает более громким и качественным звучанием, чем телефон.

Мы убедились, что голосовые помощники — это удобно и интересно. Но, вдоволь наигравшись с голосовым включением и выключением света, мы захотели от голосового ассистента чего-то большего, чтобы раскрыть его потенциал на все 100%. В этом и заключается проблема: придумать действительно полезное применение технологий распознавания голоса и вывода звука.

Получение информации в аудиоформате стремительно набирает обороты: большинство новых книг выходят сразу в этом формате, множество обучающих лекций необязательно смотреть, а можно слушать, а подкасты снова переживают бум популярности и могут стать такими же популярными, как каналы на YouTube (Spotify has bought two podcast startups and it wants to buy more).

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

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

Одна из проблем, которую нам предстояло решить, — это хоть немного научить Alexa русскому языку, чтобы ею могли пользоваться не только носители английского языка. Задача следующая: Alexa говорит вам слово на русском, а вы даете перевод на английском. Так и родилась идея проекта под названием Alexis, основная цель которого — помочь пользователю в изучении английского языка, расширяя его словарный запас и тренируя произношение.

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

Техническая реализация

Дано:

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

На схеме видно, что нам пришлось изрядно потрудиться. Причины тому следующие:

  1. Современный UI в виде single page application.
  2. Для back-end в качестве языка программирования был выбран Java.
  3. Все общение между сервисами строится через REST-запросы.
  4. Отдельный сервис, который преобразует введенный пользователем текст в аудиоформат.
  5. Сохранение MP3-файлов в Amazon S3.
  6. Alexa Developer Kit, разработка скилов под Alexa.
  7. AWS Lambda, serverless-функция: в качестве языка был использован JavaScript (для формирования ответов пользователю колонки и получения данных с нашего back-end).

В качестве фреймворка для написания back-end был использован Spring Framework, и приложение представляло собой Spring Boot Application с поддержкой Spring Security, Spring MVC и Spring REST Docs. Выбор фреймворка был обусловлен тем, что Spring Boot позволяет легко создавать полноценные Spring-приложения производственного класса, про которые можно сказать «просто запусти», а еще это — отличный пункт для включения в резюме стажера.

В качестве движка для Text2Speech мы решили использовать библиотеку MaryTTS. Ее основное преимущество — бесплатность.
Для реализации UI-части была выбрана React-библиотека из-за ее простоты и огромной популярности. По этой же причине мы выбрали Redux-контейнер для работы с данными.

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

Чтобы облегчить работу по верстке, мы использовали библиотеку компонентов Ant Design, а для написания тестов — Jest-фреймворк. Несмотря на огромное количество новых подходов и технологий, ребята справились с задачей и показали отличный результат.
Главная же сложность заключалась в реализации Alexa Skill, так как для всех это была terra incognita. Тем не менее стажеры удачно справились и с этой непростой задачей, которая потребовала многих часов изучения AWS-технологий.

В итоге в Alexis удалось реализовать следующие голосовые команды:

Voice command to start Alexis Skill:

«Alexa, open English space» — запуск Alexis Skill. После этого мы можем приконнектить Alexis к Alexa и запустить тест, используя команды ниже.

Voice command to activate Alexis:

«Activate <Alexis Password>» — активация Alexis и коннект приложения к девайсу с Alexa.

Voice commands to launch quiz:

«Start exam» — запускает тест для выбранной группы по умолчанию.

«Start <word group name> exam» — запускает тест для конкретной группы.

«Start all groups exam» — запускает тесты для всех групп.

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

Voice commands to answer quiz:

«This is <answer>» or «It’s <answer>»

Voice command to stop quiz:

«Stop»

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

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

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

Команда

Перед нами как менторами проекта Alexis стояла задача отобрать стажеров, которые имеют необходимую квалификацию, заинтересованы в обучении и достаточно мотивированы, чтобы выпустить релиз (а это примерно четыре месяца). Желающих попасть на программу было очень много, поэтому на первом этапе мы давали всем тестовое задание по специализации и уже на основании выполненного задания приглашали ребят на собеседование с профильными менторами (front-end, back-end и QA).

Среди тех, кто приходил к нам, были ребята, которые уже могут пробовать себя на позиции Junior, и у них вряд ли была бы мотивация завершить проект. Были и те, кто откровенно слабоват. При отборе на проект для нас также был важен уровень владения английским языком.

Стажеры приходят к нам за опытом, максимально приближенным к тому, что можно получить на реальном проекте. Поэтому мы всегда закладываем возможные риски ухода стажеров (вплоть до 50% по профилю). Причины могут быть разные: понял, что «не мое», устроился на работу и т. д. Поэтому мы набирали стажеров с запасом.

В итоге сформировали такую команду:

  • Front-end: Виктория Глущенко и Михаил Мединский. Ментор — Юлия Соболь.
  • Back-end: Николай Михайлюк, Александр Бондаренко и Дарья Пиндус. Ментор — Павел Коптилин.
  • QA: Елена Коваленко, Евгений Сидоренко и Оксана Мошак. Менторы — Мария Бабичева и Максим Кузенко.

Радует, что все, кроме одного стажера, дошли до конца, притом что вся работа команды проходила удаленно с периодическими встречами (1-2 раза в месяц) в офисе, а у части ребят была основная работа.

Процесс разработки

Мы с коллегами впервые выступали не в качестве исполнителей, а в роли тимлидов. Поэтому за технической реализацией нас ожидал не менее интересный процесс разработки. Последний был согласован и описан в документации еще до набора стажеров в команду.
В документе содержались необходимая терминология, описания процесса разработки, процесса тестирования, порядка работы с таск-менеджером Jira и тест-трекером Zephyr, каналов коммуникации и прочее. Мы описали Epics и декомпозировали их на User Stories.

Мы решили использовать гибкие методологии, основанные на Agile-фреймворке, — Scrum. Спринт две недели, каждый день Daily Scrum Meeting со статусом каждого члена команды, в середине спринта — демо от разработчиков, в конце спринта — демо от QA-команды и готовый функционал. После спринта — Retrospective, а в новом спринте — Planning. Оценивать User Story решили в Story Points и ввели практику Planning Poker.

В теории звучит красиво, но на практике получилось иначе:

  1. Запустили нулевой спринт как время для знакомства и настройки окружения. Менторы проводили демо по профильным направлениям и готовили стажеров «ко вступлению во взрослую жизнь». Идея себя оправдала.
  2. Первый Planning провели как тимбилдинг на крыше офиса с пиццей, где показали ребятам, что такое Planning Poker! Нашей ошибкой было желание совместить приятное с полезным: формальную часть планирования и тимбилдинг.
  3. Scrum и ограничения по времени. Команда не смогла уложиться в первый спринт, поэтому решили удлинить его (в порядке исключения, конечно же).
  4. Во время первого спринта мы столкнулись со стандартным отсутствием коммуникации в удаленной команде. Back-end не шел на продуктивный контакт с front-end, и это, естественно, влияло на весь процесс.
  5. Время для Daily Scrum Meetings не всем подходило.
  6. При этих условиях в самом начале мы потеряли одного разработчика.

Начали разбираться с погрешностями

Первое, что мы сделали как менторы, — провели голосование и все же утвердили Daily Scrum Meetings с максимальной посещаемостью.
Далее мы отказались от Planning Poker и стали использовать планирование, основанное на интуиции. Такой подход описывал еще Хенрик Книберг в книге «Scrum и XP: заметки с передовой». На планингах мы все вместе обсуждали приоритетные сторис и ориентировались на собственные ощущения: осилим ли до конца спринта.

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

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

Итоги

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

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

По материалам DOU.