エージェントオーケストレーション
オーケストレーションとは、アプリ内でのエージェントの流れを指します。どのエージェントが、どの順序で実行され、次に何が起こるかをどのように決定するか、ということです。エージェントをオーケストレーションする主な方法は 2 つあります。
- LLM に意思決定させる: LLM の知性を使って計画・推論を行い、それに基づいてどのステップを取るかを決定します。
- コードでオーケストレーションする: コードによってエージェントの流れを決定します。
これらのパターンは組み合わせて使えます。それぞれにトレードオフがあり、以下で説明します。
LLM によるオーケストレーション
エージェントは、instructions、tools、ハンドオフを備えた LLM です。つまり、オープンエンドなタスクが与えられた場合、LLM はそのタスクへの取り組み方を自律的に計画でき、tools を使ってアクションを実行しデータを取得し、ハンドオフを使ってサブエージェントにタスクを委譲できます。たとえば、リサーチエージェントには次のようなツールを備えられます。
- オンライン情報を見つけるための Web 検索
- 独自データや接続先を検索するためのファイル検索と取得
- コンピュータ上でアクションを実行するためのコンピュータ操作
- データ分析を行うためのコード実行
- 計画、レポート作成などに優れた専門エージェントへのハンドオフ
SDK の中核パターン
Python SDK では、次の 2 つのオーケストレーションパターンが最もよく使われます。
| パターン | 仕組み | 最適な場面 |
|---|---|---|
| Agents as tools | マネージャーエージェントが会話の制御を維持し、Agent.as_tool() を通じて専門エージェントを呼び出します。 |
1 つのエージェントに最終回答を担わせたい、複数の専門家の出力を統合したい、または共通のガードレールを 1 か所で適用したい場合。 |
| ハンドオフ | トリアージエージェントが会話を専門エージェントへ振り分け、その専門エージェントがそのターンの残りでアクティブなエージェントになります。 | 専門エージェントに直接応答させたい、プロンプトを集中させたい、またはマネージャーが結果を説明せずに instructions を切り替えたい場合。 |
専門エージェントが限定的なサブタスクを支援すべきで、ユーザー向け会話を引き継ぐべきではない場合は agents as tools を使います。ルーティング自体がワークフローの一部であり、選ばれた専門エージェントに次のやり取りを担わせたい場合は handoffs を使います。
2 つを組み合わせることもできます。トリアージエージェントが専門エージェントにハンドオフし、その専門エージェントがさらに限定的なサブタスクのために他のエージェントをツールとして呼び出すことも可能です。
このパターンは、タスクがオープンエンドで、LLM の知性に依存したい場合に非常に有効です。ここで最も重要な戦術は次のとおりです。
- 良いプロンプトに投資する。どのツールが利用可能か、どう使うか、どのパラメーター範囲内で動作すべきかを明確にします。
- アプリを監視し、反復改善する。どこで問題が起こるかを確認し、プロンプトを改善します。
- エージェントに内省と改善を許可する。たとえば、ループで実行して自己批評させる、またはエラーメッセージを与えて改善させます。
- どんなタスクにも対応する汎用エージェントを期待するより、1 つのタスクに優れた専門エージェントを用意します。
- evals に投資する。これによりエージェントを改善するための訓練ができ、タスク性能を向上させられます。
このスタイルのオーケストレーションを支える SDK の基本コンポーネントを確認したい場合は、tools、handoffs、running agents から始めてください。
コードによるオーケストレーション
LLM によるオーケストレーションは強力ですが、コードによるオーケストレーションは、速度・コスト・性能の面でタスクをより決定的で予測可能にします。ここで一般的なパターンは次のとおりです。
- structured outputs を使い、コードで検査可能な適切な形式のデータを生成する。たとえば、タスクをいくつかのカテゴリーに分類するようエージェントに求め、そのカテゴリーに基づいて次のエージェントを選択できます。
- 1 つの出力を次の入力に変換して複数エージェントを連結する。ブログ記事執筆のようなタスクを、リサーチ、アウトライン作成、記事執筆、批評、改善という一連のステップに分解できます。
- 評価とフィードバックを行うエージェントと組み合わせて、タスク実行エージェントを
whileループで実行し、評価側が出力が特定の基準を満たしたと言うまで続ける。 - 複数エージェントを並列実行する。たとえば
asyncio.gatherのような Python の基本機能を使います。これは、相互依存しない複数タスクがある場合の高速化に有用です。
examples/agent_patterns に多数のコード例があります。
関連ガイド
- 構成パターンとエージェント設定については Agents。
Agent.as_tool()とマネージャースタイルのオーケストレーションについては Tools。- 専門エージェント間の委譲については Handoffs。
- 実行ごとのオーケストレーション制御と会話状態については Running agents。
- 最小のエンドツーエンドなハンドオフ例については Quickstart。