IT-инфраструктура для бизнеса и творчества

Dev Preview Яндекс.Диалогов: новые возможности и новый формат

Привет! Меня зовут Павел Капля, я руковожу сервисом Яндекс.Диалоги, это платформа для создания голосовых приложений для Алисы. Мы подготовили большой пакет обновлений в формате Dev Preview для разработчиков голосовых приложений. А именно:

  • Добавили статистику пользователей навыка на основе данных AppMetrica;
  • Интегрировали технические метрики, позволяющие отслеживать стабильность работы навыка;
  • Внедрили инструмент для работы с интентами;Добавили сохранение контекста сессии в Алисе;
  • Также добавили контекст пользователя в Алисе;Внесли изменения в протоколе.

Статистика пользователей навыка

Сегодня измерять метрики мобильных приложений — стандартная практика, поэтому нашей первоочередной задачей было создать похожие инструменты и для навыков. Ведь навыки — это такие же приложения, только голосовые. У Яндекса есть инструмент для аналитики мобильных приложений — AppMetrica. Команда Диалогов развила это решение, благодаря чему теперь можно смотреть подробную статистику навыков. Для этого нужно зарегистрировать навык в AppMetrica и указать ключ в консоли разработчика. Это позволит узнать, как пользователи взаимодействуют с навыком. Можно увидеть количество сессий и агрегированные данные о пользователях (пол, возраст и город), а также применить retention-анализ и когортный анализ без сложных дополнительных настроек.

Технические метрики качества навыка

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

Подключать тут ничего дополнительно не нужно: всё уже работает в настройках навыка. Напомним лишь, что из-за частых или долгих неответов мы можем снять навык с публикации. Поэтому рекомендуем подписаться на сервисные уведомления. А если хотите узнавать об обновлениях сервиса, подпишитесь на новости сервиса или на наш блог.

Инструмент для работы с интентами

Интент — это намерение пользователя. Инструмент для работы с интентами в Диалогах позволяет быстро и просто собрать воедино все маркеры, позволяющие понять интент. Например, описать множество фраз с похожим смыслом или сущности, важные для понимания запроса. Мы постарались сделать инструмент максимально удобным и разработали механизм, похожий на язык регулярных выражений. Фразы-составляющие такие регулярных выражений можно переиспользовать и комбинировать. Кроме того, настройки грамматики нечувствительны к морфологии, а значит, вам достаточно ввести только один вариант слова — а все формы будут учтены автоматически. Например, при вводе слова «кухня» будут учитываться «кухни», «кухню», «кухне» и т.д. Инструмент позволяет обрабатывать интенты, гибко учитывая последовательность слов в запросе пользователя, или не учитывая ее вовсе.

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

Сохранение контекста сессии в Алисе

Когда люди общаются друг с другом, они запоминают контекст. Посмотрите на диалог: — Переведи на английский слово «отель». — Hotel. — А на испанский? — El hotel. Собеседник не уточняет, какое слово перевести на испанский: он помнит, что это «отель». Иногда контекст необходим. Например, если вы играете в города, вам обязательно нужно помнить ответы игроков (чтобы не повторяться) и последнюю букву названия последнего города (ваш ответ должен начинаться на неё). Если мы захотим повторить такой сценарий в формате голосового приложения, навыку понадобится помнить контекст: слово для перевода, последнее название города — или даже все названия. Чтобы сохранить контекст диалога, просто верните его вместе с ответом навыка, а Алиса пришлёт его вместе со следующим запросом пользователя.

Подробнее о том, как настраивать ответы о состоянии сессии, читайте в нашей документации.

Сохранение контекста пользователя в Алисе

Мы добавили в Алисе пользовательский контекст, или состояние пользователя. Это хранилище взаимодействий пользователей с навыком, которое станет приходить в запросе. Контекст будет общим для всех устройств, где человек авторизовался в Яндексе. Это обеспечит единый и полный опыт вне зависимости от устройства. Теперь можно сделать так, чтобы пользователь обратился к навыку через приложение Яндекса на телефоне (например, по пути с работы) и бесшовно продолжил взаимодействие через Яндекс.Станцию (приехав домой).

Изменения в протоколе

Эти изменения запускаются уже не в рамках Dev Preview. Мы продолжаем поддерживать старую версию протокола для обратной совместимости, однако просим не использовать её в новых разработках. Теперь при ответе навыка поле session больше не требуется, минимальный валидный ответ выглядит так:

