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

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

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

これらのパターンは組み合わせ可能です。以下にそれぞれのトレードオフを説明します。

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

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

- Web 検索によるオンライン情報の収集
- ファイル検索と取得による独自データや接続先の探索
- コンピュータ操作による PC 上でのアクション実行
- データ分析のためのコード実行
- 計画立案、レポート作成などに長けた専門エージェントへのハンドオフ

このパターンは、タスクがオープンエンドで 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` ループで回し、評価者が基準を満たしたと判断するまで繰り返す。
- 複数のエージェントを並列実行する（例: `asyncio.gather` のような Python の基本コンポーネントを使用）。相互依存しない複数タスクがある場合の高速化に有効。

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