1. 主要ページへ移動
  2. メニューへ移動
  3. ページ下へ移動

QES ブログ

記事公開日

【Copilot Studio】マルチエージェント入門!賢い子エージェントの作り方

  • このエントリーをはてなブックマークに追加

はじめに

こんにちは!DXソリューション営業本部の中垣です。
MicrosoftのCopilot Studioを活用して申請系のエージェントを作る際、「生成AIの柔軟な対話力」と「入力フォームのような情報の網羅性」を両立させることは意外と難しいものです。
AIに任せると必須項目を聞き忘れることがあり、逆にトピックの質問ノードで1つずつ聞こうとすると、「ボールペンを10本欲しい」とまとめて伝えても「品名は何ですか?」と1から聞き直されてしまうことがあります。

このように、通常のエージェント構築ではトレードオフになりがちな要件ですが、Copilot Studioの「子エージェント」をトピックと組み合わせることで解決することができます。
Copilot Studioには、複数のエージェントを連携させて動かす「マルチエージェント」の機能が用意されています。
子エージェントはその機能の1つで、ユーザーの窓口となる「親エージェント」の中に、特定の作業を担当するエージェントを組み込む仕組みです。

本記事では、この「子エージェント」とトピックを活用して、総務への「備品購入申請」を受け付けるエージェントを作る方法をご紹介します。
親エージェントが依頼の窓口となり、子エージェントが申請に必要な項目を聞き取って、トピックが合計金額から承認の要否を判定する、という構成です。
この「聞き取り」と「判定」を分ける作り方は、備品購入申請に限らず、経費精算や休暇申請などのほかの申請業務にも応用できるので、ぜひ参考にしてみてください!

今回作成するエージェントの全体像

今回は、親エージェントである「総務アシスタント」の中に、トピック「備品購入申請」と子エージェント「備品購入申請の受付」を1つずつ作成します。
それぞれの役割は以下のとおりです。

  • 親エージェント:ユーザーの依頼を受け取り、備品の申請であればトピックに処理を任せます。
  • トピック:子エージェントを呼び出して聞き取りを任せ、返ってきた単価と数量から合計金額を計算します。
    10,000円以上なら上長承認の案内を、未満なら受付完了のメッセージを表示します。
  • 子エージェント:トピックから呼び出され、品名・数量・単価・希望納期のうち、会話に出ていない項目だけをユーザーに聞き返します。
    集めた内容はトピックへ返します。

ポイントは、会話に合わせて柔軟に聞き取る部分は子エージェントに、金額の計算や分岐のように毎回同じ結果になってほしい部分はトピックに任せることです。
こうすることで、「1本1,000円のボールペンを10本ほしい」とまとめて伝えても聞き直されず、承認が必要かどうかも毎回同じルールで判定することができます。
さらに、親エージェントにほかの申請のトピックや子エージェントを追加していけば、総務への依頼窓口を1つにまとめることもできます!

手順1:親エージェント(総務アシスタント)の作成

それでは、まずは土台となる親エージェントを作成していきます。
親エージェントには、備品の購入申請を受けたら自分では聞き取りをせず、後で作るトピックに任せるよう指示を入れておきます。

1
エージェントの新規作成
左メニューの[エージェント]を開き、画面右上の[新しいエージェント]ボタンの右側にある[(∨)]をクリックします。
表示されたメニューの[エージェント (標準)]を選択します。

⚠️ 注意:
メニュー上段の[エージェント (GitHub Copilot)]は、子エージェントが使えないため[エージェント (標準)]を選んでください。
2
エージェントに名前をつける
「エージェントに名前をつける」画面で、名前に「総務アシスタント」と入力、スキーマ名に「GeneralAffairsAssistant」と入力し、[作成]をクリックします。

💡 ポイント:
スキーマ名はシステム内部で使われる名前で、作成後は基本的に変更できません。
3
生成オーケストレーションの確認
エージェントの画面が開いたら、画面右上の[設定]をクリックします。
[生成 AI]タブの「オーケストレーション」で[はい、利用できるツールやナレッジを適宜使用し、応答を動的にします。]が選択されていることを確認します。
変更した場合は[保存]をクリックしてください。



