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

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

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

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

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

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

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

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

1. 良いプロンプトに投資する。利用可能なツール、使い方、どのパラメーター内で動作すべきかを明確にします。
2. アプリをモニタリングして改善を繰り返す。問題が起きる箇所を把握し、プロンプトを反復改善します。
3. エージェントが内省して改善できるようにする。例: ループで実行して自己批評させる、エラーメッセージを与えて改善させる、など。
4. 何でもできる汎用エージェントではなく、1 つのタスクに特化して卓越したエージェントを用意する。
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) にいくつかの code examples があります。