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

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

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

これらのパターンは組み合わせて使えます。それぞれにトレードオフがあります（下記参照）。

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

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

- Web 検索でオンラインの情報を見つける
- ファイル検索と取得でプロプライエタリなデータや接続先を検索する
- コンピュータ操作でコンピュータ上のアクションを実行する
- コード実行でデータ分析を行う
- 計画立案・レポート作成などに優れた特化型エージェントへのハンドオフ

このパターンは、タスクがオープンエンドで LLM の知性に頼りたい場合に有効です。ここで重要な戦術は次のとおりです。

1. 良いプロンプトに投資する。利用可能なツール、その使い方、運用すべきパラメーターの範囲を明確にします。
2. アプリを監視し、反復改善する。どこで問題が起きるかを把握し、プロンプトを改善します。
3. エージェントに内省と改善を許可する。たとえばループで実行して自己批評させる、あるいはエラーメッセージを与えて改善させます。
4. 何でもこなす汎用エージェントではなく、単一のタスクに特化して卓越したエージェントを用意する。
5. [evals](https://platform.openai.com/docs/guides/evals) に投資する。エージェントを訓練し、タスクの上達に役立ちます。

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

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

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

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