
一个 Agent 不够用时Hermes Agent 的多智能体消息传递与协调机制【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agentHermes Agent 把子任务交给子智能体时传递的不是共享对象而是一份启动请求和一个句柄。本文不讲抽象协议而是沿着真实代码路径从入口、消息链路、隔离边界、可观测性四个角度说清它的多智能体通信是怎么组织的。先定入口谁有资格发起任务多智能体系统里第一个问题不是消息怎么发而是谁有权创建任务。Hermes Agent 对外部客户端的入口是 acp_adapter 目录下的 ACP 服务端客户端在 initialize 完成能力协商后通过 new_session 拿到会话 ID之后的每次 prompt 都带着 session_id 走。acp_adapter/session.py 里的 SessionManager 负责创建、fork、恢复、持久化与回放的全生命周期。目录里还有一个容易被忽略的小模块 provenance.py专门记录会话血缘一次会话经过分叉或压缩之后它能回答这个会话是从哪来的。排查多智能体行为时这种血缘信息往往比日志更有用。给读者的判断标准如果你要接一个自己的客户端先确认三件事——能创建会话、能带 ID 发 prompt、能收到结构化更新。acp_adapter/events.py 里工具进度、思考过程都以独立的 update 消息发出而不是混进主回复里这决定了你的 UI 可以按事件流渲染。消息链路委托是消息传递不是共享内存核心契约在 agent/subagent_lifecycle.py。父智能体提交 SubagentLaunchRequest里面是目标 goal、上下文 context、角色 role只允许 leaf 和 orchestrator 两种、允许的工具集 allowed_toolsets系统返回不可变的 SubagentHandle内含 subagent_id、parent_session_id、correlation_id 和一个 capability 字符串。有三个细节值得注意。其一capability 是 HMAC 签名伪造或改过的句柄过不了注册表校验防止拿着别人的句柄取结果。其二同一父会话下重复的 correlation_id 会被直接拒绝——它充当幂等键避免重试导致同一逻辑任务被启动两次。其三取回的 SubagentResult 有长度上限摘要最多 3.2 万字符并附带 result_hash 与用量元数据结果是可校验的交付物而不是一股无限长的输出流。如果你要做多路并行、汇总收口可以对照 agent/moa_loop.py多个参考模型并行作答聚合器负责综合单个参考失败不会拖垮全局系统会显式给出降级提示。对协调策略设计的启示是先定好聚合规则和失败容忍度再决定单路失败时输出什么。隔离边界子智能体为什么不能继承父身份最容易被忽视的一点父与子跑在同一个 Python 进程里os.environ 是共享的。agent/delegation_context.py 的模块注释记录了一个真实隐患——Kanban worker 进程内触发的定时任务若不隔离会继承 worker 的 HERMES_KANBAN_* 变量让一个不相干的任务去关闭 worker 的任务并覆盖真实结果。因此项目选择 ContextVar 而不是改全局环境变量delegated_child_context 标记子执行的代码作用域子进程派生时scrub_kanban_env 从环境变量里剔除调度器专属变量并注入子代标记。子智能体注册时agent/relay_runtime.py 负责 register_subagent、会话租约与回合上下文的记账让事件流始终有明确的会话归属。新增一种子任务类型时的检查清单一是会话 ID 是否有独立作用域二是子进程环境是否被清洗并打标三是权限范围是否为父级子集——启动 API 会强制 allowed_toolsets 必须包含在父级已启用工具集内越权请求直接报错。可观测性能否还原整段对话子智能体的状态机PENDING、RUNNING、SUCCEEDED、FAILED、INTERRUPTED、CANCELLED 等每一步都有时间戳和可选 diagnostic 字段。排查通信问题的顺序可以是先看状态卡在哪一环再看 diagnostic 的失败分类最后落到轨迹文件。agent/trajectory.py 负责轨迹保存agent/moa_trace.py 记录每一轮中各参考智能体的输入输出用来还原当时是谁说了什么。两个边界事实需要说清。第一运行中的子智能体只存在于进程内终态快照保留一小时进程重启后 reconnect 会如实报告无法重连而不会悄悄重跑任务。第二这套机制是句柄 状态机 线程池不是跨机器的消息队列若你要跨节点协调需要在这个契约之上自建持久化与投递层。它的契约是版本化的PUBLIC_CONTRACT_VERSION边界清晰适合作为自建分布式能力的地基。【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考