Привет, Хабр! В прошлом году мы в Just AI провели курс по разговорному ИИ и диалоговым системам в Академии больших данных MADE от VK. Обучали студентов инструментам NLU (Natural Language Understanding, понимание естественного языка), дизайну разговорных интерфейсов, разработке навыков, глубокому обучению в диалоговых системах, речевым технологиям и другому. В конце ребята делали итоговые проекты — функции (голосовые приложения) для голосового ассистента Маруси. Мы выбрали несколько самых интересных идей, чтобы рассказать о них вам.
Вожди и Князи
Владимир Зенин написал игру «Вожди и Князи», в которой вы как заправский правитель должны принимать решения, от которых зависит выживание и благополучие вашего племени.
«Если наполнить интерфейс голосового бота многочисленными функциями, то можно легко запутаться, а управление станет слишком громоздким. Поэтому я максимально упростил геймплей и свёл его к бесконечному ряду событий, в которых вы можете только согласиться или отказаться от чего-то.
На каждом шаге отображается результат выбора и новое событие. В игре есть четыре времени года, в каждом может произойти четыре события. Финала нет, игра продолжается, пока вы настроены играть. А играбельность расширяется за счёт того, что на каждое время года и каждое событие есть несколько вариантов текстов.
Я разработал MVP игры за несколько часов: развернул Python-бекенд на Heroku, фронт — на JAICP, но в данном случае это разделение весьма условное. JAICP предоставляет интеграцию с мессенджерами и голосовыми ассистентами. Эта функция стала определяющей для моего проекта, вместе с возможностью API-вызовов из JS кода. Я вынес игровую логику на отдельный сервер Heroku, поэтому она может легко использовать библиотеки, интегрироваться с БД и т.п.
На тестирование и улучшения ушло несколько дней, хотя некоторые мелочи ещё хочется доработать. Тестовые сценарии описываются как обычный XML, это сильно экономит время при ручном тестировании после внесения изменений. А ещё отлаживать игру помогла встроенная в JAICP аналитика: можно посмотреть записи диалогов и выявить неучтённые сценарии.
В первой версии игры я использовал системную сущность pymorphy.name из CAILA, помогающую опознавать имена пользователей. «Но из логов стало понятно, что многие предпочитают называть себя Князем Васей или Принцессой Таней. Поэтому пришлось отключить эту сущность и записывать имя так, как пользователь себя назвал. Для предотвращения неприятных ситуаций я добавил интент с матерными словами, который блокирует запись имени. Описывать эти слова самому необязательно — в CAILA есть соответствующая сущность. Вообще советую авторам функций для голосовых помощников внимательно выбирать названия, потому что и Маруся, и Алиса не всегда понимают название моей игры «Вожди и Князи». Это не самые частые слова в языке».
Голосовой помощник по поиску недвижимости
Эту функцию написал наш выпускник Павел Пихтин.
«Моя программа сканирует объявления о продаже недвижимости и может пересказывать всё их содержимое. А чтобы вы могли посмотреть фотографии, можно сохранить понравившиеся объявления в избранное и потом открыть их на экране.
Пока что в приложении есть поиск только одно- и двухкомнатных квартир на станциях Кольцевой ветки московского метро с фильтрацией по минимальной и максимальной цене. Для получения информации из поискового запроса пользователя я реализовал слот-филлинг с помощью NLU-сервиса CAILA. После обработки критериев поиска становится доступна навигация по найденным объявлениям и возможность уточнять информацию через команды «Описание», «Метро», «Цена», «Адрес», «Площадь», «Информация», «Добавь / Удали из избранного». Я реализовал их через ключевые слова, то есть команды можно комбинировать с другими словами и общаться с голосовым помощником привычными фразами, например, «повтори описание» или «сколько идти до метро?».
Разработка навыка заняла у меня несколько вечеров. Сначала отпарсил найденные объявления о продаже недвижимости и организовал доступ к ним через хостинг API на Heroku. Продумал ТЗ, составил счастливые и альтернативные пути развития диалога. Затем на платформе JAICP я написал сам проект и тесты. Развернул программу в каналах Маруся и Телеграмм, код проекта сейчас доступен на Github. У Маруси хорошая документация, и служба поддержки работает быстро, поэтому у меня ушло намного меньше времени на написание бота, создание интентов и написание тестов, чем я предполагал».
Квиз по вымышленным Вселенным
Другой проект был посвящён мирам Толкиена и Роулинг. Артём Акопян написал квиз, в котором нужно ответить, к какой вселенной относится тот или иной персонаж или место, взятые из произведений.
«Неделю я размышлял о том, какую идею мне хотелось бы реализовать. И ещё три дня после работы писал код. С платформой JAICP оказалось удобно работать, особенно понравилось, как реализована интеграция с API и хранение данных между сессиями».
Футбольный голосовой ассистент
Ещё один наш выпускник, Станислав Волков написал голосовую программу, которая сообщает спортивную статистику футбольных турниров.
«Вы можете прослушать турнирную таблицу чемпионата, список лучших бомбардиров, последние результаты и игры ближайшего тура. Ещё хочу добавить интересные факты, футбольную историю и прогнозы.
Разработка прототипа заняла у меня одну-две недели по два-три часа вечером после работы. Хотя чтобы написать полноценное голосовое приложение, которое не стыдно опубликовать, на мой взгляд, надо раз в 10 больше времени. Но я и не представлял, что процесс разработки ассистентов может быть таким гибким и комфортным. Очень приятный и интуитивно понятный интерфейс JAICP с большим количеством реализованных штук с хорошей документацией».
Если вы тоже хотите попробовать себя в разработке навыков для Маруси, рекомендуем обратить внимание на FAQ по созданию голосовых приложений от VK.