---
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) に多数の code examples があります。