エージェントオーケストレーション
オーケストレーションとは、アプリ内でのエージェントの流れを指します。どのエージェントが、どの順番で実行され、次に何が起こるかをどのように決定するのでしょうか。エージェントをオーケストレーションする主な方法は 2 つあります。
このページは、クイックスタートまたはエージェントを読んだ後にお読みください。このページは、
Agentコンストラクター自体ではなく、複数のエージェントにまたがるワークフロー設計について説明します。
- LLM に意思決定を任せる: LLM の知能を使って計画、推論し、それに基づいてどのステップを取るかを決定します。
- コードでオーケストレーションする: コードによってエージェントの流れを決定します。
これらのパターンは組み合わせて使用できます。それぞれにトレードオフがあり、以下で説明します。
LLM によるオーケストレーション
Section titled “LLM によるオーケストレーション”エージェントは、指示、ツール、ハンドオフを備えた LLM です。つまり、オープンエンドなタスクが与えられると、LLM はツールを使ってアクションを実行したりデータを取得したりし、ハンドオフを使ってサブエージェントにタスクを委任しながら、タスクへの取り組み方を自律的に計画できます。たとえば、リサーチエージェントには次のようなツールを備えられます。
- オンラインで情報を見つけるための Web 検索
- 独自データや連携先を検索するためのファイル検索と取得
- コンピュータ上でアクションを実行するためのコンピュータ操作
- データ分析を行うためのコード実行
- 計画やレポート作成などに優れた専門エージェントへのハンドオフ
SDK の主要パターン
Section titled “SDK の主要パターン”Agents SDK では、次の 2 つのオーケストレーションパターンが最もよく使われます。
| パターン | 仕組み | 最適なケース |
|---|---|---|
| Agents as tools | マネージャーエージェントが会話の制御を維持し、agent.asTool() を通じて専門エージェントを呼び出します。 | 1 つのエージェントに最終回答を担わせたい場合、複数の専門エージェントからの出力を統合したい場合、または共有ガードレールを 1 か所で適用したい場合 |
| ハンドオフ | トリアージエージェントが会話を専門エージェントにルーティングし、その専門エージェントがそのターンの残りでアクティブなエージェントになります。 | 専門エージェントにユーザーへ直接応答させたい場合、プロンプトの焦点を保ちたい場合、または専門エージェントごとに異なる指示 / モデルを使いたい場合 |
agents as tools は、専門エージェントにサブタスクを手伝わせたいが、ユーザー向けの会話を引き継がせたくない場合に使います。マネージャーは、どのツールを呼び出すか、最終応答をどのように提示するかを決定する責任を持ち続けます。API の詳細はツールを、並列比較の例はエージェントを参照してください。
ハンドオフ は、ルーティング自体がワークフローの一部であり、選択された専門エージェントに会話の次の部分を担わせたい場合に使います。ハンドオフは、会話コンテキストを保持しながら、アクティブな指示を専門エージェント向けに絞り込みます。API についてはハンドオフを、最小のエンドツーエンドの例についてはクイックスタートを参照してください。
2 つのパターンを組み合わせることもできます。トリアージエージェントが専門エージェントにハンドオフし、その専門エージェントが限定されたサブタスクのために他のエージェントをツールとして引き続き使うこともできます。
このパターンは、タスクがオープンエンドで、LLM の知能に頼りたい場合に適しています。ここで最も重要な戦術は次のとおりです。
- 良いプロンプトに投資してください。利用可能なツール、その使い方、どのパラメーターの範囲内で動作すべきかを明確にします。
- アプリを監視して改善を繰り返してください。どこで問題が起きるかを確認し、プロンプトを反復改善します。
- エージェントが内省して改善できるようにしてください。たとえば、ループ内で実行して自己批評させる、またはエラーメッセージを提供して改善させます。
- 何でも得意であることを期待される汎用エージェントではなく、1 つのタスクに秀でた専門エージェントを用意してください。
- evals に投資してください。これにより、改善し、タスクにより熟達するようエージェントをトレーニングできます。
このスタイルのオーケストレーションを支える SDK の基本コンポーネントを知りたい場合は、ツール、ハンドオフ、エージェントの実行から始めてください。
コードによるオーケストレーション
Section titled “コードによるオーケストレーション”LLM によるオーケストレーションは強力ですが、コードによるオーケストレーションでは、速度、コスト、パフォーマンスの面でタスクをより決定論的で予測可能にできます。一般的なパターンは次のとおりです。
- structured outputs を使って、コードで検査できる適切な形式のデータを生成します。たとえば、エージェントにタスクをいくつかのカテゴリーに分類させ、そのカテゴリーに基づいて次のエージェントを選択できます。
- あるエージェントの出力を次のエージェントの入力に変換して、複数のエージェントをチェーン化します。ブログ記事を書くようなタスクは、一連のステップ - リサーチ、アウトライン作成、ブログ記事の執筆、批評、改善 - に分解できます。
- タスクを実行するエージェントを、評価してフィードバックを提供するエージェントと一緒に
whileループで実行し、評価者が出力が特定の基準を満たしたと言うまで続けます。 - 複数のエージェントを並列に実行します。たとえば、
Promise.allのような JavaScript の基本コンポーネントを使います。互いに依存しない複数のタスクがある場合、速度の面で有用です。
examples/agent-patterns に多数のコード例があります。