Hermes Agent を読み解く — マルチエージェント並列
連載「Hermes Agent を読み解く」第6回。
連載「Hermes Agent を読み解く」全10回
- 第1回 全体像と読み方
- 第2回 コアの会話ループ
- 第3回 状態管理とコンパクション
- 第4回 記憶アーキテクチャと人格
- 第5回 ツールシステム
- 第6回 マルチエージェント並列(本記事)
- [第7回 Kanban 永続タスクボード]
- [第8回 接続層とインタフェース総覧]
- [第9回 拡張運用]
- [第10回 セキュリティと安全運用]
はじめに — 1 体で足りないとき
エージェントが複雑なタスクに当たると、1 つの会話 context では足りなくなる。サブタスクごとに別の文脈で考えさせたい、あるいは複数モデルの意見を突き合わせたい。Hermes はこれを 2 つの異なるツールで解く——**delegate_task(仕事を分けて投げる)**と mixture_of_agents(多モデルで考えさせて統合する)。似て非なるこの 2 つを区別するのが今回の主眼だ。
1. delegate_task(同期 fan-out)
delegate_task は、子エージェント(AIAgent)を生成してサブタスクを任せる。
-
深さ制限:
MAX_DEPTH = 1。delegation.max_spawn_depthは[1, 3]にクランプされる。デフォルトでは「親 → 子」の 1 段までで、孫は生まれない -
並列度:
max_concurrent_children既定 3(delegate_tool.py:132)。子は最大 3 体まで同時に走る - 隔離: 各子は新規 context + 専用 task_id を持つ。親の会話を汚さず、独立した文脈で作業する
- 集約: 子の作業は丸ごと親に返るのではなく、要約だけが親に戻る
-
ブロックツール: 子には
DELEGATE_BLOCKED_TOOLSが適用され、一部ツールが封じられる
DELEGATE_BLOCKED_TOOLS の中身は {delegate_task, clarify, memory, send_message, execute_code}(delegate_tool.py:45)。意味を読むと設計意図が分かる。子に delegate_task を許すと際限なく孫・ひ孫が増える(深さ制限の二重の担保)。clarify は人間への問い返しだが、子は人間と直接対話しない。memory / send_message は永続メモリや外部送信という「外への副作用」で、子の暴走が外に漏れるのを防ぐ。execute_code はさらに別のツール実行口を開くため封じる。**「子は計算はしてよいが、外界への永続的副作用は持たせない」**という一貫した方針だ。
2. mixture_of_agents(多モデル統合)
mixture_of_agents は並列の意味がまったく違う。タスクを分割するのではなく、同じ問いを複数のフロンティアモデルに投げ、回答を統合する。
- 参照モデル群を
asyncio.gatherで並列に走らせる - その出力を aggregator が 1 つに統合する
- aggregator の既定は
anthropic/claude-opus-4.6(mixture_of_agents_tool.py:73のコード定数。設定で上書き可能。型番は陳腐化しうる点に注意) - 全体で 5 回の API 呼び出し(参照 4 + 集約 1)が標準構成
delegate_task が「分けて征服」なら、mixture_of_agents は「衆知を集める」。前者はサブタスクの水平分割、後者は同一問題への多角的アンサンブル。難問で単一モデルの当たり外れを均したいときに後者が効く。
3. セッション多重化との違い
紛らわしいのが Gateway の 128 セッション LRU(第8回)だ。これは「128 個の会話を同時に並列計算している」のではない。あくまで多重化——多数のチャット相手のセッションをメモリ上に LRU で保持し、来たメッセージを対応するセッションに振り分けるだけだ(idle TTL 1 時間で退去)。
並列「計算」は delegate_task / mixture_of_agents の領分、並列「多重化」は Gateway の領分。同じ「並列」でも層が違う。ここを混同すると Hermes の並列性能を読み違える。
4. 安全レール
子エージェントと多モデル実行には、暴走を抑えるレールが張られている。
-
子のブロックツール: §1 の
DELEGATE_BLOCKED_TOOLS - auto-deny: 子からの危険な承認要求は自動拒否(人間が居ない文脈で承認を求められても止める)
- ハートビート: 長時間処理中の子は生存シグナルを送り、無応答なら回収できる
- 割り込み伝播: 親が中断されれば、子にも中断が伝わる
「子は外界に副作用を持たない + 危険要求は自動拒否 + 親の中断が伝播する」——この 3 点で、fan-out した先が制御不能になる事態を防いでいる。
次回は、delegate_task の同期 fan-out では扱えない「永続・人間介入あり・クラッシュ耐性あり」の協調——Kanban 永続タスクボードを掘る。
対応マップ章: §12 / 行番号は hermes update でずれうる
クイックイタレート株式会社
IoT / 電力監視 / AI / 衛星・無線通信 / システムインテグレーション/
ローカル LLM・エージェント基盤に関するお問い合わせはお気軽にどうぞ。