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

オーケストレーションとは、アプリ内での エージェント の流れのことです。どの エージェント を、どの順番で実行し、その後の判断をどのように行うか。エージェント のオーケストレーションには主に 2 つの方法があります。

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

これらのパターンは組み合わせて使えます。各手法には、以下のとおり長所と短所があります。

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

エージェント は、instructions、ツール、ハンドオフ を備えた 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) に多数の code examples があります。