もしこれまで Foundry で単一のエージェントしか触ったことがないなら、この記事では少しだけ先へ進んでみましょう。2つのエージェントを1本のパイプラインにつなぎます。やることはとてもシンプルです。1つ目のエージェントがネットで資料を検索し、2つ目のエージェントが検索結果を自然な文章に要約します。最後に、このワークフローを外部から呼び出すためのコードも紹介します。
全体の流れで1行もオーケストレーション用のコードを書く必要はなく、画面上をクリックしていくだけで完了します。では始めましょう。
ステップ1:まず2つのエージェントを準備する
ワークフローを組む前に、まず「出演者」を用意する必要があります。ワークフロー自体は「誰を先に、誰を後に動かすか」を決めるだけで、実際に作業するのはエージェントです。
1. WebSearchAgent(検索エージェント)を作成する
Foundry ポータルに入り、Agents(エージェント)タブを見つけて、新しいエージェントを作成します。
- 名前:WebSearchAgent(名前は一度決めると変更できないので、よく考えて入力してください)
- モデル:デプロイ済みのモデルなら何でも構いません。例えば GPT 系列など
- Instructions:役割を明確にします。たとえば「あなたはWeb検索アシスタントです。ユーザーの質問に基づいてネット上で資料を検索し、見つけた関連情報をそのまま持ち帰ってください」
- Tools:Web Search(Web検索)ツールを追加します。これが重要で、これがないとネット検索はできません
設定したら保存します。
2. SummaryAgent(要約エージェント)を作成する
同じ方法でもう1つ作成します。
- 名前:SummaryAgent
- モデル:何か1つ選べばOKです
- Instructions:「あなたは要約アシスタントです。受け取った内容を、簡潔で分かりやすい要点にまとめてください」
- Tools:検索ツールは不要です。文字を加工するだけの役割です
これで、2つのエージェントが揃いました。
ステップ2:Workflowタブでパイプラインを組む
次に Workflows(ワークフロー)タブへ移動し、Create new workflow(新しいワークフローを作成)をクリックします。すると編成モードを選ぶ画面が表示され、3つの選択肢があります。
3つのモードは何をするのか?
順番に実行(Sequential / 順序編成) ← 今回これを選ぶ
いわばリレー方式です。A が終わったら結果を B に渡し、B が終わったら C に渡す……というように、一直線に最後まで進みます。誰が先で誰が後かは最初に固定され、エージェント側に選択の余地はありません。手順が明確で、前のステップが次のステップの土台になる場面に向いています。今回の「先に検索して、あとで要約する」は典型的な順序型の処理です。
Human-in-the-loop / 人が介在する編成
名前の通り、処理の途中に「人」が入ります。エージェントはある段階で止まり、あなたの判断を待ちます。たとえば承認、確認、追加情報の入力などです。あなたが承認して初めて次へ進みます。承認フロー、案件処理、コンプライアンス審査のような、人による確認が必要な高リスクな場面に適しています。要するに、AI に完全に任せない方式です。
Group chat / グループチャット編成
こちらは賑やかです。複数のエージェントを1つの「グループ」に入れて、同じテーマについて一緒に議論させます。発言し合い、補足し合い、ときには議論もしながら、最終的に結果をまとめます。固定的な順番処理ではなく協調型です。複数の役割が異なる視点からぶつかり合う必要があるタスク、たとえば企画レビューやブレインストーミングに向いています。
今回は「検索してから要約する」だけなので、順番に実行(Sequential) を選ぶのが最適です。
ステップ3:ノードをつなぐ
順序モードを選ぶと、キャンバスが表示され、最上部に Start(開始)ノードがあります。ここからは接続作業です。
-
Start ノードの下にあるプラス(+)をクリックする
メニューが表示され、いくつかのノード種類が出ます。Agent(エージェント) を選びます。
-
一番下の「次のノード」で対象を選ぶ
既存のエージェントを検索するよう求められるので、WebSearchAgent を入力して選択します。これで最初の役割は検索エージェントに渡されます。
-
2つ目のエージェントを設定する
WebSearchAgent を追加すると、2つ目のエージェント用の編集欄が表示されます。ここで SummaryAgent を選び、検索結果を受け取って要約させます。
-
仕上げ
SummaryAgent の「次のノード」では、今度はエージェントではなく End(終了) を選びます。これでパイプライン全体が閉じます。
Start ──▶ WebSearchAgent ──▶ SummaryAgent ──▶ End
保存を忘れないでください。Foundry は自動保存されないので、変更のたびに手動で Save を押す必要があります。押し忘れると、作業が無駄になります。
ステップ4:まずは画面上で試してみる
保存したら Run Workflow(ワークフローを実行) をクリックし、右側のチャット欄で適当に質問してみましょう。たとえば「最近のAIニュースを調べて」と入力します。すると WebSearchAgent が先に動いて検索し、そのあと SummaryAgent が結果を要約してくれるはずです。各ステップが順に点灯して進めば、パイプラインは正常に動いています。
最後に:外部からコードでこのワークフローを呼び出す
画面上で動かせるようになっただけでは第一歩です。実際に使うには、自分のプログラムから呼び出せる必要があります。
using Azure.AI.Projects;
using Azure.AI.Projects.OpenAI;
using Azure.Identity;
using OpenAI;
using OpenAI.Responses;
#pragma warning disable
var arr = File.ReadAllLines("C:/gpt/FoundryAgentWebSearch.txt");
var tenantId = arr[0];
var clientId = arr[1];
var clientSecret = arr[2];
var endpoint = arr[3];
var credential = new ClientSecretCredential(
tenantId: tenantId,
clientId: clientId,
clientSecret: clientSecret);
const string agentName = "SummaryWorkflow";
const string userMessage = "AgentHarness是什么";
var projectClient = new AIProjectClient(endpoint: new Uri(endpoint), tokenProvider: credential);
var conversation = projectClient.ProjectOpenAIClient.GetProjectConversationsClient().CreateProjectConversation();
var agentReference = new Azure.AI.Extensions.OpenAI.AgentReference(name: agentName);
var responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentReference, conversation.Value.Id);
ResponseResult response = responseClient.CreateResponse(userMessage);
Console.WriteLine(response.GetOutputText());
(Translated by GPT)
元のリンク:https://mp.weixin.qq.com/s/Qdkc6uZzJ_y98jO8GeEoDw?token=639931501&lang=zh_CN&wt.mc_id=MVP_325642