コンテンツにスキップ

エージェントオーケストレーション

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

このページは、クイックスタート または エージェントガイド を読んだあとにお読みください。このページは複数のエージェントにまたがるワークフロー設計についてのものであり、Agent コンストラクター自体についてではありません。

  1. LLM に意思決定を任せる方法: LLM の知能を使って計画、推論、そして取るべきステップの決定を行います
  2. コードでオーケストレーションする方法: コードによってエージェントの流れを決定します

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

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

Section titled “LLM によるオーケストレーション”

エージェントは、instructions、ツール、ハンドオフを備えた LLM です。つまり、オープンエンドなタスクが与えられたとき、LLM はそのタスクにどう取り組むかを自律的に計画し、ツールを使ってアクションを実行しデータを取得し、ハンドオフを使ってサブエージェントにタスクを委任できます。たとえば、リサーチエージェントには次のようなツールを備えられます。

  • オンラインの情報を見つけるための Web 検索
  • 独自データや接続先を検索するためのファイル検索と取得
  • コンピュータ上でアクションを実行するためのコンピュータ操作
  • データ分析を行うためのコード実行
  • 計画立案、レポート作成などを得意とする専門エージェントへのハンドオフ

Agents SDK では、主に 2 つのオーケストレーションパターンがよく使われます。

PatternHow it worksBest when
Agents as toolsマネージャーエージェントが会話の制御を維持し、agent.asTool() を通じて専門エージェントを呼び出します。1 つのエージェントに最終回答を担わせたい場合、複数の専門エージェントの出力を組み合わせたい場合、または共有ガードレールを 1 か所で適用したい場合
Handoffsトリアージエージェントが会話を専門エージェントにルーティングし、その専門エージェントがそのターンの残りでアクティブなエージェントになります。専門エージェントがユーザーに直接応答するようにしたい場合、プロンプトを絞り込みたい場合、または専門エージェントごとに異なる instructions / モデルを使いたい場合

専門エージェントにはサブタスクを手伝わせたいものの、ユーザー向け会話を引き継がせたくない場合は、agents as tools を使います。マネージャーは、どのツールを呼ぶか、そして最終的な応答をどう提示するかを決める責任を持ち続けます。API の詳細は ツールガイド を、並べて比較した例は エージェントガイド を参照してください。

ルーティング自体がワークフローの一部であり、選ばれた専門エージェントに会話の次の部分を担わせたい場合は、handoffs を使います。ハンドオフは会話コンテキストを保持しつつ、アクティブな instructions を専門エージェント向けに絞り込みます。API については ハンドオフガイド を、最小のエンドツーエンド例は クイックスタート を参照してください。

この 2 つのパターンは組み合わせることもできます。トリアージエージェントが専門エージェントにハンドオフし、その専門エージェントがさらに制約のあるサブタスクのために他のエージェントをツールとして使うこともできます。

このパターンは、タスクがオープンエンドで、LLM の知能に頼りたい場合に非常に適しています。ここで最も重要な戦術は次のとおりです。

  1. 良いプロンプトに投資すること。どのツールが利用可能か、どう使うか、どのような制約の中で動作しなければならないかを明確にします
  2. アプリを監視して反復改善すること。どこで問題が起きるかを確認し、プロンプトを改善します
  3. エージェントが内省して改善できるようにすること。たとえばループで実行して自己批評させる、あるいはエラーメッセージを与えて改善させます
  4. 何でもこなせる汎用エージェントを 1 つ用意するのではなく、1 つのタスクに特化して優れた性能を発揮する専門エージェントを用意すること
  5. evals に投資すること。これにより、エージェントを改善し、タスクをよりうまくこなせるようにできます

このスタイルのオーケストレーションを支える SDK の基本コンポーネントを知りたい場合は、ツールハンドオフエージェントの実行 から始めてください。

コードによるオーケストレーション

Section titled “コードによるオーケストレーション”

LLM によるオーケストレーションは強力ですが、コードによるオーケストレーションは、速度、コスト、性能の面でタスクをより決定的かつ予測可能にします。ここでよくあるパターンは次のとおりです。

  • structured outputs を使って、コードで検査できる適切な形式のデータを生成すること。たとえば、エージェントにタスクをいくつかのカテゴリーに分類させ、そのカテゴリーに基づいて次のエージェントを選ぶことができます
  • 複数のエージェントを連鎖させ、あるエージェントの出力を次の入力に変換すること。たとえばブログ記事の執筆というタスクを、リサーチ、アウトライン作成、本文執筆、批評、改善という一連のステップに分解できます
  • タスクを実行するエージェントを、評価とフィードバックを行うエージェントとともに while ループで実行し、評価エージェントが出力が特定の基準を満たしたと言うまで繰り返すこと
  • たとえば Promise.all のような JavaScript の基本機能を使って、複数のエージェントを並列実行すること。これは、互いに依存しない複数のタスクがある場合に速度の面で有効です

examples/agent-patterns に多数のコード例があります。