Alvaros
.
- Регистрация
- 14.05.16
- Сообщения
- 21.452
- Реакции
- 101
- Репутация
- 204
В прошлую субботу состоялся онлайн-хакатон по разработке навыков Алисы. Жаль, что никто не написал здесь об итогах, любопытно почитать истории победителей. Но раз желающих не нашлось, то поделюсь своей историей.
Я делаю голосовой интерфейс для управления брокерским счётом, уже писал об этом на Хабре —
Пользовательские сущности в Диалогах
Когда я говорю умной колонке «купи одну акцию Яндекс», то речь проходит через внутреннюю магию платформы Яндекс.Диалоги, затем попадает в веб-хук, который я указал в качестве обработчика навыка. Вот что приходит в обработчик:
"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: OperationUnit
root:
$Operation [$Amount $Unit $Stock]
$Operation:
$OperationType
$Amount:
$YANDEX.NUMBER
$Unit:
$OperationUnit
$Stock:
$EFigi
Это похоже на регулярные выражения.
Библиотека сущностей для Диалогов
Во время хакатона по разработке навыков для Алисы я создал репозиторий
Репозитории искал по тегам: yandex-dialogs, alice-skills, yandex-alice и alice-sdk. Оказалось, мало кто использует теги на GitHub, мне удалось найти всего
Другие участники онлайн-хакатона проигнорировали мои сообщения в чате с предложением пополнить библиотеку сущностей. Возможно, в разгар борьбы было не до этого. По правде говоря, я немного расстроился, но в конце добавил ссылку на репозиторий в
Вместо заключения
Уважаемые разработчики навыков для Алисы, прошу вас по возможности выкладывать исходный код на GitHub, чтобы другие могли учиться.
Пожалуйста, добавляйте теги yandex-dialogs, alice-skills и yandex-alice к репозиториям, чтобы другие могли находить ваши навыки на GitHub.
Создайте в своём репозитории директорию entities и поместите туда файлы с описанием сущностей, которые вы написали для навыка, чтобы другие могли переиспользовать вашу работу.
Прежде чем описывать новую сущность, загляните в
Я делаю голосовой интерфейс для управления брокерским счётом, уже писал об этом на Хабре —
You must be registered for see links
. В какой-то момент мне понадобилось извлекать из запроса цену в разных валютах. Уверен, я не первый, кто столкнулся такой задачей, поэтому попытался найти готовые интенты или именованные сущности на 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: OperationUnit
root:
$Operation [$Amount $Unit $Stock]
$Operation:
$OperationType
$Amount:
$YANDEX.NUMBER
$Unit:
$OperationUnit
$Stock:
$EFigi
Это похоже на регулярные выражения.
Библиотека сущностей для Диалогов
Во время хакатона по разработке навыков для Алисы я создал репозиторий
You must be registered for see links
, запушил туда сущность EFigi и отправился на GitHub искать репозитории, в которых есть описание пользовательских сущностей. Ожидал, что найду сотни репозиториев, свяжусь с разработчиками и предложу прислать пул-реквесты в библиотеку сущностей.Репозитории искал по тегам: yandex-dialogs, alice-skills, yandex-alice и alice-sdk. Оказалось, мало кто использует теги на GitHub, мне удалось найти всего
You must be registered for see links
, содержащий файл с описанием сущности ELang. По стечению обстоятельств автором репозитория оказался Давид — один из организаторов хакатона. Я предложил Давиду добавить сущность ELang в библиотеку и через несколько минут получил от него пул-реквест.Другие участники онлайн-хакатона проигнорировали мои сообщения в чате с предложением пополнить библиотеку сущностей. Возможно, в разгар борьбы было не до этого. По правде говоря, я немного расстроился, но в конце добавил ссылку на репозиторий в
You must be registered for see links
.Вместо заключения
Уважаемые разработчики навыков для Алисы, прошу вас по возможности выкладывать исходный код на GitHub, чтобы другие могли учиться.
Пожалуйста, добавляйте теги yandex-dialogs, alice-skills и yandex-alice к репозиториям, чтобы другие могли находить ваши навыки на GitHub.
Создайте в своём репозитории директорию entities и поместите туда файлы с описанием сущностей, которые вы написали для навыка, чтобы другие могли переиспользовать вашу работу.
Прежде чем описывать новую сущность, загляните в
You must be registered for see links
, возможно, там уже есть то, что вам нужно. А если нет, то, пожалуйста, добавляйте свои сущности в библиотеку.



