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