はじめに
みなさん、こんにちは
マイクロソフト佐々木です。
本日は、Copilot Studioで高度なツール(マルチエージェント / AI Tools / Dataverse MCP / Computer Use)を駆使してエージェントを開発します。
中級ハンズオンシナリオを通じてエージェントを開発しながら各ツールの利用方法について説明したいと思います。
これまで私がまとめてきたブログの総集編となる内容なので、ぜひ他のブログも参考にしてみてください。
本日の記事をご覧になる前に初級者向けの利用方法や別のツールの使い方についての説明ブログのリンクになります。
初級ハンズオン
コードインタープリター
Agent 365 MCP
自律型エージェント
ツールとは
Copilot Studioでエージェントを開発するにあたり、人間のタスクを代行するのがツールです。
基本的にRAGに必要な部分はナレッジで構成し、アクションはツールで構成してあげます。
ツールには複数の機能が容易されております。
一般的にはエージェントフローと呼ばれるクラウドフローと同等のもの、コネクタなどでアプローチすることが多いと思いますが、本日はそれ以外のものを説明していきます。
Copilot Studio ハンズオン中級:マルチエージェント × AI Tools × MCP × Computer Use × で「出張旅費」エージェントを作成する
本記事は、Copilot Studio の中級(高度なツールを駆使したカスタムエージェント)ハンズオンを通じて、ツールの利用方法について説明していきます。
テーマは 出張旅費の処理対応 → 社内規定QA問合せ → 領収書アップロード → Dataverseレコード作成 → 交通費の自動検索(自律)→ Dataverse 更新 を一気通貫で構築することです。
この記事で作るもの(完成イメージ)
登場コンポーネントは以下です。
- Dataverse:出張申請データベース
- Copilot Studioエージェント:
- 出張旅費申請エージェント(領収書アップロード → 抽出 → Dataverse 登録)
- 出張規定検索エージェント(社内規定をナレッジ回答)
- 自律型旅費検索エージェント(Computer Use でサイト操作 → 運賃取得 → Dataverse 更新)
- Power Apps:出張管理アプリ(申請一覧・確認用)
- 連携要素:MCP / 自律トリガー / マルチエージェント / AI Tools / Computer Use
ハンズオン全体の流れ
大きく 3 つのエージェントを作って “つなげます”。
- 出張規定検索エージェント(ナレッジ回答専任の子エージェント)
- 出張旅費申請エージェント(領収書 → 抽出 → Dataverse 登録 / 規定質問は 1 に委譲)
- 自律型旅費検索エージェント(Dataverse トリガーで起動 → Computer Use で運賃取得 → Dataverse 更新)
1. 出張規定検索エージェント(ナレッジ回答専任)
まずは、出張規定検索エージェント(ナレッジ回答専任)の子エージェントを作成していきます。

マルチエージェントについての説明は下記のブログで紹介しています。
1-1. エージェント作成 & ナレッジ登録
目的:社内の出張規定を参照するために利用します。
- 新規エージェント作成:
出張規定検索エージェント
- ナレッジ登録:出張規定ドキュメント(PDF/Word/URL など)
適当なサンプルを用意し、ナレッジとして登録します。
ナレッジの説明には、ナレッジに関する説明を最低限記入します。
社内の出張規定を参照するために利用します
1-2. 指示文(Instruction)例
「規定に関する質問はナレッジから回答する」という旨を最低限の指示とします
- あなたは出張に関する問い合わせ対応を行うエージェントです。
- タスク:社内の出張規定に関する質問に対して、登録されたナレッジを参照して回答してください。
- ナレッジに根拠がない場合は、推測せずに「規定に記載が見当たりません」と回答してください。
1-3. テスト
適当にナレッジから回答が生成されるかテストしておきます。
問題なく回答が返ってきました。
例:国内の出張旅費の上限は?
例:宿泊費の精算ルールを教えて
1-4. 公開
後続のマルチエージェントとしての呼び出しをするため、公開します。
その際、念のためにエージェントの[設定]にて、呼び出しが有効になっているか確認します。

