---
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` ループで回し、評価とフィードバックを行う エージェント と組み合わせ、評価者が基準を満たしたと判断するまで繰り返します。
- 複数の エージェント を並列実行します（例: Python の基本コンポーネントである `asyncio.gather` など）。相互依存しない複数タスクがある場合、速度向上に有用です。

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