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

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

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

これらのパターンは組み合わせて使えます。各々のトレードオフは以下のとおりです。

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

エージェントとは、指示、ツール、ハンドオフを備えた 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 があります。