2. 出張旅費申請エージェント(領収書→抽出→Dataverse登録 + 規定QAは委譲)
続いて、出張旅費申請エージェント(領収書→抽出→Dataverse登録 + 規定QAは委譲)を作成していきます。
2つめのエージェントを新規で作成しておきます。
2-1. トピック作成(領収書アップロード起点)
ファイルをアップロードする機構を作成するために、前裁きするトピックを作成します。
- トピック名(例):
出張旅費精算 _ 領収書アップロード - 呼び出し発話例:
出張旅費申請を受付けするために呼び出しされます。「領収書をアップロードして申請」などで呼び出しされます。
質問ノードを作成して、グローバル変数にファイルのデータを保存します。
- 質問ノード:
出張に係る領収書をアップロードしてください
この辺りの処理は下記のブログで紹介しています。
2-2. AI Tools(プロンプト)で領収書から項目抽出
領収書(今回は交通費を精算するため、それ用のプロンプトを作成します)を処理するためのAIプロンプトを作成します。
こういったドキュメントを処理させるなどのモジュールを外だしして、共通部品化するイメージです。
Copilot Studioのツールからプロンプトを追加します。
プロンプト名(例):ReceiptProcessing
抽出したい項目:
- 出発地
- 目的地
- 出張日(乗車日):
yyyy-mm-dd形式 - 金額:
int
プロンプト例:
あなたは経費精算のアシスタントです。
添付された領収書画像(またはPDF)を読み取り、次の項目を抽出してJSONで返してください。
# 抽出項目
- DepartureFrom(出発地)
- Destination(目的地)
- DateOfTravel(出張日/乗車日):yyyy-mm-dd
- Amount(合計金額):整数
# 出力形式(JSON)
{
"DepartureFrom": "",
"Destination": "",
"DateOfTravel": "",
"Amount": 0
}
# 制約
- 文字が判別できない場合は空文字にする
- 金額が複数ある場合は「合計金額」を優先する
作成したプロンプトがエージェントのツールに追加されるので、詳細の設定をおこないます。
今回は領収書ファイルを引数として渡すだけなので、説明だけカスタマイズできれば最低限動作するかと思います。
応答についての設定は任意です、エージェントとの対話のなかで結果を出力をさせるか否かの制御になります。
旅費に関する領収書を処理するために利用します
2-3. 出張旅費申請エージェント:指示文編集(まずは「受領→分析」まで)
プロンプト(AI Tools)まで作成できたので、まずは 「領収書を受領して分析する」 ところまでをエージェントの指示文に明記します。
以下の流れをイメージして指示文を記入していきましょう。
出張旅費の申請を受け付ける
1. (領収書アップロード用トピック)を呼び出し、領収書を受領する
2. (ReceiptProcessing プロンプト)を呼び出し、領収書を分析する
2-4. 出張旅費申請エージェント:テスト(領収書をアップロードして申請)
指示文を反映したら、いったん 領収書アップロード → 解析 が通るかをテストします。
いい感じにAIプロンプトで定義したアウトプットが戻ってきたらOKです。
- テスト発話例:
領収書をアップロードして申請
2-5. 出張旅費申請エージェント:指示文編集(Dataverse MCP で登録まで追加)
次に、解析結果を Dataverse MCP でDataverseのテーブルに登録するところまで、指示文に追加します。テーブルや列のスキーマを直打ちしていますが、みなさんの環境のものに書き換えてください。
- 出張旅費の申請を受け付ける
1.(領収書アップロード用トピック)を呼び出し、領収書を受領する
2.(ReceiptProcessing プロンプト)を呼び出し、領収書を分析する
3.申請内容を Dataverse MCP を利用して `cr174_travelexpenserequest` に登録する
登録フィールド:
- `cr174_requesttitle`:出張の出発地や目的地、日にちをサマリ
- `cr174_amount`:金額
- `cr174_departurefrom`:出発地
- `cr174_destination`:目的地
- `cr174_dateoftravel`:出張日や乗車日
2-6. 出張旅費申請エージェント:MCP 追加
続いて、出張旅費申請エージェントに Dataverse MCP を追加します。
こちらのMCPを利用して、領収書の読み取り結果をDataverseレコードとして新規作成していきます。
- 目的:
cr174_travelexpenserequestへの登録(Create / Insert)に利用
2-7. 出張旅費申請エージェント:テスト(領収書をアップロードして申請)
MCP を追加したら、再度テストします。
- テスト発話例:
領収書をアップロードして申請
確認ポイント:
- 領収書 → 抽出(出発地/目的地/日付/金額)ができる
- Dataverse に
cr174_travelexpenserequestレコードが作成される
2-8. 出張旅費申請エージェント:マルチエージェントの追加
次に、出張規定に関する質問が入力された場合に呼び出しされるように、マルチエージェントを追加します。1の手順で作成したエージェントを呼び出しできるようにします。
説明には子のエージェントが呼び出しされるタイミングなどを説明しておきましょう。
出張規定に関する質問が入力された場合に呼び出しされます
- 子エージェント:出張規定検索エージェント(ナレッジ回答専任)
2-9. 出張旅費申請エージェント:指示文編集(規定QAは子エージェントへ)
マルチエージェントを追加したら、指示文に「規定QAは子エージェントへ委譲」を追記します。
- 申請フロー
1.(領収書アップロード用トピック)を呼び出し、領収書を受領
2.(ReceiptProcessing プロンプト)を呼び出し、領収書を分析
3.Dataverse MCP を利用して `cr174_travelexpenserequest` に登録
- 規定QAフロー
- 出張規定に関する質問を受け付けた場合、(出張規定検索エージェント)を呼び出し、回答する
2-10. 出張旅費申請エージェント:テスト(規定QA / 申請)
マルチエージェントも呼び出しされるかを検証しておきましょう。
- 規定QA:
国内出張規定について教えて - 申請 :
領収書をアップロードして申請したい
2-11. 出張旅費申請エージェント:Power Apps アプリの確認
申請レコードが Dataverse に作成できたら、Power Apps(出張管理アプリ)側で確認します。

