複合エンティティを使用すると、ユーザーの発言中に複数のエンティティ値をキャプチャすることができます。これらの複数のエンティティ値はオプションであり、ユーザーの発言の中で任意の順序で使用することができます。
例:自動車販売ボット車の販売に関する問い合わせを考えてみましょう。通常の問い合わせは次のような形式になります。「興味があるのはTesla Model S2018年モデルです」または「赤のTesla 2010年モデルの価格はどのくらいですか」または「Tesla Model Sについて教えてください」などです。ご覧のように、ボットは通常、これらのクエリに応答するためにメーカー、モデル、年型、色などの詳細を組み合わせて処理する必要があります。
これらの複数の値や詳細は、それぞれ異なる独立したエンティティから取得することができます。複合エンティティを使用すると、それぞれ独立したエンティティやサブエンティティを組み合わせることができます。
複合エンティティ パターン は、サブエンティティ間の関係を確立するために使用しなければなりません。サブエンティティは、複合エンティティパターンにおいて@subentity
のように@タグを使用して複合エンティティに含まれます。これらのサブエンティティは事前に定義されている必要があり、現在のダイアログフローの一部であってはなりません。また、サブエンティティは他のダイアログタスクからも使用できます。
AND や OR などのさまざまなパターンを構築することができます。これは、エンティティパターンの定義づけに使用されているのと同じです。 (詳細はこちらを参照)
複合エンティティの値は JSON オブジェクトの形をしており、サブエンティティはそのオブジェクトのプロパティとして参照することができます。これは、使用できるサブエンティティにアクセスするためです。
{{{context.entities.<
各サブエンティティは、複合エンティティから独立して使用された場合にアクセスされるための、定義された構造を使用してアクセスすることができます。たとえば、サブエンティティが空港タイプである場合、空港名には次のようにアクセスできます:{{context.entities.<<composite_entity>>.<<sub_entity>>.AirportName }}
複合エンティティの作成
複合エンティティの構築には、サブエンティティの作成と、サブエンティティ間の関係の確立という以下の手順を実行します。
サブエンティティの作成
複合エンティティは他のエンティティとの組み合わせであるため、ダイアログタスクで個々のエンティティを構築する必要があります。上記の例から車種をキャプチャするには、まず必要な詳細をキャプチャすることのできるサブエンティティを作成する必要があります。車エンティティの、サブエンティティのマッピングサンプルを以下に例示します。
関連エンティティ | エンティティタイプ |
---|---|
メーカー | 項目のリスト:ユーザーの発言から車のブランド名をキャプチャします。開発者は、このリストをエンティティ内に構築しておく必要があります。 |
モデル | 価格リスト:ユーザーの発言から車のモデル名をキャプチャします。 |
製造年 | 数字:ユーザーの発言から製造年をキャプチャします。ボットは自動的に数字を認識します。 |
色 | 色:ユーザーの発言から色をキャプチャします。ボットは自動的に色を認識します。 |
注意:サブエンティティは複合エンティティのみに結合することができ、他の目的には使用できません。現在のダイアログタスクでサブエンティティを作成している場合は、これらのサブエンティティへの遷移をすべて削除して、ダイアログタスクのフローの一部にならないようにしてください。
複合エンティティの定義
ダイアログタスクの関連ノードの後に 複合エンティティを追加します。このエンティティが複数のエンティティ値を取り込むようにするには、複合パターンを作成する必要があります。これを行うには、プロパティパネルを開き、複合パターンセクションで、関連するパターンを追加します。作成できるさまざまなパターンは、エンティティパターンの定義に使用されるものと似ています。 (詳細はこちらを参照してください。)
上記の複合エンティティパターンについて、以下にサンプル音声と出力を示します。
サンプル発言 | 対応パターン | 出力 |
---|---|---|
2018 Tesla Model Sを購入したい | @year @make @model |
""車"":{ ""年式"": 2018年、 ""メーカー"": ""テスラ"", ""モデル"": ""Model S"" } |
できれば赤色の 2018 Tesla Model S の見積もりを送ってもらえますか? | @year @make @model preferably @color |
""車"": { ""年式"": 2018年、 ""メーカー"": ""テスラ""、 ""モデル"": ""ModelS"" ""色"": ""赤"" } |
Tesla Model S の評価は? | @Make @Model |
""車"": { ""メーカー"": ""テスラ"", ""モデル"": ""Model S"" } |
また、他のエンティティと同様に同義語やパターンを定義することもできます。
制限事項
- 記号列、説明、場所、日付などの種類のサブエンティティは、複合エンティティの一部にはできません。
- 複合エンティティを使用しているタスクでは、サブエンティティがダイアログフローに含まれていないことを確認してください。
- サブエンティティが複数の項目を許可している場合、親の複合エンティティはサブエンティティに1つの値を受け入れるだけで、リストは受け入れません。
動作について
ダイアログフローで複合エンティティに到達したとき:
- 定義された複合エンティティパターンから可能なすべてのサブエンティティが識別されます。
- それらのサブエンティティの可能性のあるすべてのインスタンスが、ユーザーの発言と記録された場所に配置されています。
- 複合エンティティパターンは、次に、キャプチャされたサブエンティティインスタンスのセットに一致する特定のパターンを識別するために評価されます。
それが意味するところは、複合エンティティパターンは、サブエンティティを識別するために使用されるのではなく、パターン全体を一致させるために使用されるということです。