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