作業を分担し、それぞれを専門エージェントに任せたい場合は、複数のエージェントを使ったワークフローが役立ちます。設計で最初に決めるのは、ワークフローの各分岐で、どのエージェントがユーザーへの最終回答を担当するかです。
オーケストレーションパターンの選び方
| パターン | 適した場面 | 動作 |
|---|---|---|
| ハンドオフ | その分岐で専門エージェントに会話を引き継がせたい場合 | 制御が専門エージェントに移ります |
| ツールとしてのエージェント呼び出し | マネージャーが制御を維持し、特定の作業に限って専門エージェントを呼び出したい場合 | 引き続きマネージャーが回答を担当します |
ハンドオフによる応答の委譲
専門エージェントに裏方として支援してもらうだけでなく、次の応答そのものを任せたい場合は、ハンドオフが最も適しています。
ハンドオフによる委譲
JavaScript
import { Agent, handoff } from "@openai/agents";
const billingAgent = new Agent({ name: "Billing agent" });
const refundAgent = new Agent({ name: "Refund agent" });
const triageAgent = Agent.create({
name: "Triage agent",
handoffs: [billingAgent, handoff(refundAgent)],
});どのエージェントに作業を振り分けるかが明確になるよう、次の点を意識します。
- 各専門エージェントの担当範囲を絞ります。
は短く具体的に記述します。handoffDescription- 分岐先で異なる指示、ツール、ポリシーのいずれかが本当に必要な場合に限り、分岐を設けます。
より高度な使い方として、ハンドオフ時に構造化メタデータやフィルタリングした会話履歴を渡すこともできます。実装方法は言語によって異なるため、具体的な API については SDK ドキュメントを参照してください。
マネージャーが専門エージェントをツールとして呼び出すワークフロー
メインエージェントが最終回答を担当し、補助役として専門エージェントを呼び出す場合は、agent.asTool()
専門エージェントをツールとして呼び出す例
JavaScript
import { Agent } from "@openai/agents";
const summarizer = new Agent({
name: "Summarizer",
instructions: "Generate a concise summary of the supplied text.",
});
const mainAgent = new Agent({
name: "Research assistant",
tools: [
summarizer.asTool({
toolName: "summarize_text",
toolDescription: "Generate a concise summary of the supplied text.",
}),
],
});通常、次のような場合はこのパターンが適しています。
- マネージャーが専門エージェントの結果をまとめて最終回答を作る場合
- 専門エージェントが要約や分類など、範囲の明確なタスクを担当する場合
- 回答の担当を移さず、全体のワークフローを一つに保ち、その中で専門エージェントを呼び出したい場合
専門エージェントの追加は役割や要件が変わるときだけ
できる限り、まずはエージェントを一つだけ使います。専門エージェントを追加するのは、機能やポリシーを明確に切り分けられる、プロンプトが明確になる、トレースが読みやすくなるなど、はっきりした改善が見込める場合に限ります。
早い段階で分割すると、プロンプトやトレース、承認が必要な箇所が増えます。それでワークフローが改善するとは限りません。
次のステップ
どのエージェントが回答を担当するかが決まったら、実行時の動作や状態管理など、次に確認したい内容に応じてガイドを参照してください。