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

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

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

これらのパターンは組み合わせて使えます。各手法にはそれぞれのトレードオフがあります（後述）。

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

エージェントは、instructions、tools、ハンドオフを備えた 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` ループで回し、評価者が出力が所定の基準を満たしたと判断するまで続けます。
- 複数のエージェントを並列実行する。例えば Python の基本コンポーネントである `asyncio.gather` などを用います。これは互いに依存しない複数タスクがある場合に、速度面で有用です。

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