Install
openclaw skills install hermes-multiagent-skill突触式多智能体通信调度,像人类神经突触一样,毫秒级分发,精准对齐,把 100 个 Agent 同时协同的通信成本降到最低
openclaw skills install hermes-multiagent-skill核心设计: 当 100 个 Agent 同时协同工作,通信成本如何降到最低? Hermes 模仿人类神经突触:只有已建立连接(订阅)才传递消息,不做全量广播
HermesSessionsIntegration 依赖外部 sessions_spawn API 存在。
仅使用 HermesRouter / HermesAgent 手动订阅发布时无需 sessions_spawn。from skills.hermes_multiagent_skill import (
hermes, # 全局路由器
HermesRouter, # 可创建独立路由器
hermes_sessions, # 与 sessions_spawn 集成
HermesSessionsIntegration,
HermesMessage, # 消息结构
HermesAgent, # Agent 基类
)
from skills.hermes_multiagent_skill import hermes, HermesMessage
def my_handler(msg: HermesMessage):
print(f"收到: {msg.topic}, payload={msg.payload}")
# Agent 订阅自己关心的主题
hermes.subscribe(agent_id="my-agent-id", topic="task:code-review", handler=my_handler)
# 发布消息,自动分发给所有订阅者
hermes.publish(topic="task:code-review", from_agent="publisher-id",
session_id="session-id", payload={"pr": "..."})
from skills.hermes_multiagent_skill import hermes_sessions
# 1. spawn 子智能体后调用
session_key = ... # sessions_spawn 返回的 session key
hermes_sessions.on_agent_spawn(
session_key=session_key,
agent_id="code-review-agent",
hermes_topics=["task:code-review", "done:web-search"],
message_handler=lambda topic, payload: print(f"{topic}: {payload}")
)
# → 自动完成所有订阅,消息通过 message_handler 回调
# 2. 提交任务,自动分发
task_id = hermes_sessions.submit_task_to_agents(
task_type="code-review",
creator="user",
session_id="main",
payload={"pr": "https://github.com/..."}
)
# → Hermes 自动分给所有订阅了 code-review 的 Agent
# 3. Agent 退出自动清理
hermes_sessions.on_agent_exit(session_key)
# → 自动取消所有订阅,注销 Agent
from skills.hermes_multiagent_skill import HermesAgent, HermesRouter, HermesMessage
router = HermesRouter(max_workers=16)
agent = HermesAgent(agent_id="my-agent", router=router)
def handler(msg: HermesMessage):
print(msg.payload)
agent.subscribe("task:code-review", handler)
agent.publish("task:done", session_id="s1", payload={"result": "ok"})
agent.unsubscribe("task:code-review")
| 指标 | Hermes 协议 | 传统全量广播 |
|---|---|---|
| 总投递次数 | 40 | 160 |
| 总耗时 | 11.2 ms | 23.3 ms |
| 节省通信量 | 75% | - |
| 速度提升 | 2.1x | - |
Agent 越多,节省越明显:100 Agent 能节省 ~90% 通信量。
router = HermesRouter(max_workers=None, pool_max=1000)
router.subscribe(agent_id, topic, handler) # 订阅
router.unsubscribe(topic, agent_id) # 取消订阅
router.publish(topic, from_agent, session_id, payload, trace_id="") -> int # 发布
router.get_stats() -> dict # 统计
router.shutdown() # 关闭线程池
agent = HermesAgent(agent_id, router)
agent.subscribe(topic, handler) # 订阅主题
agent.unsubscribe(topic) # 取消订阅
agent.publish(topic, session_id, payload, trace_id="") -> int # 发布
agent.stats() -> dict # 当前 Agent 统计
hermes_sessions.on_agent_spawn(
session_key, agent_id, hermes_topics,
message_handler=None # Callable[[str, Any], None],默认静默丢弃
) -> HermesSubAgent
hermes_sessions.on_agent_exit(session_key)
hermes_sessions.submit_task_to_agents(
task_type, creator, session_id, payload
) -> task_id: str
hermes_sessions.publish_done(task_type, task_id, result, session_id, agent_id)
hermes_sessions.publish_system(event_type, payload, session_id, agent_id)
hermes_sessions.list_agents() -> List[HermesSubAgent]
hermes_sessions.stats() -> dict
unsubscribe 对同一 agent 多次调用安全,不会导致计数变负pending_task_ttl(默认 1 小时)的任务自动清除agent_id、空 topic 等参数会抛出 ValueErrorthreading.RLock 保护,50 并发压测零错误MIT