コンテンツにスキップ

エージェントオーケストレーション

エージェントオーケストレーションとは、アプリ内でのエージェントの流れを指します。どのエージェントが、どの順序で実行され、次に何が起こるかをどう判断するか、ということです。エージェントをオーケストレーションする主な方法は 2 つあります。

このページは、クイックスタート または エージェント の後にお読みください。このページは、Agent コンストラクター自体ではなく、複数エージェントにまたがるワークフロー設計について説明しています。

  1. LLM に意思決定を任せる: LLM の知性を使って、計画・推論を行い、それに基づいて実行ステップを決定します
  2. コードでオーケストレーションする: コードによってエージェントの流れを決定します

これらのパターンは組み合わせて使えます。それぞれにトレードオフがあり、以下で説明します。

LLM によるオーケストレーション

Section titled “LLM によるオーケストレーション”

エージェントは、instructions、ツール、ハンドオフを備えた LLM です。つまり、オープンエンドなタスクが与えられた場合、LLM は自律的にタスクへの取り組み方を計画できます。ツールを使ってアクションを実行しデータを取得し、ハンドオフを使ってサブエージェントにタスクを委譲できます。たとえば、リサーチエージェントには次のようなツールを備えられます。

  • オンラインで情報を見つけるための Web 検索
  • 独自データや接続先を検索するためのファイル検索と取得
  • コンピュータ上で操作を実行するためのコンピュータ操作
  • データ分析を行うためのコード実行
  • 計画、レポート作成などに優れた専門エージェントへのハンドオフ

Agents SDK では、次の 2 つのオーケストレーションパターンが特によく使われます。

PatternHow it worksBest when
Agents as toolsマネージャーエージェントが会話の制御を維持し、agent.asTool() を通じて専門エージェントを呼び出します。1 つのエージェントに最終回答を担わせたい場合、複数の専門家の出力を統合したい場合、または共通のガードレールを 1 か所で適用したい場合
ハンドオフトリアージエージェントが会話を専門エージェントに振り分け、その専門エージェントがそのターンの残りでアクティブなエージェントになります。専門エージェントにユーザーへ直接応答させたい場合、プロンプトを集中させたい場合、または専門ごとに異なる instructions / モデルを使いたい場合

専門エージェントにはサブタスクを手伝ってほしいが、ユーザー向け会話は引き継がせたくない場合は、agents as tools を使います。どのツールを呼ぶか、最終応答をどう提示するかはマネージャーが責任を持ちます。API の詳細は ツール、比較例は エージェント を参照してください。

ルーティング自体がワークフローの一部で、選ばれた専門エージェントに会話の次の部分を担当させたい場合は、ハンドオフ を使います。ハンドオフは会話コンテキストを保持しつつ、アクティブな instructions を専門エージェント向けに絞り込みます。API は ハンドオフ、最小のエンドツーエンド例は クイックスタート を参照してください。

2 つのパターンは組み合わせ可能です。たとえば、トリアージエージェントが専門エージェントにハンドオフし、その専門エージェントがさらに限定的なサブタスクのために他のエージェントをツールとして使うこともできます。

このパターンは、タスクがオープンエンドで、LLM の知性に依存したい場合に適しています。特に重要な戦術は次のとおりです。

  1. 良いプロンプトに投資する。どのツールが利用可能か、どう使うか、どのパラメーター制約内で動作すべきかを明確にする
  2. アプリを監視して改善を繰り返す。どこで問題が起きるかを把握し、プロンプトを改善する
  3. エージェントが内省して改善できるようにする。たとえばループで実行して自己批評させる、またはエラーメッセージを与えて改善させる
  4. 何でもできる汎用エージェントを 1 つ用意するより、単一タスクに特化した専門エージェントを用意する
  5. evals に投資する。これにより、エージェントを改善し、タスク性能を高められます

このスタイルのオーケストレーションを支える SDK の基本 components を知りたい場合は、ツールハンドオフエージェントの実行 から始めてください。

コードによるオーケストレーション

Section titled “コードによるオーケストレーション”

LLM によるオーケストレーションは強力ですが、コードによるオーケストレーションは、速度・コスト・性能の面でタスクをより決定的かつ予測可能にします。代表的なパターンは次のとおりです。

  • structured outputs を使って、コード側で検査できる適切な形式のデータを生成する。たとえば、タスクをいくつかのカテゴリーに分類させ、そのカテゴリーに基づいて次のエージェントを選ぶ
  • 複数エージェントを連鎖させ、1 つの出力を次の入力に変換する。たとえばブログ記事作成を、リサーチ、アウトライン作成、本文執筆、批評、改善という一連のステップに分解する
  • タスク実行エージェントを、評価とフィードバックを行うエージェントとともに while ループで回し、評価側が一定基準を満たしたと判断するまで続ける
  • 複数エージェントを並列実行する(例: Promise.all のような JavaScript の基本 components を利用)。これは、相互依存しない複数タスクで速度向上に有効です

examples/agent-patterns に多数の code examples があります。