2-12. ここまでのまとめ
ここまで長くなったので、この時点の構成要素について再確認します。
- Dataverse:出張申請データベース
- Copilot Studio:
- 出張旅費申請エージェント(AI Tools + MCP)
- 出張規定検索エージェント(マルチエージェントで呼び出し)
- Power Apps:出張管理アプリ
そして、以降で 自律型旅費検索エージェント(Computer Use + 自律トリガー + MCP) を作成します。
3. 自律型旅費検索エージェントの作成(Computer Use + MCP + 自律トリガー)
ユーザーが対話する「フロント側」のエージェント(出張規定検索 / 出張旅費申請)はここまでの手順で作成できました。
ここからはバックエンド側で、Dataverse のイベント(トリガー)を起点に自律実行されるエージェントを作成します。
本ハンズオンでは、出張旅費申請エージェントが作成した cr174_travelexpenserequest レコードを起点に、
- 出発地 / 目的地 を受け取り
- Computer Use(CUA)で運賃検索サイトを操作して金額を取得し
- Dataverse MCP で該当レコードに交通費(結果)を書き戻す
という流れを実現します。
3-1. CUA の作成(Yahoo! 路線で運賃を検索)
まずは Computer Use を使って、運賃検索サイトを操作する CUA(Computer Use Agent) を作成します。
Copilot Studio の Computer Use を利用すると、エージェントが GUI(画面)を持つ任意のシステム を操作できるようになります。
クリックや入力などの画面操作を実行し、結果画面から必要な情報を取得できます。いわゆるRPAに近いアプローチです。
本ハンズオンでは、API やコネクタが無くても実現できる例として、運賃検索サイトの操作に利用します。
今回は https://transit.yahoo.co.jp/ を利用して、ブラウザの操作を自動化させたいと思います。
ツールからComputer Useを追加して、手順を説明します。
基本的にはエージェントにGUI操作をさせたい内容を自然言語で説明していきます。
1. `https://transit.yahoo.co.jp/` にアクセスします
2. [出発] Departure From を入力します
3. [到着] Destination を入力します
4. [検索] ボタンをクリックし、運賃を検索します
5. 金額を取得します
6. 終了します
入力パラメータを用意します。
こちらはトリガーから受け取る出発地と目的地として利用される引数です。
出発地: Departure From
目的地: Destination
今回はブラウザのみの動作なので、ホスト型ブラウザを選択します。
もちろん自社のマシン(仮想マシンなど)を選択することもできます。要領としてはPower Automate Desktopのマシンの考え方と同じです。
テストして動作するかを確認しましょう。
3-2. 自律型旅費検索エージェントに MCP を追加(Dataverse 更新用)
次に、自律型旅費検索エージェントに Dataverse MCP を追加します。
目的は、CUA で取得した交通費を Dataverse の申請レコードに update_record で反映することです。
- テーブル:
cr174_travelexpenserequest - 更新フィールド:
-
cr174_result:交通費の金額
-
- 更新対象のキー:
-
cr174_travelexpenserequestid:更新対象 GUID
-
3-3. 自律トリガーの作成(出張経費申請があった場合)
自律型旅費検索エージェントを 自動で起動させるためのトリガー を作成します。
お作法的には過去のブログで作成しているので、参考にしてください。
作成のアクションで自律型エージェント側に渡す値をコントロールしてあげるとよいでしょう。
- トリガー条件(スライド):出張経費申請があった場合
- (例)Dataverse:行が追加されたとき(Created)
- 対象:
cr174_travelexpenserequest
3-4. 自律型旅費検索エージェント:指示文追加(CUA + MCP update_record を繋ぐ)
ここで、自律型旅費検索エージェントの 指示文(Instruction) を追加します。
スライドの流れを重視して、やることはシンプルに以下です。
- 出発地 / 目的地 を取得
- CUA を呼び出して交通費の金額を確認
- MCP を利用して Dataverse を update_record する(
cr174_resultを更新)
指示文例:
あなたは出張経費(交通費)を自律的に確認し、Dataverse の申請レコードを更新するエージェントです。
## 入力
- DepartureFrom(出発地)
- Destination(目的地)
- GUID(更新対象の申請レコードID)
## 実行内容
1) DepartureFrom と Destination を使って、Computer Use Agent(CUA)を呼び出し、運賃(円)を取得します
2) Dataverse MCP を利用して、cr174_travelexpenserequest の該当レコードを更新します
3-5. テスト(自律起動 → 運賃取得 → Dataverse 更新)
最後に、スライドのとおりテストを行います。
ポイントは「自律型」のため、ユーザーが直接会話で起動するのではなく、Dataverse のレコード作成が起点になることです。
2のエージェントを動作させて、テストレコードを作成しておきます。
今回は自律型エージェントは公開しないので、テストモードで検証しましょう。
テストの流れ
- 出張旅費申請エージェントで申請を作成する(出発地/目的地が入った
cr174_travelexpenserequestが作られる) - レコード作成をトリガーに、自律型旅費検索エージェントが起動する(検証モード)
- CUA が運賃検索サイトを操作し、金額を取得する
- MCP の
update_recordによりcr174_resultが更新される - Power Apps(出張管理アプリ)で結果が反映されたことを確認する
以上で、Computer Use + MCP + 自律トリガー を組み合わせた、自律型のバックエンド処理が完成です。
おわりに
以上で、Copilot Studio の中級ハンズオン(マルチエージェント / AI Tools / Dataverse MCP / Computer Use / 自律トリガー)を使った
「出張旅費」エージェント の一連の構築が完了です。
今回のハンズオンでは、次のポイントを一気通貫で体験しました。
- ナレッジ(RAG):出張規定検索エージェントで規定QAに対応
- AI Tools(プロンプト):領収書から出発地/目的地/日付/金額を抽出
-
Dataverse MCP:申請レコードの作成・更新(
cr174_travelexpenserequest/cr174_result) - マルチエージェント:規定QAは子エージェントへ委譲して役割分担
- Computer Use + 自律トリガー:申請レコード作成を起点に、運賃検索→自動更新まで自律実行
以上、お役に立てば、幸いです。




































