---
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 があります。