エージェントのエンティティおよびスロット フィリングの使用
Copilot Studio におけるエージェントの会話で重要なのは自然言語理解で、これは AI がユーザーの意図を理解する能力です。 たとえば、ユーザーは「ギフトカードを使おうとしたのですが、使えません」と質問してくる可能性がありますが、エージェントは、その正確なフレーズがトリガーフレーズとしてリストされていなくても、ギフトカードが使えないことに関連するトピックにユーザーをルーティングすることを知っています。
自然言語の理解の基本的な側面の 1 つに、ユーザーの対話の中でのエンティティの特定があります。 エンティティの使用については、ビデオをご覧ください。
エンティティは、電話番号、郵便番号、市町村、個人名など、特定のタイプの現実世界の項目を表す情報の単位と考えることができます。 エンティティから付与された知識により、エージェントはユーザー入力から関連情報をスマートに認識し、後で使用するために保存することができます。
事前構築済みエンティティ
エージェントのエンティティは、類似したグループに情報を格納することができます。
初期状態の Copilot Studio には、年齢、色、数、名前など、実際のダイアログで最も一般的に使用され情報を表す、事前に作成されたエンティティのセットが付属しています。
エンティティから付与された知識により、エージェントはユーザー入力から関連情報をスマートに認識し、後で使用するために保存することができます。
その概念の理解を助けるために、お金エンティティを例として使用できます。
Copilot Studio でエージェントを開き、ページ上部の設定を選択し、メニューのエンティティを選択します。
使用可能な事前構築済みエンティティのリストが表示されます。
お金 エンティティを選択します。エンティティの詳細ペインが開きます。
ここでは、このエンティティの説明と、ユーザー入力からお金や通貨に関連する情報を検索するために使用できる方法を確認できます。
たとえば、ユーザーが 「1000 ドルかかる 」と入力すると、このお金のエンティティを使用して、エージェントは 「1000 ドル 」がお金のタイプの情報を表すことを知っています。 エージェントがこのエンティティを抽出して変数に保存すると、周囲の情報がテキストであったにもかかわらず、「1000 」を数値として保存します。
ユーザー定義エンティティ
事前構築済みのエンティティでは、一般的に使用される情報タイプがカバーされます。 特定の目的を果たすエージェントを構築する場合など、エージェントの言語理解モデルにドメイン固有の知識を教える必要がある場合があります。
たとえば、アウトドア ショップのエージェントを作りたいとします。 この場合、ダイアログで 「アウトドア製品 」カテゴリを認識するようにエージェントに教える必要があります。
まず、ユーザー定義エンティティを作成します。 この場合、エージェントにすべてのアウトドア製品カテゴリの知識を与えるエンティティを作成することができます。
Copilot Studio でエージェントを開き、ページ上部の設定を選択し、メニューのエンティティを選択します。
エンティティの追加>新しいエンティティ を選択します。
クローズしたリスト エンティティまたは正規表現 (regex) エンティティのいずれかを選択します。
クローズド リスト エンティティ
クローズド リスト エンティティを使用すると、アイテムのリストを定義できます。 これらのエンティティは、管理が容易で、シンプルなアイテム ラベルを持つ小規模なリストに最適です。
エンティティの作成時にこのオプションを選択すると、エンティティの名前、オプションの説明を指定し、エンティティに含めるアイテムを入力できるペインが表示されます。
アイテムを入力すると、次のことが可能となります:
- 各アイテムを選択して名前を変更する。
- ごみ箱アイコンを選択して、リストからアイテムを削除する。
- + 同義語 を選択 (または、リストされている同義語がすでに追加されている場合はその同義語を選択) し、同義語の編集 ペインを開きます。
同義語を追加して、エンティティのリストの各項目の一致ロジックを手動で展開することができます。 たとえば、「ハイキング」の項目では、「トレッキング」と「登山」を同義語として追加できます。
エンティティごとに スマート マッチング を有効にすることもできます。
スマート マッチングは、エージェントの言語理解モデルによってサポートされるインテリジェンスの一部です。 このオプションを有効にすると、エージェントはエンティティ内のリストされた品目に基づいて、ファジー ロジックを使用してユーザーの入力を解釈します。
特に、エージェントはスペルミスを自動修正し、マッチング ロジックを意味的に拡張することができます。 たとえば、エージェントは自動的に 「ソフトボール」 を 「野球」 にマッチさせることができます。
エンティティの作成または編集が完了したら、保存を選択して保存し、エンティティの一覧に戻ります。 クローズを破棄して、変更を保存します。
正規表現 (regex) エンティティ
正規表現 (regex) エンティティを使用すると、入力から情報を照合および抽出するために使用できる論理パターンを定義できます。 regex エンティティは、ユーザーの入力に対して複雑なパターンのマッチングを行う場合や、ユーザーが会話の中でどのようなフォーマットや入力をするかの特定のバリエーションを許可する必要がある場合に最適です。
たとえば、正規表現エンティティを使用して、追跡 ID、ライセンス番号、クレジット カード番号、IP アドレスなどの項目を、ユーザーがエージェントに入力した文字列から識別できます。
このオプションを選択すると、エンティティの名前、オプションの説明、および入力からエンティティ品目をマッチングして 抽出するために使用する正規表現パターンを指定できます。
Copilot Studio regex エンティティは .NET 正規表現構文を使用します。
既定では、パターン マッチは大文字と小文字を区別します。 大文字と小文字を区別しないようにするには、パターン文字列で (?i)
正規表現オプションを使用します。 正規表現エンティティ ペインにはいくつかの基本的な例が含まれています。 構文の詳細と、さまざまな例については、正規表現言語 - クイック リファレンス を参照してください。
正規表現が複数のパターンに対応する必要がある場合は、交替演算子 |
を使用して正規表現を連結することができます。 たとえば、2 つの正規表現パターンを組み合わせて、製品 ID コードの新旧両方の形式を検索することができます。
エンティティの作成または編集が完了したら、保存を選択して保存し、エンティティの一覧に戻ります。 クローズを破棄して、変更を保存します。
会話でのエンティティの使用
製品カテゴリ エンティティや他のいくつかのカスタム エンティティを作成することで、エージェントにアウトドア用品に関する知識を与えることができました。
編集を行うエージェントのトピックページに移動します。
収集するエンティティの トピック を開きます。
ノードの追加 アイコン を選択し、質問をする を選択します。
識別するの下で、カスタム エンティティ に作成したエンティティを選択します。
オプションとして、アイテムを選択し、ボタンとして表示することもできます。 たとえば、ユーザーが入力として便利に選択できるボタンのようにいくつかのカテゴリを表示したい場合は、簡単に ユーザーにオプションを選択 を選び、カスタム エンティティの作成時に追加した項目を含むリストからそれらを選択できます。
必要に応じて、ユーザーの応答を出力する変数に名前を付けます。
スロット埋込み
スロット埋込み とは、自然言語理解の概念であり、抽出されたエンティティをオブジェクトに保存することを意味します。 ただし、Copilot Studio では、スロット埋込みとは、抽出されたエンティティ値を変数に配置することを意味します。
テスト チャットで 「あることをやってみたい」と入力すると発生するキャンプ活動トピックを例にして説明します。
トピックは正常にトリガーされ、エージェントは質問するノードの作成時に指定されたボタンの選択肢を表示しながら、アクティビティのタイプを尋ねます。 ダイアログ ツリーでは、トピック間のトラッキングでも、エージェントが先ほど編集した質問ノードに移動していることがわかります。
ユーザーは、ボタンの 1 つを選択することにより、事前定義された選択肢を使用できます。 あるいは、「トレッキング 」などと入力すると、「ハイキング 」とマップされることもあります。
トピック間のトレッキングで、ダイアログは製品カテゴリ値が「ハイキング」であるパスに正しくルーティングされていることを示しています。 作成キャンバスの下部の変数ウォッチ ウィンドウから、変数値を調べることができます。 ウォッチ ウィンドウで、変数値が「ハイキング」であることを示します。
基本的に、スロット フィリングは、抽出されたエンティティ 「ハイキング 」を変数 VarCampType
に挿入することで行われます。
また、ユーザーが複数のエンティティにマップする複数の情報を指定できる「プロアクティブ スロット フィル」と呼ばれるものを使用することもできます。 エージェントは、どの情報がどのエンティティのものかを自動的に理解することができます。 意図したマッピングが不明な場合は、選択肢を提示することで、ユーザーにより具体的な説明を促します。
この例では、ユーザーは 「退屈しているが登山が好きだ」 と書いています。このメッセージには、ユーザーがアウトドア活動の手助けを求めているというトリガーフレーズと、ハイキングの同義語としてエンティティ定義された「登山」という 2 つ目の情報が含まれています。 この場合、エージェントは野外活動を選択するためのエンティティと、活動の種類の両方を入力します。
トピック間のトラッキングでは、エージェントがこのユーザー入力を取り込み、アクティビティのタイプを尋ねる質問ノードをインテリジェントにスキップすることがわかります。
エージェントは常にユーザーの入力を積極的に聞き、事前に情報を記憶しているので、不必要なステップを適宜スキップすることができます。
もう一度テストを再開して、別のケースを試してみましょう。 このラウンドでは、アクティビティにかかる時間 (期間エンティティを使用) や価格帯 (お金エンティティを使用) などを尋ねる質問ノードを追加できます。
今回、製品カテゴリの質問が提示されたとき、製品カテゴリだけをエージェントに伝える代わりに、ユーザーは 「100 ドル以下のハイキングブーツを買いたい 」と言うことができます。たとえば、この例では、エージェントは正しいハイキング商品カテゴリにルーティングするだけでなく、積極的にハイキングギアの種類とターゲット価格帯の情報を尋ねるスロットを埋めることができます。
プロアクティブなスロット埋込みは、ノード レベルで手動で制御できます。 特定のノード内で質問を常に求めたい場合は、以前のユーザー応答によってスロットが埋められたかどうかに関係なく、質問ノードの質問をスキップオプションを無効にできます。 無効にするには、質問をスキップ オプションの手順を実行してください。
質問 ノードのその他アイコン (…) を選択し、プロパティ を選択します。 質問プロパティ パネルが表示されます。
質問のプロパティ パネルで、質問行動 を選択します。
質問行動 パネルの 質問をスキップする で、毎回尋ねる を選択し、ページの上部にある 保存を選択します。