💡 ポイント:
生成オーケストレーションがオンになっていると、ユーザーの自由な発話(例:「マウスがほしい」)からAIが適切なトピックを自動で選んでくれます。
4
指示の入力
[概要]タブの「指示」欄の[編集]をクリックし、以下の文章を入力して[保存]をクリックします。
あなたは総務アシスタントです。
備品の購入申請は必ず専用のトピックに任せ、自分では聞き取りをしないでください。



💡 重要なポイント:
「自分では聞き取りをしないでください」という1文を入れることで、親エージェントが品名や数量を聞き始めてしまい、後で作るトピックと子エージェントの仕組みをすり抜けてしまうことを防ぎます。

手順2:子エージェントに型付き入出力を定義する

子エージェントに「入力」を定義すると、必要な項目がそろうまでAIが自動で聞き返してくれます。
さらに「出力」を定義すると、集めた値を決まった型でトピックへ返せるようになり、トピック側で確実な計算や条件分岐ができるようになります。

2-1. 子エージェントの新規作成

1
エージェントページを開く
エージェントの編集画面上部から[エージェント]タブを開き、[追加]をクリックします。


2
新しい子エージェントの選択
「エージェントの拡張方法を選択します」画面で、「子エージェントを作成する」の[新しい子エージェント]を選択します。

3
名前・使用タイミング・指示の入力
名前に「備品購入申請の受付」と入力し、「これが使用されるタイミングは?」で[リダイレクトされる先 - トピックから開始された時]を選択します。
続けて「指示」欄に以下の文章を入力します。
入力された品名・単価・数量・希望納期をもとに、申請内容を1〜2文で要約して「申請概要」に入れてください。 ユーザーとの会話の中ですでに伝えられている項目は聞き返さず、足りない項目だけを質問してください(例:「ボールペンがほしい」と言われた場合、品名は聞き返さない)。 申請の受付以外の質問には答えないでください。


💡 重要なポイント:
使用タイミングを[リダイレクトされる先 - トピックから開始された時]にしておくことで、親のオーケストレーターが子エージェントを直接呼び、トピックの合計金額の計算や承認の分岐が飛ばされることを防ぎます。

2-2. 入力(Inputs)の定義

1
入力の追加
子エージェントの画面左側のメニューから[入力]を選択し、「入力」セクションの[入力を追加する]をクリックします。

2
「品名」の作成
以下のとおり入力し、[保存]をクリックします。
・「表示名」:品名
・「説明」:ユーザーが購入を希望している備品や物品の名前。(例:ボールペン、モニター、マウスなど)
・[この入力を必須にしてください]:チェックを入れる
・「データ型」:[String]

💡 ポイント:
「説明」はAIがユーザーの発話から値を抜き出すときの手がかりになるため、例を書いておくと精度が上がります。
また「必須」にしておくことで、ユーザーが言い忘れた場合にAIが自動で聞き返してくれます。
3
残りの入力の作成
同じ手順で[入力を追加する]から以下の3つの入力を作成します。
いずれも[この入力を必須にしてください]にチェックを入れてください。
表示名 説明 データ型
数量 購入を希望する備品の数。
単位は含めず、数値のみを抽出してください。
Number
単価 その備品の単価。
単位は含めず、数字のみを抽出してください。
Number
希望納期 備品が手元に欲しい希望の期日や日付。(例:明日、来週の金曜日、2026年11月1日など) Date
💡 ポイント:
「数量」と「単価」をNumber型で作成することで、後でトピック側で「単価×数量」の計算ができます。
説明に「単位は含めず」と書いておくと、「3個」「1,500円」のような発話も数値として受け取れます。
「希望納期」をDate型にすることで、「来週の金曜日」のようなあいまいな表現も日付として解釈されます。

2-3. 出力(Outputs)の定義

続いて、子エージェントが聞き取った内容をトピックへ返すための出力を設定します。

1
出力の追加
画面左側のメニューから[出力]を選択し、「完了」セクションの[出力を追加する]をクリックします。

2
「申請概要」の作成
以下のとおり入力し、[保存]をクリックします。
・「表示名」:申請概要
・「説明」:品名・単価・数量・希望納期を1〜2文にまとめたもの
・「データ型」:[String]

