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

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

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

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

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

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

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