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