エージェントオーケストレーション
エージェントオーケストレーションとは、アプリ内でのエージェントの流れを指します。どのエージェントが、どの順序で実行され、次に何が起こるかをどう判断するか、ということです。エージェントをオーケストレーションする主な方法は 2 つあります。
このページは、クイックスタート または エージェント の後にお読みください。このページは、
Agentコンストラクター自体ではなく、複数エージェントにまたがるワークフロー設計について説明しています。
- LLM に意思決定を任せる: LLM の知性を使って、計画・推論を行い、それに基づいて実行ステップを決定します
- コードでオーケストレーションする: コードによってエージェントの流れを決定します
これらのパターンは組み合わせて使えます。それぞれにトレードオフがあり、以下で説明します。
LLM によるオーケストレーション
Section titled “LLM によるオーケストレーション”エージェントは、instructions、ツール、ハンドオフを備えた LLM です。つまり、オープンエンドなタスクが与えられた場合、LLM は自律的にタスクへの取り組み方を計画できます。ツールを使ってアクションを実行しデータを取得し、ハンドオフを使ってサブエージェントにタスクを委譲できます。たとえば、リサーチエージェントには次のようなツールを備えられます。
- オンラインで情報を見つけるための Web 検索
- 独自データや接続先を検索するためのファイル検索と取得
- コンピュータ上で操作を実行するためのコンピュータ操作
- データ分析を行うためのコード実行
- 計画、レポート作成などに優れた専門エージェントへのハンドオフ
SDK の基本パターン
Section titled “SDK の基本パターン”Agents SDK では、次の 2 つのオーケストレーションパターンが特によく使われます。
| Pattern | How it works | Best when |
|---|---|---|
| Agents as tools | マネージャーエージェントが会話の制御を維持し、agent.asTool() を通じて専門エージェントを呼び出します。 | 1 つのエージェントに最終回答を担わせたい場合、複数の専門家の出力を統合したい場合、または共通のガードレールを 1 か所で適用したい場合 |
| ハンドオフ | トリアージエージェントが会話を専門エージェントに振り分け、その専門エージェントがそのターンの残りでアクティブなエージェントになります。 | 専門エージェントにユーザーへ直接応答させたい場合、プロンプトを集中させたい場合、または専門ごとに異なる instructions / モデルを使いたい場合 |
専門エージェントにはサブタスクを手伝ってほしいが、ユーザー向け会話は引き継がせたくない場合は、agents as tools を使います。どのツールを呼ぶか、最終応答をどう提示するかはマネージャーが責任を持ちます。API の詳細は ツール、比較例は エージェント を参照してください。
ルーティング自体がワークフローの一部で、選ばれた専門エージェントに会話の次の部分を担当させたい場合は、ハンドオフ を使います。ハンドオフは会話コンテキストを保持しつつ、アクティブな instructions を専門エージェント向けに絞り込みます。API は ハンドオフ、最小のエンドツーエンド例は クイックスタート を参照してください。
2 つのパターンは組み合わせ可能です。たとえば、トリアージエージェントが専門エージェントにハンドオフし、その専門エージェントがさらに限定的なサブタスクのために他のエージェントをツールとして使うこともできます。
このパターンは、タスクがオープンエンドで、LLM の知性に依存したい場合に適しています。特に重要な戦術は次のとおりです。
- 良いプロンプトに投資する。どのツールが利用可能か、どう使うか、どのパラメーター制約内で動作すべきかを明確にする
- アプリを監視して改善を繰り返す。どこで問題が起きるかを把握し、プロンプトを改善する
- エージェントが内省して改善できるようにする。たとえばループで実行して自己批評させる、またはエラーメッセージを与えて改善させる
- 何でもできる汎用エージェントを 1 つ用意するより、単一タスクに特化した専門エージェントを用意する
- evals に投資する。これにより、エージェントを改善し、タスク性能を高められます
このスタイルのオーケストレーションを支える SDK の基本 components を知りたい場合は、ツール、ハンドオフ、エージェントの実行 から始めてください。
コードによるオーケストレーション
Section titled “コードによるオーケストレーション”LLM によるオーケストレーションは強力ですが、コードによるオーケストレーションは、速度・コスト・性能の面でタスクをより決定的かつ予測可能にします。代表的なパターンは次のとおりです。
- structured outputs を使って、コード側で検査できる適切な形式のデータを生成する。たとえば、タスクをいくつかのカテゴリーに分類させ、そのカテゴリーに基づいて次のエージェントを選ぶ
- 複数エージェントを連鎖させ、1 つの出力を次の入力に変換する。たとえばブログ記事作成を、リサーチ、アウトライン作成、本文執筆、批評、改善という一連のステップに分解する
- タスク実行エージェントを、評価とフィードバックを行うエージェントとともに
whileループで回し、評価側が一定基準を満たしたと判断するまで続ける - 複数エージェントを並列実行する(例:
Promise.allのような JavaScript の基本 components を利用)。これは、相互依存しない複数タスクで速度向上に有効です
examples/agent-patterns に多数の code examples があります。