マルチエージェント
オーケストレーションとは、アプリ内でのエージェントの流れを指します。どのエージェントを、どの順序で実行し、その後の流れをどう判断するのか。エージェントをオーケストレーションする主な方法は 2 つあります。
- LLM に意思決定させる方法: LLM の知性を使って、計画・推論し、次に取るべきステップを決めます
- コードでオーケストレーションする方法: コードでエージェントの流れを決定します
これらのパターンは組み合わせ可能です。トレードオフは以下のとおりです。
LLM によるオーケストレーション
Section titled “LLM によるオーケストレーション”エージェントは、instructions、tools、handoffs を備えた LLM です。つまり、オープンエンドなタスクに対して、LLM は自律的に計画し、ツールで行動してデータを取得し、ハンドオフでサブエージェントに委譲できます。たとえば、リサーチ用のエージェントには次のようなツールを備えられます。
- Web 検索でオンライン情報を見つける
- ファイル検索と取得で独自データや接続を横断して検索する
- コンピュータ操作で PC 上のアクションを取る
- コード実行でデータ分析を行う
- 計画、レポート執筆などに長けた専門エージェントへのハンドオフ
このパターンは、タスクがオープンエンドで LLM の知性に任せたいときに有効です。重要な戦術は次のとおりです。
- 良いプロンプトに投資する。利用可能なツール、その使い方、遵守すべきパラメーターを明確にする
- アプリを監視し反復する。問題点を見つけ、プロンプトを改善する
- エージェントに内省と改善を許可する。ループで実行して自己批評させる、あるいはエラーメッセージを与えて改善させる
- 何でもできる汎用エージェントではなく、1 つのタスクに特化して卓越するエージェントを用意する
- evals に投資する。エージェントの学習とタスク性能の向上に役立つ
コードによるオーケストレーション
Section titled “コードによるオーケストレーション”LLM によるオーケストレーションは強力ですが、コードによるオーケストレーションは速度・コスト・性能の面でより決定論的かつ予測可能になります。一般的なパターンは以下です。
- structured outputs を使って、コードで検査可能な 適切な形式のデータ を生成する。たとえば、タスクをいくつかのカテゴリーに分類させ、そのカテゴリーに応じて次のエージェントを選ぶ
- あるエージェントの出力を次のエージェントの入力に変換して連鎖させる。ブログ記事執筆を「調査→アウトライン作成→本文執筆→批評→改善」といった一連のステップに分解する
- タスク実行エージェントを
whileループで動かし、評価とフィードバックを行うエージェントと組み合わせ、評価者が一定の基準を満たしたと判断するまで繰り返す - 複数のエージェントを並列実行する(例:
Promise.allのような JavaScript の基本コンポーネントを利用)。相互依存のない複数タスクを高速化できる
examples/agent-patterns に多数の code examples があります。