タスク構造で選ぶエージェント配置パターン3選
AIエージェントを複数組み合わせるとき、どう並べればいいのか迷ったことはないだろうか。「とりあえず全部つなげてみた」結果、処理が遅くなったり、回答がブレたりした経験がある人も多いと思う。
実はエージェントの配置には、タスクの性質に応じた定番パターンがある。これを知っておくと、設計の見通しがぐっと良くなる。今回は代表的な3つのパターンを「どんなタスクに向いているか」という観点で整理してみた。
配置パターンを分けるポイント
まず、どのパターンを選ぶかを決める軸は主に4つある。
- 分岐の明確さ:入力を見た瞬間に「これは○○の担当」と判断できるか
- タスクの独立性:各処理が他の結果を待たずに進められるか
- 会話の継続性:前後の文脈を引き継ぐ必要があるか
- 統合の重さ:複数の結果をまとめる処理がどれくらい複雑か
これらの組み合わせで、適したパターンが変わってくる。
パターン①:ルーター(分類して振り分ける)
最初のパターンは「ルーター」。入力を分類して、該当する専門エージェントに振り分ける構造だ。
たとえば、ユーザーからの問い合わせを「技術的な質問」「料金の質問」「その他」に分けて、それぞれ専門のエージェントに渡すイメージ。カテゴリが明確に分かれているタスクに向いている。
ルーターが向いているケース
- 知識ドメインがはっきり分離している
- 入力を見れば振り分け先がほぼ確定する
- 軽量・高速に処理したい
LangChainのドキュメントでは、単一の振り分けにはCommand、複数のエージェントを並列で呼ぶにはSendというAPIが紹介されている。並列実行して結果を統合する、いわゆる「ファンアウト→ファンイン」も基本形として想定されている。
注意点
- 会話の文脈保持は別で設計する必要がある
- ルーター自体に履歴管理を持たせると複雑になりがち
- 振り分け条件が曖昧なタスクには不向き
ルーターはシンプルで予測可能性が高い反面、「文脈を踏まえて次の手を変える」ような動的なタスクには向かない。
パターン②:マネージャ(司令塔が会話を握る)
2つ目は「マネージャ」パターン。管理役のエージェントが会話全体を握り、必要に応じて専門エージェントを”ツール”として呼び出す構造だ。
OpenAI Agents SDKでは「Agents as tools」として紹介されている。管理役が最終回答を保持し、専門家はagent.asTool()のような形で呼ばれる。
マネージャが向いているケース
- 複数の専門家の出力を統合して回答を作りたい
- 共通のガードレール(安全性チェックなど)を一元管理したい
- 最終的な品質を司令塔がコントロールしたい
たとえば、コードレビューで「セキュリティ担当」「パフォーマンス担当」「可読性担当」の意見を集めて、最終的なフィードバックにまとめるようなケース。それぞれの観点は独立しているが、最後に統合する必要があるならマネージャが適している。
注意点
- 管理役の負荷が上がりやすい
- 専門エージェントの数が増えると呼び出しコストがかさむ
- 「とりあえず全部呼ぶ」設計だと遅くなる
マネージャは柔軟性が高い分、設計をサボると肥大化しやすい。どの専門家をどんな条件で呼ぶかのルールは明確にしておきたい。
パターン③:ハンドオフ(会話ごと引き継ぐ)
3つ目は「ハンドオフ」。振り分け役(トリアージ)が専門家を選び、選ばれた専門家がそのターンの主体になる構造だ。
マネージャとの違いは、専門家が会話を引き継ぐ点にある。マネージャは常に司令塔が前面に立つが、ハンドオフでは専門家が直接ユーザーとやり取りする。
ハンドオフが向いているケース
- 専門家ごとにプロンプトを絞って専門性を出したい
- 各分野で深い対話が必要
- 「今は○○モード」という切り替えが自然なタスク
カスタマーサポートで「技術サポート担当に引き継ぎます」と宣言してから、その担当が対応を続けるようなイメージだ。
注意点
- 引き継ぎの設計を誤ると、ユーザー体験が分断される
- 「さっき話したこと」が引き継がれないと混乱を招く
- 専門家間で行き来が多いと収拾がつかなくなる
ハンドオフは専門性を活かしやすい反面、体験の連続性を保つ工夫が必要になる。「誰に引き継ぐか」だけでなく「何を引き継ぐか」まで設計に含めることが重要だ。
並列実行を組み合わせるかどうか
3つのパターンに加えて、並列実行を使うかどうかも検討ポイントになる。Anthropicのドキュメントでは、並列ワークフローは「独立したタスクを同時に処理して速度を上げる」「複数の観点で確信度を高める」用途に向くと説明されている。
ただし、並列が常に正解ではない。以下のケースでは避けた方がいい。
- タスク間に順序依存がある
- 共有状態の競合が起きる
- 矛盾した結果の集約が難しい
- APIのレート制限やクォータ制約がある
「とりあえず並列で速くする」ではなく、タスクの独立性を見極めてから判断したい。
どのパターンを選ぶか
まとめると、選び方の目安はこうなる。
- 入力カテゴリが明確で、軽量に分類したい → ルーター
- 複数出力を統合して最終回答を作りたい → マネージャ
- 専門家に会話ごと任せて深い対話をしたい → ハンドオフ
また、OpenAIのドキュメントでは「LLMに判断させる」か「コードで流れを決める」かの2系統があり、混在も可能と説明されている。後者(コード主導)は速度・コスト・予測可能性で有利になりやすい。
最初から完璧な設計を目指す必要はない。まずはシンプルなルーターから始めて、タスクの複雑さに応じてマネージャやハンドオフに発展させていくのが現実的だと思う。