3
残りの出力の作成
同じ手順で[出力を追加する]から以下の2つの出力を作成します。
表示名 説明 データ型
単価 その備品の単価。 Number
数量 購入を希望する備品の数。 Number
💡 ポイント:
ここで作成した出力は、手順3でトピックの変数として使います。
4
実行後の動作の確認
「完了」セクションの「実行後」が[応答しない (既定)]になっていることを確認します。

💡 ポイント:
今回はトピック側で完了メッセージ(承認の案内や受付完了)を出すため、ここは[応答しない (既定)]のままにしておきます。
5
子エージェントの保存
画面右上の[保存]をクリックし、ここまでの設定を確定させます。

手順3:トピックから子エージェントを呼び出し、合計金額で分岐する

最後に、子エージェントを呼び出して、合計金額で承認が必要かどうかを分岐するトピックを作成していきます。

3-1. トピック「備品購入申請」の作成

1
トピックの新規作成
親エージェントの[トピック]タブを開き、[トピックの追加]の右側にある(∨)から[最初から]を選択します。

2
トピック名の変更
トピックの編集画面が開いたら、画面左上のトピック名をクリックし、名前を「備品購入申請」に変更します。
トリガーノードの「トピックの機能を説明する」欄に、以下の文章を入力します。
社員がボールペンやモニターなどの「備品」や「事務用品」の購入・注文を希望した際に、申請を受け付けるためのトピックです。

3-2. 子エージェントの呼び出し

1
エージェントノードの追加
トリガーノードの下にある[+]をクリックし、[エージェントを追加する]から[備品購入申請の受付]を選択します。



2
入力の値の設定
追加されたエージェントノードの「入力」にある[値を設定する]をクリックし、[品名][数量][単価][希望納期]を選択します。
続けて各入力欄の[…]をクリックし、[計算式]タブで「Blank()」と入力して[挿入]をクリックします。



💡 ポイント:
入力の値が空のままだと、データ型の不一致エラーが表示されるため、「Blank()」を入れておきます。
そうすることで、エラーが消え、子エージェントが会話の中で各項目を聞き取ってくれます。

3-3. 合計金額の計算

1
変数値の設定ノードの追加
エージェントノードの下にある[+]をクリックし、[変数管理] > [変数値を設定する]を選択します。

2
新しい変数の作成
「設定する変数」の[変数を選択する]をクリックし、[新しい変数を作成する]を選択します。

💡 ポイント:
本記事では変数名を既定の「Var1」のまま進めますが、実際には何の値が入っているかわかる名前(例:TotalAmount や 合計金額 など)にしておくと、後から見直すときや他の人に引き継ぐときに読みやすくなります。
3
計算式の入力
「設定する値」の[…]をクリックし、[計算式]タブで以下を入力して[挿入]をクリックします。
Topic.単価*Topic.数量

3-4. 合計金額による条件分岐とメッセージ

1
条件の追加
変数値の設定ノードの下にある[+]をクリックし、[条件を追加する]を選択します。

2
条件の設定
「条件」の[変数を選択する]から[Var1]を選択し、演算子を[が次の値以上]、値を「10000」に設定します。
条件に当てはまらない場合は、自動で「その他のすべての条件」側に進みます。



3
承認が必要な場合のメッセージ
「条件」側の[+]から[メッセージを送信する]を選択し、以下の文章を入力します。
合計金額が10,000円以上のため、上長からの承認を得てください。




💡 補足:
今回はメッセージで承認をお願いするだけですが、Power Automateと組み合わせると、合計金額が10,000円以上のときに上長へ自動で承認依頼を出すこともできます。「条件」側の[+]>[ツールを追加する]からエージェントフローを呼び出し、フローの「開始して承認を待機」アクションで申請概要と合計金額を上長に送るイメージです。
本記事では割愛しますが、承認結果をトピックに戻せば、承認・却下に応じて案内を変えることもできます。
4
承認が不要な場合のメッセージ
「その他のすべての条件」側の[+]から[メッセージを送信する]を選択し、以下の文章を入力します。
受付が完了しました。

続けて、「受付が完了しました。」の後ろで改行し、メッセージ編集欄のツールバーにある[{x}]をクリックして[申請概要]を選択します。





💡 ポイント:
子エージェントがまとめた申請内容を申請概要としてそのまま表示するので、ユーザーはその場で受付内容を確認できます。
トピックのメッセージとして出しているため、毎回同じ形で表示されるのもポイントです。
5
トピックの終了
「条件」と「その他のすべての条件」ノードの下(トピックの1番下)にある[+]をクリックし、[トピック管理] > [すべてのトピックを終了する]を選択します。



