マルチエージェント
「オーケストレーション」とは、アプリ内で エージェント がどのように流れ、どの エージェント をどの順番で実行し、次に何をするかを決定するかを指します。 エージェント をオーケストレーションする方法は大きく 2 つあります。
- LLM に意思決定させる
これにより LLM の知能を活用して計画・推論し、その結果に基づいて次のステップを決定できます。 - コードによるオーケストレーション
コードで エージェント の流れを制御します。
これらのパターンは組み合わせて利用できます。それぞれにトレードオフがあり、以下で説明します。
LLM によるオーケストレーション
Section titled “LLM によるオーケストレーション”エージェント とは、instructions、tools、handoffs を備えた LLM です。オープンエンドなタスクが与えられたとき、 LLM は自律的に計画を立て、tools を使ってアクションを実行しデータを取得し、handoffs でサブ エージェント にタスクを委任できます。たとえば、リサーチ エージェント には次のようなツールを用意できます。
- Web 検索によるオンライン情報取得
- ファイル検索および取得での社内データや接続の検索
- コンピュータ操作 を用いたアクション実行
- コード実行 によるデータ分析
- 計画立案やレポート作成に長けた専門 エージェント へのハンドオフ
このパターンはタスクがオープンエンドで、 LLM の知能に頼りたい場合に最適です。重要なポイントは次のとおりです。
- 良いプロンプトに投資する
利用可能なツール、その使い方、守るべきパラメーターを明確に示します。 - アプリを監視しイテレーションを重ねる
問題が起きた箇所を確認し、プロンプトを改良します。 - エージェント に内省と改善を許可する
たとえばループで実行し自己批評させる、あるいはエラーメッセージを与えて改善させます。 - 何でもこなす汎用 エージェント ではなく、一つのタスクに特化した エージェント を用意する
- evals に投資する
これにより エージェント を訓練し、タスク遂行能力を向上させられます。
コードによるオーケストレーション
Section titled “コードによるオーケストレーション”LLM によるオーケストレーションは強力ですが、コードで制御すると速度・コスト・性能の面でより決定論的かつ予測可能になります。代表的なパターンは次のとおりです。
- structured outputs を用いて、コードで検査可能な 適切な形式のデータ を生成する
例: タスクをいくつかの カテゴリー に分類し、その カテゴリー に基づいて次の エージェント を選ぶ - 複数の エージェント を連鎖させ、一方の出力を次の入力に変換する
例: ブログ記事を書くタスクを、リサーチ → アウトライン作成 → 執筆 → クリティーク → 改善 の一連のステップに分解 - タスクを実行する エージェント を
while
ループで回し、評価・フィードバックを行う エージェント と組み合わせる
評価者が基準を満たしたと判断するまで繰り返します - JavaScript の
Promise.all
などを使って複数の エージェント を並列実行する
相互依存のない複数タスクを高速に処理したいときに有効
examples/agent-patterns
に多数のサンプルがあります。