Copilo Studioについて勉強を始めたので、その内容をメモ。
今回はトピックからナレッジ「SharePoint」を使用して、RAGで回答を生成する。
前回はトピック「Conversational boosting」を使用
前回の記事ではSharePointのナレッジを「Conversational boosting」や「オーケストレーション」を使用して呼び出していた。
簡単なエージェントならこの方法でもいいんだけど、ナレッジソースが増えたりしたときに、「こういう質問をされたときはこのナレッジを使いたい(他のナレッジは使いたくない)」みたいなことが出てくる。
そんなときは「トピック」と「生成型の回答」を使用して実現する。
今回作るエージェント
[会話で生成AIを利用する]をオフにしたエージェントに、
こんなSharePointサイトを用意して、「休暇について質問されたとき」はこのナレッジのみを使用するサンプルを作る。
構築
まずは[トピック]から[トピックの追加]を選んで、
「休暇」に関するフレーズを設定する(今回はサンプルなので適当)。
※適切なフレーズを設定するベストプラクティスはこちら。
フレーズをトリガーする際のベスト プラクティス - Microsoft Copilot Studio
Microsoft Copilot Studio におけるトピックのトリガー フレーズのガイダンスとベストプラクティス。
続いて[詳細]から[生成型の回答]を追加し、
入力にシステム変数の「Activity.Text(ユーザが最後に送信したメッセージ)」を設定する。
[プロパティ]から[選択したソースのみを検索する]にチェックを付けて、[AIが備える一般ナレッジの使用]をOFFにする。
※これでAIが「検索してほしいナレッジ以外から情報を取得」したり、「自分の知識で答える」ことを抑制する(ONのときとの動作の違いはおまけに記載)。
※これでAIが「検索してほしいナレッジ以外から情報を取得」したり、「自分の知識で答える」ことを抑制する(ONのときとの動作の違いはおまけに記載)。
下にスクロールして[メッセージの送信]をON(この「生成型の回答を作成する」ノードでユーザーへの返信も実施)にして、[応答を保存]から変数の[新規作成]を選び、
生成型の回答の出力を変数(今回はresponse)に保存。
そして「条件」を追加して、
生成型の回答から出力されるテキスト(Text.ContentまたはText.MarkdownContent)に対して、
空白チェックを行い、空白の場合は「情報が見つからない」旨メッセージを送る。
最後に[現在のトピックを終了する]を入れて完成。
動作確認
[トピック間の追跡]をONにして、
トリガーフレーズに設定した質問を送ると、トリガーが起動して、
[生成型の回答]が対象のデータソースを検索し、RAGで回答を作ってくれる。
こんな感じで「このトピックのときはこのデータソース」というのをきちんと管理すれば、回答精度の高いエージェントがつくれるかもしれない。
おまけ1:データソースに情報が見つからない場合
例えば、(やらないと思うけど)こんな感じでデータソースに情報がない質問をフレーズに追加し、
質問を送ると、生成型の回答のテキストは空白となり、条件で設定したメッセージが送られる。
おまけ2:[AIが備える一般ナレッジの使用をAIに許可]した場合
構築手順でオフにした[AIが備える一般ナレッジの使用をAIに許可]をオンにして、データソースに情報がない質問(特別休暇について)をすると、
こんな感じでAIが自分の知識から答えを作って回答してくれる。これが「よいこと」か「悪いこと」かはトピック次第。