---
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 の基本コンポーネント (primitives) である `asyncio.gather` などを使います。相互に依存しない複数のタスクがある場合の高速化に有効です。

[`examples/agent_patterns`](https://github.com/openai/openai-agents-python/tree/main/examples/agent_patterns) にサンプルコードを多数用意しています。