---
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` ループで回し、評価者が出力が所定の基準を満たしたと判断するまで繰り返す。
-   複数の エージェント を並列実行する（例: Python の基本コンポーネントである `asyncio.gather` の活用）。互いに依存しない複数タスクがある場合に速度面で有用です。

[`examples/agent_patterns`](https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns) に code examples を多数用意しています。