Yandex.Dialogues平台的实体

上周六举行了一次在线黑客马拉松,以发展爱丽丝的技能。遗憾的是没有人在这里写下结果,很好奇地阅读了获奖者的故事。但是由于没有志愿者,我将分享我的故事。



我正在制作用于管理经纪帐户的语音界面,我已经在Habré- Alice上写过有关购买Yandex股票的文章在某个时候,我需要从请求中提取不同货币的价格。我确定我不是第一个面临此类任务的人,所以我尝试在GitHub上找到现成的意图或命名实体,但是我什么也找不到。我想是一场黑客马拉松,很多开发人员都集中在一个地方,我想,如果每个人都共享他们的最佳实践,那么就会有一个完整的实体库。这就是实体库存储库思想的产生方式。



对话框中的自定义实体



当我在智能专栏上说“购买一份Yandex份额”时,演讲将通过Yandex.Dialogi平台的内在魔力,然后进入Web挂钩,我将其指定为技能处理程序。这是处理程序中的内容:



  "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包含Yandex股票标识符的插槽,即所谓的FIGI(金融工具全局标识符),该标识符需要与Tinkoff Investments交易平台的API进行交互。EFigi数据类型是一个自定义实体,我在Yandex.Dialogi平台上创建技能时在“实体”部分中进行了介绍。这是说明的摘要:



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


这类似于正则表达式。



对话实体库



在为Alice开发技能的黑客马拉松期间,我创建了alice-entities-library存储库,将EFigi实体推送到那里,然后去GitHub寻找具有自定义实体描述的存储库。我希望找到数百个存储库,与开发人员联系并提议将拉取请求发送到实体库。



我通过标签搜索存储库:yandex-dialogs,alice-skills,yandex-alice和alice-sdk。原来,很少有人在GitHub上使用标签,我只能找到一个包含描述ELang实体的文件的存储库。巧合的是,资料库的作者原来是黑客马拉松的组织者之一大卫。我建议大卫将ELang实体添加到库中,并在几分钟后收到他的拉取请求。



在线黑客马拉松的其他成员忽略了我的聊天消息,并提出了补充实体库的建议。也许在斗争中,没有时间这样做了。老实说,我有些沮丧,但是最后我在sameoldmadness / awesome-alice处添加了到存储库的链接



而不是结论



尊敬的Alice Skill Developers,请尽可能将源代码上传到GitHub,以便其他人可以学习。



请将yandex-dialogs,alice-skills和yandex-alice标签添加到仓库中,以便其他人可以在GitHub上找到您的技能。



在存储库中创建一个目录,entities并将为该技能编写的实体描述文件放在此处,以便其他人可以重用您的工作。



在描述新实体之前,请查看实体库,那里可能已经有您需要的东西。如果没有,那么请将您的实体添加到库中。



All Articles