Так выглядит список задач по уборке однокомнатной квартиры.
Я активный пользователь Яндекс.Станции, поэтому решил запихнуть этот огромный список в Алису, чтобы во время генеральной уборки спрашивать у «девчонки в коробчонке», что делать дальше. Варианты названия для навыка крутились вокруг слов прораб и дворецкий. Давно мечтал о доме с дворецким, поэтому остановился на названии «Мой Дворецкий» и активационной фразе: «Алиса, спроси у моего дворецкого, что делать дальше».
Школа Алисы — важно вовремя остановиться
У меня были смутные представления о разработке навыков для голосовых помощников, поэтому первым делом открыл документацию платформы Яндекс.Диалоги и просмотрел все видео в плейлисте Школа Алисы на youtube-канале Яндекс Диалоги. Когда смотрел, делал пометки в блокноте, и не заметил, как за деревьями перестал видеть лес.
Школа Алисы учит делать навык, который помогает пользователю при неправильном ответе, различает синонимы и другие формы слов; который в приветственной фразе объясняет пользователю, как работать с навыком, причём приветственная фраза заканчивается вопросом, который провоцирует ответ и направляет диалог с пользователем в нужное русло и т.д. Советы кажутся убедительными, хочется учесть абсолютно всё, задумываешься о словоформах, интентах, библиотеках для морфологического анализа языка и т.д. За этим всем сложно сохранить фокус на проблеме, ради решения которой задумывался навык.
Если вовремя не остановиться, то происходит подмена понятий и хочется сделать просто хороший навык. Не навык, который решит мою задачу самым комфортным для меня способом, а хороший навык, для каких-то людей, которых я не знаю, которым, возможно, это вообще не нужно. В этот момент в сознание разработчика обычно закладывается ловушка, которая в последствие, с большой вероятностью, заставит почувствовать разочарование. Если не понимаете, о каком разочаровании идёт речь, то почитайте комментарии к посту Лучшее время для релиза пет-проекта.
Целевая аудитория — никто кроме меня
Я задумался, а кто будет пользоваться навыком? Где-то читал, что по статистике подавляющим большинством приложений в сторах пользуется только разработчик и его друзья. У меня нет друзей с Яндекс.Станцией, поэтому единственным пользователем приложения буду я. Конечно, я могу нагаллюционировать, как опубликую навык в каталоге навыков Алисы, как все жители нашей страны начнут этим пользоваться, как выиграю премию Алисы, как начну международную экспансию и переведу навык на другие языки и опубликую в других сторах, журнал TIME опубликует моё фото на обложке и т.д. Щёлк. Статистика вещь упрямая, поэтому я делаю навык для себя. Давайте разберёмся, что это меняет в отношении к некоторым советам из Школы Алисы.
Приветственная фраза и справка не нужны
Во первых, я люблю, когда говорят информативно и по делу. Я представляю, как каждый раз при запуске навыка, голосовой помощник приветствует меня и рассказывает, что умеет навык, который я же и сделал. Думаю, это повышает риск поломки моей Яндекс.Станции от удара об стену или падения с шестого этажа.
Во вторых, с большой вероятностью я не буду пользоваться командами справка/что ты умеешь. Я разработчик навыка, и я знаю, как это работает. Реализация справки — пустая трата времени. Но если это доставляет удовольствие, то можно реализовать. Я не увидел для себя удовольствие в реализации команды справки.
Обработку естественного языка (NLP) лучше отложить
В сценарии, Мой Дворецкий распознаёт подтверждение и отрицание пользователя, а с этой задачей отлично справляются встроенные интенты платформы Яндекс.Диалоги
YANDEX.CONFIRM
и YANDEX.REJECT
, но первую версию навыка я сделал проще. Система сравнивала команду пользователя со строкой да/нет, но уже через несколько дней эксплуатации я заменил это на интенты. Появились идеи, которые я записал, но не тороплюсь реализовывать, ведь навык итак решает мою проблему.Голосовой интерфейс для редактирования списка можно заменить на хардкод
Я представлял себе, как зачитываю Алисе длинный список задач, который затем сохраняется в Яндекс.Облако. Придумал голосовой интерфейс, для вставки новой задачи в середину списка:
— Добавь <помой входную дверь> после <пропылесось коврик в прихожей>.
— Добавил <помой входную дверь> в список задач под номером 34.
Вроде здорово, но, вспомнив о целевой аудитории, я отложил эту затею. Я настолько профдеформирован, что мне удобнее вести список задач в системе контроля версий. Скорее всего я буду очень редко редактировать этот список, а если и буду, то очень быстро подправлю исходники и задеплою изменения в Яндекс.Облако одной командой. Реализация голосового интерфейса для редактирования списка задач займёт намного больше времени.
just_ai на заметку, хочется готовый экран для работы со списком(добавление в начало\конец\середину, удаление) в голосовых помощниках
Через пару дней эксплуатации навыка я понял, что в захардкоженном списке стоит использовать TTS-разметку вместо текста. Это исправит ударение и интонацию в некоторых фразах. Кажется, что при редактировании списка задач голосом, не удастся добиться правильного произношения этих фраз Алисой до тех пор, пока Алиса не усовершенствуется. Я могу смириться с произношением, поэтому не тороплюсь переделывать текст на TTS-разметку в своём списке задач.
Итог. Школа Алисы учит делать правильно, но помните о целевой аудитории навыка.
Благодарности
Благодарю всех, кто разрабатывает гаджеты с голосовыми интерфейсами, кто развивает голосовые интерфейсы, инструменты для разработки голосовых помощников и обучающие материалы. Вы улучшаете качество жизни людей, вроде меня, а ещё снимаете лишнюю нагрузку от экранов с миллионов глаз.
Отдельно благодарю создателей и спикеров Школы Алисы за отличную подборку материалов. Ваши советы были лаконичными и полезными для меня. Без вас я бы не сделал дворецкого, который помогает мне с уборкой. Я написал этот пост потому, что посчитал важным дополнить материалы Школы Алисы советами для разработчиков приватных навыков. Надеюсь это поможет кому-нибудь сэкономить время и энергию.
just_ai
Денис, спасибо за фидбек! По поводу экрана: мы скоро откроем для публики новый продвинутый инструмент для разработки навыков и других AI-решений с разговорным интерфейсом, в которых как раз можно будет реализовать работу со списками и разные нестандартные кейсы. В т.ч. на Kotlin.