Yandex.Dialoguesプラットフォームのエンティティ

先週の土曜日に、アリスのスキルを磨くためのオンラインハッカソンが行われました。ここで結果について誰も書いていないのは残念です。受賞者のストーリーを読むのは不思議です。でもボランティアはいなかったので、話をします。



私は証券口座を管理するための音声インターフェースを作成していますそれについてはすでにHabré- Aliceで書いており、Yandexを購入しています。ある時点で、リクエストから異なる通貨で価格を抽出する必要がありました。私はそのような課題に直面した最初の人物ではないので、GitHubで既製のインテントまたは名前付きエンティティを見つけようとしましたが、何も見つかりませんでした。鼻にハッカソンがあり、多くの開発者が1か所にあったと私は思いました。全員がベストプラクティスを共有すれば、エンティティのライブラリ全体が存在すると思います。これは、エンティティライブラリリポジトリのアイデアが生まれた方法です。



ダイアログのカスタムエンティティ



スマートコラムで「1つの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"
            }
          }
        }
      }
    },
    ...
  },


figiTinkoff Investments取引プラットフォームのAPIとやり取りするために必要なYandex株識別子、いわゆるFIGI(Financial Instrument Global Identifier)を含む スロットに注意してください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-entities-libraryリポジトリを作成し、EFigiエンティティをそこにプッシュし、GitHubに移動して、カスタムエンティティの説明があるリポジトリを探しました。私は何百ものリポジトリを見つけ、開発者に連絡し、エンティティライブラリにプルリクエストを送信することを提案することを期待していました。



yandex-dialogs、alice-skills、yandex-alice、alice-sdkのタグでリポジトリを検索しました。 GitHubでタグを使用する人はごくわずかであることがわかりました。ELangエンティティを説明するファイルを含むリポジトリ1つだけ見つけることができました。偶然にも、リポジトリの作者はハッカソンの主催者の一人であるデイビッドであることがわかりました。私はDavidにELangエンティティをライブラリに追加するよう提案し、数分後に彼からプルリクエストを受け取りました。



オンラインハッカソンの他のメンバーは、エンティティライブラリを補充することを提案するチャットメッセージを無視しました。おそらく、闘争の真っ只中に、これのための時間はありませんでした。正直なところ、少しイライラしましたが、最後にsameoldmadness / awesome-aliceにあるリポジトリへのリンクを追加しました



結論の代わりに



Alice Skill Developers様、他のユーザーが学習できるように、可能な限りソースコードをGitHubにアップロードしてください。



他の人がGitHubで自分のスキルを見つけられるように、yandex-dialogs、alice-skills、yandex-aliceタグをリポジトリに追加してください。



リポジトリーにディレクトリーを作成entitiesし、スキル用に作成したエンティティー記述ファイルをそこに配置して、他のユーザーが作業を再利用できるようにします。



新しいエンティティについて説明する前に、エンティティライブラリを見てください。エンティティライブラリにはすでに必要なものが含まれている場合があります。そうでない場合は、エンティティをライブラリに追加してください。



All Articles