コンテンツにスキップ

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

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

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

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

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. 良いプロンプトに投資する。どのツールが利用可能か、どう使うか、どのパラメーター範囲内で動作すべきかを明確にします。
  2. アプリを監視し、反復改善する。どこで問題が起こるかを確認し、プロンプトを改善します。
  3. エージェントに内省と改善を許可する。たとえば、ループで実行して自己批評させる、またはエラーメッセージを与えて改善させます。
  4. どんなタスクにも対応する汎用エージェントを期待するより、1 つのタスクに優れた専門エージェントを用意します。
  5. evals に投資する。これによりエージェントを改善するための訓練ができ、タスク性能を向上させられます。

このスタイルのオーケストレーションを支える SDK の基本コンポーネントを確認したい場合は、toolshandoffsrunning agents から始めてください。

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

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

  • structured outputs を使い、コードで検査可能な適切な形式のデータを生成する。たとえば、タスクをいくつかのカテゴリーに分類するようエージェントに求め、そのカテゴリーに基づいて次のエージェントを選択できます。
  • 1 つの出力を次の入力に変換して複数エージェントを連結する。ブログ記事執筆のようなタスクを、リサーチ、アウトライン作成、記事執筆、批評、改善という一連のステップに分解できます。
  • 評価とフィードバックを行うエージェントと組み合わせて、タスク実行エージェントを while ループで実行し、評価側が出力が特定の基準を満たしたと言うまで続ける。
  • 複数エージェントを並列実行する。たとえば asyncio.gather のような Python の基本機能を使います。これは、相互依存しない複数タスクがある場合の高速化に有用です。

examples/agent_patterns に多数のコード例があります。

関連ガイド

  • 構成パターンとエージェント設定については Agents
  • Agent.as_tool() とマネージャースタイルのオーケストレーションについては Tools
  • 専門エージェント間の委譲については Handoffs
  • 実行ごとのオーケストレーション制御と会話状態については Running agents
  • 最小のエンドツーエンドなハンドオフ例については Quickstart