---
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` ループで回します。
-   複数のエージェントを並列実行します（例: `asyncio.gather` のような Python の基本コンポーネント 経由）。相互依存しない複数タスクがある場合、速度向上に有用です。

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