---
search:
  exclude: true
---
# 複数エージェントのオーケストレーション

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

1.  LLM に意思決定させる方法:  LLM の知能を利用して計画・推論し、それに基づいて次のステップを決定します。  
2.  コードによるオーケストレーション: 自分のコードでエージェントのフローを決定します。

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

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

エージェントとは、instructions、tools、handoffs を備えた LLM です。これにより、オープンエンドなタスクが与えられた場合でも、LLM は自律的に計画を立て、tools を用いてアクションを実行・データを取得し、handoffs でサブエージェントにタスクを委譲できます。たとえば、リサーチエージェントには次のような tools を装備できます。

-   Web 検索でオンライン情報を取得  
-   ファイル検索と取得で独自データや接続先を検索  
-   コンピュータ操作で PC 上の操作を実行  
-   コード実行でデータ分析を行う  
-   計画立案やレポート作成に優れた専門エージェントへの handoffs  

このパターンはタスクがオープンエンドで、LLM の知能に頼りたい場合に最適です。重要なポイントは次のとおりです。

1. 良いプロンプトに投資する。利用可能な tools、その使い方、守るべきパラメーターを明確にしましょう。  
2. アプリをモニタリングして改善を重ねる。問題が起きた箇所を確認し、プロンプトを改善します。  
3. エージェントに内省と改善を許可する。たとえばループで実行し自己批判させる、エラーメッセージを渡して改善させるなどです。  
4. 何でもこなす汎用エージェントではなく、特定タスクに特化したエージェントを用意しましょう。  
5. [evals](https://platform.openai.com/docs/guides/evals) に投資する。これによりエージェントを訓練し、タスク性能を向上できます。  

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

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

-   [structured outputs](https://platform.openai.com/docs/guides/structured-outputs) を使って、コードで検査可能な適切な形式のデータを生成する。たとえばエージェントにタスクをいくつかのカテゴリーに分類させ、そのカテゴリーに基づいて次のエージェントを選択します。  
-   あるエージェントの出力を次のエージェントの入力へと変換して複数エージェントをチェーンする。ブログ記事作成なら、リサーチ → アウトライン作成 → 記事執筆 → 批評 → 改善という一連のステップに分解できます。  
-   タスクを実行するエージェントを `while` ループで回し、評価とフィードバックを行うエージェントが合格と判断するまで繰り返します。  
-   `asyncio.gather` など Python の基本コンポーネントで複数エージェントを並列実行する。相互依存のない複数タスクを高速化する際に有効です。  

[`examples/agent_patterns`](https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns) には多数のコード例があります。