В протокол добавляется новое поле — session.application. Оно содержит поле application_id с тем же самым значением, что и в использовавшемся ранее поле session.user_id— идентификатор приложения, из которого сделан запрос. Идентификатор разный для разных устройств и приложений пользователя.

Если пользователь авторизован в Яндексе, то в запросе также придёт поле session.user, в нём содержится поле user_id— идентификатор, постоянный для всех приложений и устройств пользователя. Благодаря ему можно предложить пользователям сквозной опыт при переходе от поверхности к поверхности.

Если для навыка настроена авторизация OAuth и пользователь связал аккаунты, то, помимо стандартного заголовка Authorization, авторизационный токен придёт в поле session.user.access_token. Это нововведение позволяет хостить навыки с авторизацией в сервисах лямбда-функций, которые не поддерживают проброс заголовков запроса.

Статус Dev Preview означает, что эти возможности уже доступны в Яндекс.Диалогах для всех. Наша команда учтет обратную связь разработчиков, чтобы доработать новые инструменты и подготовить их к полномасштабному релизу.

#алиса #яндексдиалоги #яндекс #голосовые_приложения #разработка

{ "author_name": "Павел Капля", "author_type": "self", "tags": ["\u044f\u043d\u0434\u0435\u043a\u0441\u0434\u0438\u0430\u043b\u043e\u0433\u0438","\u044f\u043d\u0434\u0435\u043a\u0441","\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430","\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0435_\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f","\u0430\u043b\u0438\u0441\u0430"], "comments": 0, "likes": 3, "favorites": 3, "is_advertisement": false, "subsite_label": "dev", "id": 121751, "is_wide": true, "is_ugc": true, "date": "Tue, 21 Apr 2020 10:31:16 +0300", "is_special": false }
(function () { let cdnUrl = `https://specialsf378ef5-a.akamaihd.net/SelectelBranding/images/` let previousArticleNumber = null let currentArticleNumber = 0 let platform = 'Desktop' let articles = [ { name: 'camera', url: `${cdnUrl}CameraCat`, text: 'умную камеру для\u00A0наблюдения за\u00A0котиками', link: 'https://vc.ru/selectel/306690', num: 3 }, { name: 'chill', url: `${cdnUrl}ChillCat`, text: 'трекер, который подскажет, когда пора отдохнуть', link: 'https://vc.ru/promo/288561-eye-tracker', num: 1 }, { name: 'cloud', url: `${cdnUrl}CloudCat`, text: 'котика: даёшь ему «пять», а\u00A0он делает бэкап в облако', link: 'https://vc.ru/dev/294799-maneki-neko', num: 2 } ] let buttonCycle = document.querySelector('.button--cycle') let buttonChoose = document.querySelector('.button--choose') let buttonMobile = document.querySelector('.button--mobile') let textField = document.querySelector('.selectel-footer-subtitle') let imageAgent = document.querySelector('.image--agent') let banner = document.querySelector('.selectel-footer') buttonCycle.addEventListener('click', cycleClick) buttonChoose.addEventListener('click', () => sendEvent(`Promo ${articles[currentArticleNumber].num} Left`, 'Click')) buttonMobile.addEventListener('click', () => sendEvent(`Promo ${articles[currentArticleNumber].num} Left`, 'Click')) let media = window.matchMedia("(max-width: 570px)") media.addEventListener('change', matchMedia) function matchMedia() { if (media.matches) { platform = 'Mobile' } else { platform = 'Desktop' } update() } matchMedia() function cycleClick(event) { sendEvent(`Promo ${articles[currentArticleNumber].num} Right`, 'Click') if (event) { event.preventDefault() event.stopPropagation() } window.open('https://vc.ru/tag/selectelDIY', '_blank') //cycle(event) } function cycle(event) { // incrementArticleNumber() textField.innerHTML = generatedText() imageAgent.src = articles[currentArticleNumber].url + platform + '.svg?3' imageAgent.setAttribute("class", "") imageAgent.classList.add('image--agent', articles[currentArticleNumber].name) banner.href = articles[currentArticleNumber].link } function update() { banner.href = articles[currentArticleNumber].link imageAgent.src = articles[currentArticleNumber].url + platform + '.svg' textField.innerHTML = generatedText() } function incrementArticleNumber() { previousArticleNumber = currentArticleNumber if (currentArticleNumber >= articles.length - 1) { currentArticleNumber = 0 } else { currentArticleNumber++ } } const sendEvent = (label, action = 'Click') => { const value = `SelectelDIY — loc: Footer — ${label} — ${action}`; if (window.dataLayer !== undefined) { window.dataLayer.push({ event: 'data_event', data_description: value, }); } }; function generatedText() { let defaultText if (platform === 'Desktop') { defaultText = `Мы тут собрали %text%. Хотите научим?` } else { defaultText = `Мы тут собрали %text%.` } return defaultText.replace('%text%', articles[currentArticleNumber].text) } function getRandom(min, max) { min = Math.ceil(min) max = Math.floor(max) return Math.floor(Math.random() * (max - min + 1)) + min } (function create() { currentArticleNumber = getRandom(0, articles.length - 1) cycle() let page = document.querySelector('.page--entry') if (page) { function insertAfter() { let parents = page.querySelectorAll('[data-id="7"]') let referenceNode = parents[0] referenceNode.parentNode.insertBefore(banner, referenceNode.nextSibling); loaded() } setTimeout(() => insertAfter(), 0) } }()) function loaded() { banner.classList.add('loaded') } loadImages([ `${cdnUrl}CameraCatDesktop.svg`, `${cdnUrl}ChillCatDesktop.svg`, `${cdnUrl}CloudCatDesktop.svg`, `${cdnUrl}CameraCatMobile.svg`, `${cdnUrl}ChillCatMobile.svg`, `${cdnUrl}CloudCatMobile.svg?3`, ]) function loadImages(urls) { return Promise.all(urls.map(function (url) { return new Promise(function (resolve) { var img = document.createElement('img'); img.onload = resolve; img.onerror = resolve; img.src = url; }); })); } }())
0
0 комментариев
Популярные
По порядку
Читать все 0 комментариев
Сооснователь «Кухни на районе» Олег Козырев покинул компанию Статьи редакции

Но сохранил долю в бизнесе.

Шпаргалка для инвестора: сделки РЕПО

Рассказываем об одном из важнейших инструментов рынка ценных бумаг — сделках РЕПО.

Робот повысил конверсию продаж в B2B

В изменчивой реальности (для которой даже придумали специальной термин «VUCA-мир») компании ищут свои точки опоры. Важно не просто следовать трендам, но и предугадывать их. Особенно когда клиентское поведение и бизнес-процессы трансформируются так стремительно.

Как не попасть в карьерную ловушку тимлида: личный опыт

Кажется, что тимлиду просто некуда расти: дальше надо либо идти в менеджмент, либо наоборот, становиться узконаправленным разработчиком. По просьбе «Лаборатории Касперского» Евгений Мацюк, который прошел в компании неординарный путь, рассказал о своих карьерных развилках во время и после тимлидства, а также поделился опытом горизонтального роста.

ПСБ запустил личный кабинет для предпринимателей. Там можно следить онлайн за каждым своим терминалом

Сервис предоставляется бесплатно.

Дизайн-джем #42: мифы и легенды о русалках, японские рассказы, космические приключения и азы точных наук

В красочном дайджесте, посвящённом детским книжным иллюстрациям, от Futura by red_mad_robot.

Travers – поиск инструкторов по активным видам спорта

Мы сделали второе приложение, раскатили сервис на всю Россию и изменили бизнес-модель. Многое благодаря пользователям vc.ru!

Почему «без ТЗ результат ХЗ». Разбираем на примере CRM-систем

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

Пример нотации согласовательного уровня Библиотека примеров BPMN
Курс доллара упал ниже 70 рублей впервые с лета 2020 года после повышения ключевой ставки Статьи редакции

Евро подешевел до 81,3 рубля впервые за год.

Исследование: сотрудники хотели бы иметь комнату отдыха, бесплатный сок, а работодатели уже готовы покупать ЗОЖ-снеки

Онлайн-сервис доставки продуктов и товаров СберМаркет и исследовательское агентство Research Me спросили сотрудников, как они хотели бы питаться в офисе и что в нем видеть. В опросе приняли участие более 1500 работающих людей по всей России. Сервис также спросил работодателей – В2В-клиентов СберМаркета: что они покупают в офис, что точно никогда…

«Сбер» научил свой ИИ-сервис определять возможные признаки рака на ранних стадиях по снимкам лёгких Статьи редакции

Это может помочь врачам при диагностике заболевания.

null