はじめに
これまで別の記事でも紹介してきた通り、Copilot Studio では、ナレッジを登録するだけで RAG システムを構築できます。
以下のように複数のナレッジを登録することもできます。
この際、利用者にカテゴリーを選ばせたり、利用者が質問した内容に応じて特定のナレッジのみから検索して回答をしてほしいという要望をいただくことがあります。複数の類似のナレッジが混ざってしまうと回答品質に影響が出る可能性があるためです。
後者は以前紹介したマルチエージェントになるかと思います。
※つまり、エージェント、ナレッジを分ける感じになります
今回は、前者のアプローチを紹介します。
アプローチ
まず、今回は、[会話の開始] システムトピックを利用します。会話を開始時にメッセージを送信した後に、以下のように質問ノードを追加してカテゴリーを選択させます。
以下のように条件ノードが自動で追加されるため、[生成型の回答] ノードを追加します。
そして、データソースの編集画面を開き、[選択したソースのみを検索する] のトグルをオンにして、ナレッジにチェックを入れます。
間に質問ノードを以下のようにして追加して、ユーザーが入力した内容を渡します。
もう一つの条件分岐も同じような感じにします。
テストしてみます。以下のようにカテゴリーの選択肢が表示されます。
カテゴリーを選択後、質問を入力すると特定のナレッジのみから検索して回答してくれています。
注意点
トピック内で [生成型の回答] ノードを追加してナレッジを検索して回答を生成するようにした場合、こちらはオーケストレーションモードではなく、クラシックモードで動作する認識のため、以下のように、指示文で入力した通りに回答してくれません。
トピックは、Power Virtual Agents の頃からある、つまり、プログラム的な感じでチャットボットを作る際の仕組みです。そのため、回答が生成できなかった場合の共同について、オーケストレーションモードの指示文ではなく、トピック内のノードを使ってプログラム的な感じで実装する必要があります。
※オーケストレーションの場合は、指示文を基に、いい感じに動いてくれることが理想です。しかし、理想通りにいかない場合は、トピックでプログラム的に実装する方法が代替案となることもあります
まず、以下のように、[生成型の回答] ノードにて、回答内容を変数に保存するよう設定を変更します。
そして、条件アクションを追加して、その変数が空かどうか判定して、空だったらメッセージを送るようにします。
テストしてみます。いい感じです。
最後に、回答後に、[会話の開始] システムトピックに戻り、選択肢を選ぶ状態に戻します。このようにした方が、利用者にとって分かりやすいと思います。
いい感じに [会話の開始] システムトピックに戻っています。
まとめ
Copilot Studio で登録した特定のナレッジのみから回答を生成させるアプローチについて紹介しました。
以前からあるアプローチですが、確実に特定のナレッジのみから検索して回答できるため、今でも一つのアプローチとして有用と考えます。参考になれば幸いです。

















