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

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

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

これらのパターンは組み合わせて使用できます。各手法にはそれぞれのトレードオフがあります（以下参照）。

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

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

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