Разработка приватных навыков для Алисы. О чём не учат в Школе Алисы

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

    список работ на трёх листах А4
    Так выглядит список задач по уборке однокомнатной квартиры.

    Я активный пользователь Яндекс.Станции, поэтому решил запихнуть этот огромный список в Алису, чтобы во время генеральной уборки спрашивать у «девчонки в коробчонке», что делать дальше. Варианты названия для навыка крутились вокруг слов прораб и дворецкий. Давно мечтал о доме с дворецким, поэтому остановился на названии «Мой Дворецкий» и активационной фразе: «Алиса, спроси у моего дворецкого, что делать дальше».

    Школа Алисы — важно вовремя остановиться


    У меня были смутные представления о разработке навыков для голосовых помощников, поэтому первым делом открыл документацию платформы Яндекс.Диалоги и просмотрел все видео в плейлисте Школа Алисы на youtube-канале Яндекс Диалоги. Когда смотрел, делал пометки в блокноте, и не заметил, как за деревьями перестал видеть лес.

    Школа Алисы учит делать навык, который помогает пользователю при неправильном ответе, различает синонимы и другие формы слов; который в приветственной фразе объясняет пользователю, как работать с навыком, причём приветственная фраза заканчивается вопросом, который провоцирует ответ и направляет диалог с пользователем в нужное русло и т.д. Советы кажутся убедительными, хочется учесть абсолютно всё, задумываешься о словоформах, интентах, библиотеках для морфологического анализа языка и т.д. За этим всем сложно сохранить фокус на проблеме, ради решения которой задумывался навык.

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

    Целевая аудитория — никто кроме меня


    Я задумался, а кто будет пользоваться навыком? Где-то читал, что по статистике подавляющим большинством приложений в сторах пользуется только разработчик и его друзья. У меня нет друзей с Яндекс.Станцией, поэтому единственным пользователем приложения буду я. Конечно, я могу нагаллюционировать, как опубликую навык в каталоге навыков Алисы, как все жители нашей страны начнут этим пользоваться, как выиграю премию Алисы, как начну международную экспансию и переведу навык на другие языки и опубликую в других сторах, журнал TIME опубликует моё фото на обложке и т.д. Щёлк. Статистика вещь упрямая, поэтому я делаю навык для себя. Давайте разберёмся, что это меняет в отношении к некоторым советам из Школы Алисы.

    Приветственная фраза и справка не нужны


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

    Во вторых, с большой вероятностью я не буду пользоваться командами справка/что ты умеешь. Я разработчик навыка, и я знаю, как это работает. Реализация справки — пустая трата времени. Но если это доставляет удовольствие, то можно реализовать. Я не увидел для себя удовольствие в реализации команды справки.

    Обработку естественного языка (NLP) лучше отложить


    В сценарии, Мой Дворецкий распознаёт подтверждение и отрицание пользователя, а с этой задачей отлично справляются встроенные интенты платформы Яндекс.Диалоги YANDEX.CONFIRM и YANDEX.REJECT, но первую версию навыка я сделал проще. Система сравнивала команду пользователя со строкой да/нет, но уже через несколько дней эксплуатации я заменил это на интенты. Появились идеи, которые я записал, но не тороплюсь реализовывать, ведь навык итак решает мою проблему.

    Голосовой интерфейс для редактирования списка можно заменить на хардкод
    Я представлял себе, как зачитываю Алисе длинный список задач, который затем сохраняется в Яндекс.Облако. Придумал голосовой интерфейс, для вставки новой задачи в середину списка:
    — Добавь <помой входную дверь> после <пропылесось коврик в прихожей>.
    — Добавил <помой входную дверь> в список задач под номером 34.
    Вроде здорово, но, вспомнив о целевой аудитории, я отложил эту затею. Я настолько профдеформирован, что мне удобнее вести список задач в системе контроля версий. Скорее всего я буду очень редко редактировать этот список, а если и буду, то очень быстро подправлю исходники и задеплою изменения в Яндекс.Облако одной командой. Реализация голосового интерфейса для редактирования списка задач займёт намного больше времени.
    just_ai на заметку, хочется готовый экран для работы со списком(добавление в начало\конец\середину, удаление) в голосовых помощниках

    Через пару дней эксплуатации навыка я понял, что в захардкоженном списке стоит использовать TTS-разметку вместо текста. Это исправит ударение и интонацию в некоторых фразах. Кажется, что при редактировании списка задач голосом, не удастся добиться правильного произношения этих фраз Алисой до тех пор, пока Алиса не усовершенствуется. Я могу смириться с произношением, поэтому не тороплюсь переделывать текст на TTS-разметку в своём списке задач.

    Итог. Школа Алисы учит делать правильно, но помните о целевой аудитории навыка.

    Благодарности


    Благодарю всех, кто разрабатывает гаджеты с голосовыми интерфейсами, кто развивает голосовые интерфейсы, инструменты для разработки голосовых помощников и обучающие материалы. Вы улучшаете качество жизни людей, вроде меня, а ещё снимаете лишнюю нагрузку от экранов с миллионов глаз.

    Отдельно благодарю создателей и спикеров Школы Алисы за отличную подборку материалов. Ваши советы были лаконичными и полезными для меня. Без вас я бы не сделал дворецкого, который помогает мне с уборкой. Я написал этот пост потому, что посчитал важным дополнить материалы Школы Алисы советами для разработчиков приватных навыков. Надеюсь это поможет кому-нибудь сэкономить время и энергию.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 7

      +2
      Денис, спасибо за фидбек! По поводу экрана: мы скоро откроем для публики новый продвинутый инструмент для разработки навыков и других AI-решений с разговорным интерфейсом, в которых как раз можно будет реализовать работу со списками и разные нестандартные кейсы. В т.ч. на Kotlin.
        0

        Круто. Если бы еще Алису на Desktop поставить можно было бы, чтобы поиграться и поразвивать на каком-нибудь скриптовом языке… А то как-то по доброй воле ставить Yandex Browser (как я себе вижу — идейный последователь браузера Амиго от Mail.ru...) ради общения с Алисой… Несколько чересчур

          0
          Яндекс Браузер ставить не обязательно, навык можно тестировать в личном кабинете платформы Яндекс.Диалоги yandex.ru/dev/dialogs/alice/doc/test-docpage
          Есть station.aimylogic.com
          Можно поиграться со скриптовыми языками: Python, Javascript, PHP, Go — на выбор.
            0
            Есть station.aimylogic.com

            в firefox не работает
          0
          Прикольная штука. И ведь не сильно сложно, особенно если еще и репозиторий глянуть )) почему репозиторий не прикладываете?

          От статьи двоякое ощущение: что я вынес полезного? Какая проблема решена? Вовлечен ли я?

          Записал несколько мыслей, как я бы это выразил:
          1. типа есть проблема — кажется что надо делать навыки Алисы прямо вот детальными с беседой по заполнению списка и справкой, а если вы делаете MVP или для себя, то нет, не надо.

          2. Вот мой пример: список что-кого сделать при уборке, закоммитил список, сделал сценарий беседы по списку — легко? вполне. вы хотите такое? да? отлично, вот мой репо смотрите как сделал я.

          3. В application основная логика, константы (что за UC-1?? хз), переменные, (лес if-else конечно убивает, надо переписать ;)

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

          5. сейчас модная тема — чеклисты, в инстаграмме чеклисты на всё — от правильной покраски бровей до подбора дома. если у вас бизнес по рекомендациям — типа помощь при покупке и подборе авто — вот вам навык Алисы для подбора — 10 пунктов, которые необходимо проверить в авто и итог, конечно, если все-таки сомневаетесь, звоните нам. И реализовать это — ну, прям два вечера и полторашка (поправьте меня если я ошибаюсь :))

          6. Тем более что протестировать работу навыка вашим пользователям тоже вполне доступно — необязательно, сразу покупать Яндекс Станцию, можно и в Яндекс Браузере или установить Алису на смартфон или в песочнице сервиса.
          0
          Огромное спасибо за развернутый комментарий!

          Не прикладываю репозиторий потому, что считаю наличие репозитория ошибкой, если бы я начал всё сначала, то использовал бы конструктор диалогов вместо написания кода. Но в наш цифровой век, ничего скрыть не получится) Вы захотели найти и нашли, поэтому расскажу про UC-1, UC-2 в application)

          UC-1, UC-2 и т.д. это Use Case 1, Use Case 2 и т.д. Обозначения взял из книги Software Requirements,
          Third Edition от Karl Wiegers and Joy Beatty Я на этапе проектирования описал все сценарии использования в таблице docs.google.com/spreadsheets/d/1lZ3Gms6kVfVLNfldUSMWFW42-yUY8f0zmGxsGGVcyaE/edit?usp=sharing, а затем по этим сценариям писал тесты и код, реализовывая то, что записано в сценарии.

          О рефакторинге и какой-либо оптимизации не думал, поэтому так много if-else и получилось. Я конечно буду благодарен, если вы подскажите подходящий паттерн для решения этой задачи, но боюсь в какой-то момент требования к навыку могут изментся настолько, что придётся выкинуть весь код, какой бы хороший он не был и начать заново. Как говорил Фред Брукс, первый код придётся выкинуть, поэтому я не стал тратить время на грамотное планирование кода, мне хотелось поскорее потестировать продукт, понять, подходит это или нет, понять, что стоит поменять в самой концепции навыка и т.д.

          Про списки я имел ввиду, что замечаю интерфейс работы со списками в других навыках, поэтому хотелось иметь простой блок «список» в графических конструкторах диалогов, чтобы перетащил один блок, а дальше всю обработку добавление\ставка\удаление брала на себя платформа и разработчику не приходилось бы писать код.

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

          Я сам тестирую в песочнице навыка, через текст, но потом, когда запускаю на станции, то некоторые слова Алиса не распознаёт, некоторые слова неудачно произносит и приходится либо мириться, либо что-то придумывать, искать замены слов

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое