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