Русский
Русский
English
Статистика
Реклама

Сущности для платформы Яндекс.Диалоги

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

Я делаю голосовой интерфейс для управления брокерским счётом, уже писал об этом на Хабре Алиса, купи акции Яндекс. В какой-то момент мне понадобилось извлекать из запроса цену в разных валютах. Уверен, я не первый, кто столкнулся такой задачей, поэтому попытался найти готовые интенты или именованные сущности на GitHub, но ничего не нашёл. На носу был хакатон, много разработчиков в одном месте, подумал я, если каждый поделится своими наработками, то сущностей наберётся на целую библиотеку. Так родилась идея для репозитория библиотека сущностей.



Пользовательские сущности в Диалогах


Когда я говорю умной колонке купи одну акцию Яндекс, то речь проходит через внутреннюю магию платформы Яндекс.Диалоги, затем попадает в веб-хук, который я указал в качестве обработчика навыка. Вот что приходит в обработчик:
  "request": {    "command": "купи одну акцию яндекс",    "original_utterance": "купи одну акцию яндекс",    "nlu": {      "tokens": [        "купи",        "1",        "акцию",        "яндекс"      ],      ...      "intents": {        "market.order": {          "slots": {            "amount": {              "type": "YANDEX.NUMBER",              "tokens": {                "start": 1,                "end": 2              },              "value": 1            },            "unit": {              "type": "OperationUnit",              "tokens": {                "start": 2,                "end": 3              },              "value": "share"            },            "figi": {              "type": "EFigi",              "tokens": {                "start": 3,                "end": 4              },              "value": "BBG006L8G4H1"            },            "operation": {              "type": "OperationType",              "tokens": {                "start": 0,                "end": 1              },              "value": "buy"            }          }        }      }    },    ...  },

Обратите внимание на слот figi, в котором содержится идентификатор акции Яндекс, так называемый FIGI (Financial Instrument Global Identifier), необходимый для взаимодействия с API торговой платформы Тинькофф Инвестиции. Тип данных EFigi, это пользовательская сущность, которую я описал в разделе Сущности при создании навыка в платформе Яндекс.Диалоги. Вот фрагмент описания:
entity EFigi:    values:        BBG005DXJS36:            %exact            TCS            %lemma            тиньков(банк)?            тинькоф(банк)?            тинькофф(банк)?            ти си эс (груп)?        BBG006L8G4H1:            %exact            YNDX            %lemma            яндекс            яндекса        BBG004730JJ5:            %exact            MOEX            %lemma            Московская Биржа            Мосбиржа        BBG002B2J5X0:            %exact            KRKNP            %lemma            [Саратовский НПЗ акции привилегированные]            [Саратовский нефтеперерабатывающий завод акции привилегированные]...

Благодаря механизму сущностей, в коде обработчика мне не нужно делать дополнительных манипуляций над входными данными, чтобы получить FIGI. Платформа Диалогов преобразует название ценной бумаги в FIGI за меня.

Я использую EFigi в качестве нетерминала грамматики и типа слота в интентах. Интенты это такие регулярные выражения на стероидах в Диалогах. Благодаря интентам Диалоги понимают, какие данные нужно извлечь из пользовательского запроса и передать в обработчик. Вот пример интента для команды покупки/продажи ценных бумаг на бирже по рыночной цене:
slots:    operation:        source: $Operation        type: OperationType    figi:        source: $Stock        type: Efigi    amount:        source: $Amount        type: YANDEX.NUMBER    unit:        source: $Unit        type: OperationUnitroot:    $Operation [$Amount $Unit $Stock]$Operation:    $OperationType$Amount:    $YANDEX.NUMBER$Unit:    $OperationUnit$Stock:    $EFigi

Это похоже на регулярные выражения.

Библиотека сущностей для Диалогов


Во время хакатона по разработке навыков для Алисы я создал репозиторий alice-entities-library, запушил туда сущность EFigi и отправился на GitHub искать репозитории, в которых есть описание пользовательских сущностей. Ожидал, что найду сотни репозиториев, свяжусь с разработчиками и предложу прислать пул-реквесты в библиотеку сущностей.

Репозитории искал по тегам: yandex-dialogs, alice-skills, yandex-alice и alice-sdk. Оказалось, мало кто использует теги на GitHub, мне удалось найти всего один репозиторий, содержащий файл с описанием сущности ELang. По стечению обстоятельств автором репозитория оказался Давид один из организаторов хакатона. Я предложил Давиду добавить сущность ELang в библиотеку и через несколько минут получил от него пул-реквест.

Другие участники онлайн-хакатона проигнорировали мои сообщения в чате с предложением пополнить библиотеку сущностей. Возможно, в разгар борьбы было не до этого. По правде говоря, я немного расстроился, но в конце добавил ссылку на репозиторий в sameoldmadness/awesome-alice.

Вместо заключения


Уважаемые разработчики навыков для Алисы, прошу вас по возможности выкладывать исходный код на GitHub, чтобы другие могли учиться.

Пожалуйста, добавляйте теги yandex-dialogs, alice-skills и yandex-alice к репозиториям, чтобы другие могли находить ваши навыки на GitHub.

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

Прежде чем описывать новую сущность, загляните в библиотеку сущностей, возможно, там уже есть то, что вам нужно. А если нет, то, пожалуйста, добавляйте свои сущности в библиотеку.
Источник: habr.com
К списку статей
Опубликовано: 04.07.2020 16:09:21
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Natural language processing

Open source

Голосовые интерфейсы

Хакатоны

Яндекс api

Яндекс диалоги

Алиса

Категории

Последние комментарии

© 2006-2020, personeltest.ru