今回はCopilot Studioのプレビュー機能「オーケストレーション」を使用して、複数のアクションを組み合わせて回答を生成させる。
オーケストレーション機能
生成AIをONにしたエージェントは、ユーザーからの質問に対し適切な「トピック」「アクション」「ナレッジ」を自分で選び、それらを使用して回答を生成することができる。


さらにオーケストレーション機能を有効にしている場合、複数のアクションやトピック、ナレッジを、(使用する順序も考慮した上で)組み合わせて使用し、回答を生成することができる。
※Semantic KernelのPlannerとか、LangChainのPlan-and-Executeみたいな感じ。

※Semantic KernelのPlannerとか、LangChainのPlan-and-Executeみたいな感じ。

ということで今回の記事ではそんなオーケストレーション機能を使ってみる。
今回やりたいこと
今回は前回の記事で作成したアクション「ユーザーの予定を取得」を持つエージェントに、アクション「名前からユーザーの情報(メールなど)を取得」を追加し、ユーザーの名前からそのユーザーの予定を確認してみる。
- エージェントに「○○さんの予定を教えて」と聞く
- エージェントはアクション「名前からユーザーの情報を取得」でユーザーの名前からメールアドレスを取得
- 続いて取得したメールアドレスから、アクション「予定を取得」を使用して該当ユーザーの予定を取得
- 上記情報を基に回答を生成する
アクション「名前からユーザーの情報(メールなど)を取得」の構築
まずは[アクションの追加]から、


[新しいPower Automateフロー]を選ぶ。


フローの引数に「ユーザーの名前」を追加して、


Office 365コネクタの「ユーザーの検索」アクションを使用し、ユーザー名からユーザーの情報を検索する。


検索結果に対して[選択]アクションを使用し、必要と思われる情報のみ抽出して、


エージェントにその結果を返す。これでPower Automateの構築は完了。
※この構築だと候補のユーザーが複数いる場合(同姓同名 など)は、複数の検索結果が返っちゃうけど、今回はひとまずこれらは考慮しないこととする。

※この構築だと候補のユーザーが複数いる場合(同姓同名 など)は、複数の検索結果が返っちゃうけど、今回はひとまずこれらは考慮しないこととする。

Copilot Studioに戻って、構築したPower Automateアクションを追加し、


[編集]から、


エージェントが正しくこのアクションを使えるよう「説明」を丁寧に書く。


エージェントが正しい[入力]や[出力]を行えるよう入出力の説明も確認して、エージェントの構築は完了。


動作確認:アクション単体
動作確認のためわかりやすい名前のユーザーを用意。


先ほど作成したアクションが呼ばれるようエージェントに質問すると接続を求められるので、[Connect]を選択。


接続の管理で接続を作成し、




再度動作確認を行うと、無事ユーザーの情報を取得して回答を生成してくれる。


動作確認:オーケストレーション
該当ユーザーに適当な予定を作って、


ユーザーの予定を名前で聞いてみると、まずはユーザーの情報(メール)を取得して、


その情報(メール)をもとに該当ユーザーの情報を取得している。


ユーザーからの質問に対し、自分が使えるアクションやナレッジを使う順序も考慮した上で複数活用し、回答を生成する、といったことができてくると、生成AIを使っている感が出てきて楽しい。
おまけ:候補が複数(同姓同名など)がいる場合
ユーザーに一人田中さんを増やしてみて、


同じ質問をしてみると「ユーザー情報の取得」からは2人目の田中さんの情報もちゃんと返ってくるが、生成AIが勝手に1人目の田中さんについて聞かれてると判断して、回答を生成してしまう。
ということで、こういった機能を本番で構築する場合は、トピックを使って「Human-in-the-Loop」なども利用して機能を構築する必要がありそう。
コメント