Привет, дорогой друг! Знаешь ли ты, какой цвет получится, если смешать фиолетовый и бирюзовый? Многие не знают, включая нас, до разработки навыка «Миксер Красок».
С чего все началось?
Первое — это осознание, что ближайшее будущее за голосовым управлением. Все больше и больше техники оснащается голосовым управлением. Тут мы познакомились с Алисой и ее возможностями поглубже. Оценили ее потенциал и удобный подход для написания навыков для нее.
Второе — поиск проблемы. Далеко искать не пришлось, мы заметили периодичность определенного события у большинства детей, среди знакомых. Детям интересны эксперименты! А смешивание красок тот еще эксперимент. Ведь это маленькое чудо, когда смешиваешь 2 цвета и получаешь совершенно другой! Скорее всего, именно так и мыслят дети от 3х лет, которые при рисовании часто смешивают краски с целью инициализации этой маленькой магии.
Ознакомительная часть
Весь путь ознакомления, тестирования и «Hello World» занял всего один вечер. Спасибо тут Яндексу, за удобный и интуитивно понятный интерфейс взаимодействия. Так как владеем навыками Python и Node.js, то для нас путь был еще легче.
В качестве среды разработки остановились на Node.js. На нем не мало высоконагружаемых проектов было реализовано нами. Так сказать, знаем много входов и выходов, которые удовлетворяют наши ожидания.
Разработка 👨💻
Итак, с Node.js определились. Однако, у нас должна быть определенная база данных. База всех возможных цветов, база вопросов и ответов, включая все сопутствующие признаки и атрибуты. Сначала, мы собрали все эти данные в JSON файл, с целью развернуть в какую-то СУБД в будущем. Однако, увидев в конечном итоге, что вся нужная база занимает не более 15-20кб, решили оставить "базу данных" в исходном формате. Отказались от использования какого-либо СУБД, так как это в лишний раз прибавит несколько миллисекунд на обработку каждого запроса.
При разработке качественного навыка, каждая миллисекунда на счету. Алиса дает серверу на ответ максимум 1.5-3 секунды. Если ответа не будет за это время, Алиса выдаст пользователю «Навык Миксер Красок не отвечает» и закроет навык. Подобное поведение крайне не допустимо и достаточно негативно может сказаться на навыке.
1. Ответы от пользователя
Естественно, мы понимали, что пользователь не всегда будет давать сухой и стандартный ответы, которые будет ожидать программа, а будет отвечать по своему. Например, при вопросе: «Какой цвет получиться при смешивании желтого и синего?», ответ не всегда будет «зеленый». Пользователь может ответить: «это зеленый», «получится зеленый», «зеленый зеленый зеленый» и прочие варианты. Все подобное желательно предусмотреть заранее и написать логику таким образом, чтобы она могла обрабатывать предложение, вычислять коэффициент вероятности того, что хотел сказать пользователь, и далее обработать сценарий наиболее верным образом.
При таком подходе:
- ответ «зеленый» имеет 100% коэффицент;
- ответ «зеленый, зеленый» имеет 99% коэффицент;
- ответ «зеленая» имеет 95% коэффицент;
- ответ «получится зеленый» имеет 70% коэффицент;
Логика обработки изначальна старается найти максимальный коэффицент среди возможных методов у навыка. Если такого нет, то она обрабатывает сценарий по максимально возможному коэффициенту, который указан как минимальный порог соответствия. В нашем случае 70% и более.
В случае, если ответ вовсе не стандартный, пользователю выдается ненавязчивая ошибка, предлагая повторить, переформулировать или выбрать один из возможных ответов. В тоже время, все эти данные собираются в наши логи, для дальнейшей обработки и усовершенствования навыка.
2. Голосовое сопровождение
Мы хотели охватить как можно больше устройств. В устройствах с экранами, навык сопровождается текстом, голосом и иллюстрациями. В устройствах без экрана есть только звук. Как минимум исходя из этого, необходимо достаточно четко настроить озвучку каждого текста на любом этапе. Этого, к сожалению, никак не сделать до публикации навыка. Так как именно после публикации можно вызвать навык с реального устройства. Таким образом, изначально мы опубликовали навык без публичного доступа. Тщательно проработали каждую фразу и ее произношение. И только после этого, рекомендуем публиковать навык в каталоге. Подробнее можете ознакомиться в документации «Как настроить генерацию речи» у Яндекс Диалогов.
3. Логирование и обновление
Для отслеживания и логирования каждого действия, каждого ответа и качества ответа мы написали собственный бякэнд, который собирает все диалоги и дает нам возможность наглядно понимать что происходит во время игры. Подобного публичного метода нет у Яндекса, однако, это очень важно, так как любого рода статистика, фидбек и прочие данные крайне важны для усовершенствования навыка.
Таким образом, в течении недели мы практически 24 часа мониторили навык, исправляли, изменяли и дописывали его, для максимально комфортного взаимодействия с ним.
4. Заключение разработки
Разработка самой логики заняло пару вечеров. Еще несколько вечеров на тестирование среди друзей. Теперь можно отправить навык на публикацию в каталоге. Изначально, сервер развернули в собственной сети на Raspberry Pi. Отличный вариант, когда все под рукой. Однако, после публикации, перевели на сторонний сервер с высоким uptime и лучшим железом.
Публикация и победа 🚀
Следующей стадией, после тщательной проверки, была публикация навыка в каталоге Яндекс Алисы. Особого трафика не наблюдали от каталога, так и не поняв каким образом формируется ранжирование на главной странице. А чтобы найти навык, надо поискать что-то похожее. Однако, это не помешало распространить навык среди знакомых и так сказать начать некий бета-тест. Практически всем он понравился. Выявляя новые недочеты, оперативно фиксили их. После всего этого, решили подать заявку на «Премию Алисы», буквально за неделю до завершения раунда. Проходит примерно 10 дней и с нами связывается представитель от Яндекса!
Далее определенные процедуры, согласно условиям конкурса и вуаля! Мы выиграли Премию Алисы за сентябрь 2019! 🥰 Это была наша маленькая победа, которая сильно мотивировала и дала понять, что двигались мы в нужном направлении. Ведь это наш первый навык и он получил «одобрение» от Яндекса! На этом все, дорогой читатель.
Запустить игру можно голосовой командой из Яндекса:
- «Поиграем в Миксер Красок»
- «Запусти навык Миксер Красок»
Вот так выглядит наш путь в голосовые приложения для Яндекс Алисы. Как и везде, любой путь начинает с маленьких шагов!
Подписывайся, скоро будет новая статья о новом, очень интересном навыке, который уже разработан и опубликован в каталоге!
Текст: Давид Петросян
Команда: Perfecto Web