MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

【Copilot Studio】複雑なアクションはエージェントフローにおまかせ

前回の投稿ではCopilot Studioで作成するエージェントから外部サービス(より正確にはコネクターのアクション)を実行する方法 - ツールの使い方と躓きポイントについて紹介しました。

mofumofupower.hatenablog.com

もう少し突っ込んで、エージェントからの回答を使って複数アクションをシーケンシャルに実行したいようなケースを考えましょう。

例えば前回の例を使うと、問い合わせを受けてエージェントが回答を生成。その後SharePointリストに質問と回答を記録しつつTeamsにお知らせ(あるいはエスカレーション)するような使い方です。

単純にはエージェントに複数のツールを追加し、エージェントの定義部分で複数ツールを実行するようなプロンプトを書けば目的は達せられます。しかしながら前回記載したような入力パラメータの困難や、データの一部加工が必要なケースではかなり手間がかかるので、活用が難しいなと思われるかもしれません。

そのようなケースで効果を発揮するのが今回紹介するエージェントフローです。

エージェントフローは(細かい違いを除くと)Copilot Studioのエージェントから実行されるクラウドフローです。

ほとんどPower Automateのクラウドフローですが、Copilot Studioのライセンスで実行される点や、独自のアクションが提供されている点でCopilot Studioに最適化されているといえます。

ではエージェントフローの使い方を見ていきましょう。

エージェントフローの追加

エージェントフローを追加する方法は主に2通り、エージェント画面から作成・追加する方法と、エージェントフロー一覧から作成する方法があります。

いずれの方法でも特に違いはありませんが、ここではなるべく一連の操作で追加したいので、エージェント作成画面からの作成・追加方法を紹介します。

エージェント作成画面からフローを追加する方法

エージェントフローはCopilot Studioで作成されるエージェントのツールの一部です。フローを追加するにはエージェント概要タブの画面中ほどにある「ツール」から「ツールの追加」>「新しいツール」>「エージェントフロー」の順にクリックしていきます。

画面が切り替わり、Power Automateのクラウドフローと同じデザイナーが表示されました。ただし事前にトリガーとアクションが設定されています。

  • トリガー:Copilotからフローを実行する では、フローボタンのトリガーのように、トリガーで入力するパラメータを任意で追加できます。エージェントフローで行う処理 - 登録、通知など で必要な情報をエージェントから受け取ります。
  • アクション:Respond to agent では、フローを呼び出したエージェントに対してフローの出力を返すことができます。エージェント側でさらに後続処理を行う場合に設定しましょう。

開始と終了は事前に定義されているので、ユーザーは必要な処理(アクション)を間に追加していくだけです。 ここでは例として前回ツールで行ったアクション、SharePointへの質問・回答の登録とTeamsへの通知を追加してみます。

まずトリガーに2つの入力パラメータを定義します。「Question」「Answer」それぞれに質問と回答をエージェントから渡してもらって、処理を行います。

フローに2つのアクション、SharePointへのアイテム追加 と チャットへのメッセージ投稿 を追加します。

それぞれトリガーで追加した入力パラメータを用いて下図のようなフローにします。

ここからが地味~に重要なのですが、現時点ではここでフローの名前を設定できません。なので一度下書きとして保存する必要があります。

一度下書きとして保存し、フロー概要の画面から名前を編集します。名前を変更したら再度フローを編集し、フローを公開します。

これでフローの作成は完了です。

エージェントの画面に戻り、

入力パラメータの設定

次にフロー側で定義した入力パラメータにエージェント側からどうやって値をセットするのかを指定します。 パラメータの指定は事前に定義済みの変数を使う方法、PowerFxの式を使う方法、また自然言語で指定してAIに判断させる方法の3種類があります。

便利な定義済み変数

今回のケースでは単純に、ユーザーの質問(開始テキスト)と生成された回答をフローに渡します。この場合には事前に定義されたシステム変数を利用するのが便利で確実です。

例えばユーザーの質問全体であれば System.Recognizer.TriggeringMessage.Text を、回答の直後にその回答を記録する場合には最新のメッセージ Sysmte.Activity.Text を利用するとよいでしょう。

変数の概要 - Microsoft Copilot Studio | Microsoft Learn

事前定義されたシステム変数を追加するには、入力をカスタム値にし、入力欄の・・・から目的のシステム変数を選択します。

これでフローを実行するための入力の設定は完了です。

自然言語を用いた指定

一方で、質問内容からAIが読み取った内容の一部や、出力結果の一部をパラメータに設定したい場合には(気合でPowerFxを書くよりは)自然言語を用いてパラメータを指定したほうが簡単です。

たとえばチャット以外からエージェントを起動して、その中にある一部の情報 - メールの差出人など を個別に抜き出すときも自然言語で指定するとよいでしょう。

サービスへの接続

フローを追加できた!と思ってすぐエージェントでテストを行うと接続がされていないよーとエラーがエージェントから返されます。

始めてサービスに接続する場合には特に接続が追加されていませんので(正確には「接続参照」は作られているが、個人の接続が作られていない)、ここで接続の追加を行います。

エージェントが利用している接続の管理は、エージェントのテストペインの・・・から「接続の管理」を選びます。

接続の一覧が表示されるので、ツール・フローの中で利用している接続(ここではSharePointとTeams)を有効にします。

これで準備完了です。

テストして期待されるフローが実行されない場合には、エージェントの指示内容を見直して、明確にフローが実行されるように指定しましょう。

フローへのパラメータ渡しが行われない場合には、自然言語でのパラメータ出力の説明部分を見直してみてください。

豊富な機能をもつエージェント作成を目指して

ただ会話をしてナレッジを調べて回答してくれるエージェントから一歩踏み込んで、業務を一部代行してくれるようなエージェントを作りたい場合にはサービスとの接続、データの加工が必須となります。これを支えるのが今回紹介したエージェントフローです。

特に決まった順序での処理、定型的な処理が必要になる場合には、Power Automate がそうだったようにクラウドフローが有効です。

非定型な出力ができる、コンテキストを読み取れるCopilotエージェントの強みをさらに強化するべく、ぜひエージェントフローを試してみてください。