---
search:
  exclude: true
---
# 複数エージェントのオーケストレーション

オーケストレーションとは、アプリ内でのエージェントのフローを指します。どのエージェントが実行されるのか、どの順序で実行されるのか、そして次に何が起こるかをどのように決定するのかということです。エージェントをオーケストレーションする方法は主に 2 つあります。

1.  LLM に意思決定させる  
    LLM の知能を利用して計画・推論し、その結果に基づいて次に取るステップを決めます。  
2.  コードでオーケストレーションする  
    コードによってエージェントのフローを決定します。

これらのパターンは組み合わせて使用できます。それぞれにトレードオフがあり、以下で説明します。

## LLM によるオーケストレーション

エージェントとは、 LLM が instructions、tools、handoffs を装備したものです。これにより、 LLM は自由形式のタスクに対して自律的に計画を立て、tools を使ってアクションを実行してデータを取得し、handoffs を活用してサブエージェントへタスクを委任できます。たとえば、リサーチエージェントには次のような tools を装備できます。

-  オンラインで情報を見つけるための Web 検索  
-  独自データや接続を検索するための File 検索および取得  
-  アクションを実行するための Computer 操作  
-  データ分析を行うための Code 実行  
-  計画立案やレポート作成などに優れた専門エージェントへの handoffs  

このパターンはタスクが自由形式であり、 LLM の知能に頼りたい場合に最適です。重要なポイントは次のとおりです。

1.  良いプロンプトに投資する  
    利用可能な tools、使用方法、遵守すべきパラメーターを明確にします。  
2.  アプリを監視し、改善を繰り返す  
    問題が発生した箇所を確認し、プロンプトを改善します。  
3.  エージェントに内省と改善を許可する  
    例として、ループで実行して自己批評させる、エラーメッセージを提供して改善させるなどがあります。  
4.  何でもこなす汎用エージェントではなく、特定タスクに特化したエージェントを用意する  
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` ディレクトリに多数の code examples があります。