Copilot Studioでエージェントを作成してみた! 実践編

前回の概要編では、Copilot Studioの基本的な仕組みとエージェント作成の流れについて解説しました。

blog.jbs.co.jp

今回は実際に「TravelAgent」という旅行相談に特化したエージェントを作成しながら、具体的な設定手順と実装のポイントを説明します。

TravelAgentの仕様定義

今回作成するTravelAgentは、以下の機能を持つ旅行相談エージェントです。

  • 基本機能: 旅行先のおすすめスポット紹介、旅行プラン策定
  • 対話フロー: ユーザーの希望を段階的にヒアリングし、パーソナライズされた提案を提供

想定する会話フローは以下の通りです。

  1. 挨拶とサービス説明
  2. 旅行先の希望ヒアリング
  3. 提案とフォローアップ

TravelAgentの作成

エージェントの作成

Copilot Studioにアクセスし、新規エージェントを作成します。

基本情報の設定

  • エージェント名: Travel Agent
  • 説明: 任意の説明を入力
    • 例:旅行計画をサポートする専門エージェント
  • 指示: 任意の指示を入力
    • 例:Travel Agentは旅行相談の専門家です。ユーザーの希望に合わせて最適な旅行プランを提案します。
  • 言語: 日本語

システムトピックの設定

エージェント作成時に自動生成されるシステムトピックを確認し、必要に応じてカスタマイズします。

例:会話開始時トピックを修正し、TravelAgentの自己紹介と基本的なサービス説明を設定

メイントピック「旅行相談開始」の作成

トリガーフレーズの設定

新しいトピック「旅行プランの提案」を作成し、以下のトリガーフレーズを設定します。

  • 旅行プラン
  • 観光
  • おすすめプラン

段階的ヒアリングフローの構築

ステップ1: 目的地の確認

  • 質問ノード:目的地を教えてください。
  • 特定: ユーザーの応答全体
  • 変数の種類: グローバル
  • 変数名: Global.destination

ステップ2: 日程の確認

  • 質問ノード:日程を教えてください。
  • 特定: 日付
  • 変数の種類: グローバル
  • 変数名: Global.date

ステップ3: その他条件の確認

  • 質問ノード:興味や予算など条件があれば教えてください。
  • 特定: ユーザーの応答全体
  • 変数の種類: トピック
  • 変数名: conditions

次にフローの作成画面に移るため、ここで一度保存しておきます。

フローの作成

Power Automateフローを使って、先ほど質問したユーザーの希望条件をJSON形式にします。

  1. Power Automateを開き、[新しいフローの追加] - [インスタント クラウドフロー] - [エージェントがフローを呼び出したとき]を選択します。
  2. トリガーの「エージェントがフローを呼び出したとき」をクリックしてパラメーターを設定します。
  3. 「変数の初期化」アクションを追加してパラメーターを以下のように設定します。
  4. 「作成」アクションを追加してパラメーターを以下のように設定します。
あなたは熟練の旅行計画の専門家です。ユーザーが提供した入力情報をもとに、最高の旅行プランを提案してください。
###総合概要
旅行の目的やテーマ(例:文化体験、グルメ、アドベンチャーなど)を明確に記述してください。
全体の旅行の流れや見どころを簡潔に説明してください。
###日程別プランの詳細
各日ごとのスケジュールを提示してください。
###推奨事項
ユーザーのconditionsに沿ったプランを紹介してください。
空欄ならその目的地と時期のみ考慮すればよいです。
###入力情報(JSONフォーマット)
@{variables('request')}

5. 「Respond to the agent」をクリックし、出力名をformattedRequestとしてエージェントに返す値を設定します。 6. 下書きを保存してフローを公開します。

フローの追加
  1. Copilot Studioのトピック「旅行プランの提案」に戻り、再度[ノードの追加] - [ツールを追加する] から先ほど作成したフローを選択します。
  2. フローに渡す入力値を以下のように設定します。※dateは日付型からテキスト型に変換して渡します。

生成型回答の活用

「生成型の回答」ノードを使用して、ユーザーの希望する旅行プランを回答します。

生成型の回答ノード:

  • 入力: formattedRequest
  • データソース: 指定なし
  • ナレッジソース: オフ
  • Web検索:オン
  • クラシックデータ: オン

エラーハンドリング

「生成型の回答」では、応答が長すぎるとエラーになるので条件分岐を追加します。

  1. [ノードの追加] - [条件を追加する]をクリックします。
  2. 変数を選択して「生成型回答」ノードの応答を格納している変数 botResponse を設定し、condition で「が空白ではない」を選択します。
  3. その他のすべての条件の下に「メッセージを送信する」を追加してエラー時のメッセージを設定します。
会話終了時の処理

変数をクリアし、会話の終了トピックにリダイレクトします。

テストと動作確認

デバッグモードでのテスト

右上の「テスト」ボタンからテストパネルを開き、デバッグモードを有効にします。

これにより以下が確認できます。

  • 変数の値の変化
  • ピック間の遷移
  • 条件分岐の動作
M365 Copilotでの動作

作成したエージェントを指定してトリガーフレーズを入力すると、以下のように指定した条件でおすすめプランを作成してくれました。

まとめ

今回は実践編として、旅行プランの提案をしてくれるエージェントの作成手順をご紹介しました。

今回はAIに渡す入力値の形式を整えるためだけにPower Automateを使いましたが、フロー内で複雑な処理を追加してより機能を拡張することも可能です。

ぜひ試してみてください。

執筆担当者プロフィール
池田 理佳子

池田 理佳子(日本ビジネスシステムズ株式会社)

Data&AI本部 ラボセンターに所属。Power Platformによる業務効率化支援を経て、Webアプリケーションの開発に従事。

担当記事一覧