💡 重要なポイント:
生成オーケストレーションでは、トピックが終わったあとも親エージェントのAIが「ユーザーの依頼が完了したか」を判断して次の行動を決めます。
今回のようにトピックの終了を明示しておかないと、AIが申請はまだ終わっていないと判断して同じトピックを何度も呼び直し、「受付が完了しました。」が繰り返し表示されることがあります。
6
トピックの保存
トピック全体の流れを確認し、画面右上の[保存]をクリックします。

動作確認

以上でエージェントの作成は完了です!
画面右側のテストパネルで実際にメッセージを送って、動きを確認してみます。

今回は、以下の3つのパターンで確認します。

パターン 送信するメッセージ(例) 期待される動作
1. 必要な項目を一度に伝える
(承認あり)
モニターを2台欲しいです。1台30,000円で、来週の金曜日までにお願いします。 聞き返しなしで合計金額60,000円と判定され、「合計金額が10,000円以上のため、上長からの承認を得てください。」と表示される
2. 項目が足りない
(承認なし)
マウスがほしい 子エージェントが数量・単価・希望納期を聞き返すので、「1つ500円のものを5個、今月中にほしい。」と答えると「受付が完了しました。」と共に申請概要が表示される
3. 備品の購入以外の質問 会議室の予約方法を教えてください。 「備品購入申請」トピックは呼び出されない
実際に試してみた結果がこちらです。
  1. 必要な項目を一度に伝える(承認あり)
  2. 項目が足りない(承認なし)
  3. 備品の購入以外の質問

英語で応答が返ってくる場合

動作確認をしていると、子エージェントの聞き返しが以下のように英語で返ってくることがあります。

この事象は、子エージェントの指示で応答する言語を指定していない場合に起こることがあります。
その場合は、子エージェントの指示に「日本語で対話してください」という一文を追加しましょう。

1
子エージェントの指示に追記
親エージェントの[エージェント]タブから[備品購入申請の受付]を開き、「指示」欄の末尾に以下の文章を追記して[保存]をクリックします。
ユーザーへの質問や応答などの対話は、必ずすべて日本語(Japanese)で行ってください。

2
再テスト
テストパネルで[新しいテスト セッションを開始する]をクリックし、再度「マウスがほしい」と送信します。
聞き返しが日本語で返ってくれば修正完了です!

おわりに

今回は、子エージェントとトピックを組み合わせて、備品購入申請を受け付けるエージェントを作成する方法をご紹介しました。
聞き取りは子エージェントに、金額の計算と分岐はトピックに任せることで、まとめて伝えても聞き直されず、承認の判定もブレないエージェントを作ることができます。

本記事では割愛しましたが、集めた申請内容をエージェントフローでSharePointリストに登録したり、合計金額が10,000円以上のときにPower Automateの承認フローで上長へ承認依頼を出したりすると、より実務で使えるエージェントになると思います。
さらに、会議室の予約や社内規程の問い合わせなど、ほかの総務業務のトピックや子エージェントを親エージェントに追加していけば、総務への依頼窓口を1つにまとめることもできます!
今回ご紹介した作り方と合わせて、ぜひお試しください!

QESでは、Copilot Studio や Power Platform 全般の導入支援から開発・運用保守サポートに加え、実際に画面を操作しながら今回のようなエージェント開発が体験できるハンズオン講座をご用意しております。
ハンズオン講座の詳細やサポート内容については、以下のリンクよりお気軽にお問い合わせください。

このブログで参照されている、Microsoft、Windows、その他のマイクロソフト製品およびサービスは、米国およびその他の国におけるマイクロソフトの商標または登録商標です。

  • このエントリーをはてなブックマークに追加

お問い合わせ

Contact

ご質問やご相談、サービスに関する詳細など、何でもお気軽にご連絡ください。下記のお問い合わせフォームよりお気軽に送信ください。

お問い合わせ

資料ダウンロード

Download

当社のサービスに関する詳細情報を掲載した資料を、下記のページよりダウンロードいただけます。より深く理解していただける内容となっております。ぜひご活用ください。

資料ダウンロード