エンティティの使用
エージェントの会話では、自然言語理解を利用して、ユーザーが会話ウィンドウに入力した内容に基づいて、ユーザーの意図を特定します。 たとえば、ギフト カードを使用しようとしましたが、うまくいきませんというテキストを入力したとします。 この場合、正確なフレーズがトリガー フレーズに記載されていなくても、自然言語の理解がギフト カードが使えないことに関連したトピックであることを特定して、ユーザーを転送します。
自然言語の理解の鍵は、ユーザー ダイアログで使用されているエンティティを識別することです。 エンティティを、電話番号、郵便番号、市町村、個人名など、特定の種類の項目を表す情報の単位として考えてみます。
Microsoft Copilot Studio には、すぐに使用できる事前構築済みの一連のエンティティが含まれます。 これらのエンティティは、年齢、色、数字、名前などの実際のダイアログで最もよく使用される情報の一部を表します。 エンティティによって与えられる知識により、エージェントは、関連する情報をユーザー入力から認識し、後で使用できるように保存できます。
事前構築済みのエンティティ City を使用しましょう。 他の構築済みエンティティと同様に、"市区町村" には [エンティティ] タブからアクセスできます。エンティティを調べる際には、説明とその使い方を確認できます。
たとえば、ユーザーが 当社の本社はシアトルにある と入力した場合、エージェントはこの市区町村エンティティを使用することで、シアトルが市区町村タイプの情報を表していると理解します。 エージェントがこのエンティティを抽出して変数に保存すると、周辺情報がテキストであったとしても、「シアトル」が市区町村として保存されます。
トピックに質問ノードを挿入するときに、質問の識別セクションにエンティティを使用できます。 以下の例では、ユーザーがどの市区町村に住んでいるかを尋ねています。 識別フィールドを "市区町" に設定すると、入力したテキストからユーザーの市区町村を抽出します。
ユーザーの市区町村は、後でトピックや会話で使用できる UserCity と呼ばれる変数に格納されます。
事前に作成された使用可能なエンティティについて調べたので、ここでは必要に応じて独自のカスタム エンティティを作成する方法を検討します。
エンティティが定義された後、そのエンティティは、エージェントの会話を作成する再に使用できます。 それらを使用する最も簡単な方法は、トピックの作成キャンバスを開き、 質問 ノードを追加することです。 質問ノードを使用すると、エージェントはエンティティを使用してユーザーが送信した情報を識別し、この情報を変数として保存できます。 質問ノードの Identify 関数は、ユーザー クエリから識別する必要がある情報をエージェントに通知します。
会話の中でこの質問が提示された場合、ユーザーに必要とされるのは、探している部署を入力することのみです。 その後、項目がエンティティ リストの項目と比較され、一致します。
上の画像では、ユーザーは トレッキングに興味を示しています。これは ハイキングのもう一つの言い方です。 エージェントはこれを認識し、ハイキングの類義語としてトレッキングを定義したので、エージェントはハイキングに関連する情報を表示します。
場合によっては、組織が、選択を簡易化するためにユーザーにボタンを表示することを決定することがあります。 たとえば、一部のカテゴリ項目をボタンとして表示する場合、ユーザーは入力として選択し、[ ユーザーのオプションを選択 ] を選択してから、一覧から選択できます。 会話中に、顧客は必要な項目ボタンを選択するか、手動で別のカテゴリをテキストとして入力することができます。
スロット充填の使用
スロット充填は、抽出されたエンティティをオブジェクトに保存する自然言語の理解の概念です。 簡単に言うと、スロット充填は、顧客によって入力された内容と一致してから、変数に適切に格納されます。 たとえば、カテゴリ タイプを要求された場合、顧客はハイキングを選択するか、下記の図のようにトレッキングなどと入力することができます。 トレッキングは同意語として定義されたため、依然としてユーザーは「ハイキング」と入力したと見なされます。 スロット充填によって、他の単語が入力されても、正しいカテゴリに関連付けられます。 抽出したエンティティ ハイキングは、製品カテゴリ変数の値として使用されます。
プロアクティブ スロット フィリング
もう 1 つの概念は、プロアクティブ スロット充填として呼ばれています。 ここでは、ユーザーは複数のエンティティにマッピングされる情報の複数の部分を指定できます。 エージェントは、エンティティに属する情報を自動的に理解します。
プロアクティブ スロット充填は、ノード レベルで手動で制御できます。 特定のノード内で常に質問する場合は、前のユーザーの応答によってスロットが充填されたかにかかわらず、質問をスキップ オプションを無効にし、その質問ノードに対して毎回質問するように設定できます。
既定の 質問の動作 は [質問のスキップを許可する] に設定されています。これにより、エージェントは、既に提供されている情報をユーザーに求めることなく、ユーザー クエリからエンティティを事前に検出できます。
下記の例では、ユーザーがトレッキング用品を購入したいと入力しました。 これは、顧客が用品を購入したいというトリガー フレーズを含むだけでなく、実際の用品の種類に関する 2 つめの情報も提供します。 この場合、エージェントは、用具を購入するエンティティと用具の種類のエンティティの両方を充填します。 これは、エージェントが機器の種類をユーザーに求める必要がある前の例とは異なります。 エージェントはユーザー入力を受け入れ、製品カテゴリを尋ねる質問をインテリジェントにスキップします。
Note
ユーザーが Outdoor Sports Categories エンティティの値を指定したので、質問ノードはスキップされ、エージェントはユーザーが既に提供した情報を求めずに会話を進めることに注意してください。
エージェントは、ユーザーによる入力から常にアクティブにリスニングし、事前に情報を記憶するため、必要に応じて不要なステップをスキップできます。
もう一度テストを再起動し、別のケースを試してください。 このラウンドでは、ハイキング ギアの種類や価格帯 ( Money エンティティを使用) などを求めるいくつかの質問ノードを追加しました。
今回は、製品カテゴリの質問が提示されると、エージェントに製品カテゴリのみを伝える代わりに、ユーザーは $100 未満のハイキングブーツを 1 足買いたいと伝えることができます。
この例では、エージェントは、適切なハイキング製品カテゴリ パスにルーティングできるだけでなく、 ハイキング ギアの種類 と 目標価格帯 の情報を要求するスロットをアクティブに埋めます。
前のユニットで説明した事前構築済みエンティティでは、多くの一般的な情報の種類について説明します。 ただし、組織固有のシナリオについて言語の理解が必要とされる状況が発生します。 たとえば、アウトドア用品店のためのエージェントを構築してほしいという依頼があったとします。 多くの場合、エージェントではさまざまな種類のアウトドア製品を認識する必要があります。 Outdoor Store Categories と呼ばれるカスタム エンティティを作成できます。 エンティティには、店舗で提供しているさまざまなアウトドア製品を格納できます。 エンティティは、誰かが釣り、スキー、ボートといったアウトドア製品を入力すると、エージェントでその入力が適切なスポットに転送されるのを確実にするのに役立ちます。
[設定] ボタンを選択してから エンティティ タブに移動し、エンティティの追加 を選択することで、カスタム エンティティを作成できます。 カスタム エンティティを作成する場合は、作成するエンティティのタイプを定義する必要があります。
ユーザー定義エンティティ
2 種類のエンティティを作成できます。
- クローズド リスト: サイズ、部門、場所の一覧などの小さな品目一覧を定義するために使用します。
- 正規表現 (regex): ID 番号、クレジット カード番号、IP アドレスなど、特定の論理パターンを定義するために使用します。
クローズド リスト エンティティ
クローズ リスト エンティティは、前述したアウトドア用品の会社の例など、顧客とのやり取りの時に役立つ小さな品目一覧を定義する場合に最も役立ちます。 以下の画像では、"Outdoor Store Categories" と呼ばれる、クローズド リストのカスタム エンティティを作成しました。 新しいアウトドア製品カテゴリ名の一覧を追加しました。
ユーザーがチャット セッションを操作する場合は、一覧に定義されている値がシステムによって検索されます。 一覧の項目に固有のトピックを作成した場合、ユーザーはそれらのトピックの 1 つに簡単にアクセスできます。 たとえば、ユーザーが野球について質問がありますと入力した場合、システムは一覧で野球の項目を識別し、構成に基づいて野球のトピックを表示します。
スマートマッチングと連携
エージェントの使用中、お客様が何かを誤入力したり、エンティティで定義されているのとは多少違った語句を入力したりするのは珍しいことではありません。 たとえば、顧客が野球の代わりにソフトボールと入力することがあります。 どちらのスポーツも同じタイプの用具を使用します。 製品カテゴリでは、ソフトボールは野球と同じとみなす必要があります。 スマート マッチングを使用すると、エージェントはエンティティに指定された一覧項目に基づいて、あいまいなユーザー入力を容認します。 つまり、エージェントは完全一致を検索する必要はありません。
スマート マッチングをオンにすると、エージェントは自動的にスペルミスをオートコレクトし、「ソフトボール」を「野球」に自動的にマッチングするなど、マッチング ロジックを意味的に展開します。
同意語を使用する
同意語のオプションは、スマート マッチングと同様です。ただし、スマート マッチングのようには自動的ではありません。 同意語は手動で入力します。 また、ロジックを展開して、意味が似ている語やもともと類似していると考えられる語を含めます。 たとえば、スキー、スノーボード、雪靴などのスポーツを、これらがスノー スポーツであるという点に基づいて 1 つのグループにまとめるのは珍しいことではありません。 一覧でこの状況に対応するために、スキーという製品カテゴリにスノーボードと雪靴の両方を同意語として追加できます。 ユーザーが「スノーボード」か「雪靴」のいずれかを入力すると、エージェントはこれらの語句がスキーに関連付けられたカテゴリであると理解します。 ヨガなどの活動には、ピラティスを追加できます。 スマート マッチングと同意語がシームレスに連携して、エージェントがさらに洗練されたものになります。
正規表現 (regex) エンティティ
正規表現 (regex) エンティティを使用すると、入力からの情報を一致させて抽出する際に使用できる論理パターンを定義できます。 正規表現エンティティは、ユーザーの入力に対する複雑なパターンの照合や、ユーザーが会話で入力を書式設定またはタイプする方法に特定のバリエーションを許可する必要がある場合に有用です。
たとえば、正規表現エンティティを使用して、追跡 ID、ライセンス番号、クレジット カード番号、IP アドレスなどの項目を、ユーザーがエージェントに入力した文字列から識別できます。
正規表現エンティティを選択する場合、以下を定義する必要があります。
- 名前: 正規表現エンティティの名前を定義します。
- 説明: エンティティの詳細を定義するオプションの説明です。
- パターン: テキストの抽出に使用するパターンを定義します。
上の画像では、追跡番号と呼ばれる正規表現エンティティを作成しています。 入力された構文では、追跡番号が 9 桁の数字に始まり、大文字または小文字 1 文字で終わるように指定しています。 (Ex.100456789A)
正規表現エンティティは .NET の正規表現構文を使用します。
.NET の正規表現構文の作成に関する詳細については、以下のリンクを使用してください。
次に、トピックで変数を操作する方法について説明します。