MoreRSS

site iconHJ | 杭建修改

《Java工程师修炼之道》作者。重度Java使用者,专注于JavaEE、系统架构、分布式等后端技术。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

HJ | 杭建的 RSS 预览

SOUL.md 和 AGENTS.md 到底有什么区别?Agent 配置别再混着写了

2026-04-06 00:17:00

很多人开始配置自己的 Agent 时,都会很快遇到一个问题:

SOUL.mdAGENTS.md 看起来都像是在“定义 Agent”,它们到底有什么区别?

如果这两个文件不分清,后面就很容易出现一种典型混乱:人格写进岗位说明,业务流程写进行为准则,文件越写越多,Agent 反而越来越不像一个稳定的助手。

先说结论:

  • SOUL.md 负责定义 这个 Agent 怎么做人、怎么做事、什么不能碰
  • AGENTS.md 负责定义 这个 Agent 是干什么的、服务谁、交付什么、按什么流程工作

一句话:

SOUL.md 是灵魂,AGENTS.md 是岗位说明书。

一、为什么很多人会把这两个文件写混

原因其实很简单:这两个文件都在描述 Agent,而且都不是技术配置项,而是自然语言规则。

于是很容易出现下面这种误写:

  • SOUL.md 里写“每周发 3 篇小红书”
  • AGENTS.md 里写“说话别太啰嗦,先给结论”

表面上看都能运行,但问题在于:

  • 文件边界开始模糊
  • 后续维护的人不知道该改哪
  • Agent 接收到的行为信号会互相打架

这就像你在公司里把“企业文化”和“岗位 KPI”写进同一张纸。

短期看没事,长期一定乱。

二、SOUL.md 适合放什么

SOUL.md 更适合放那些跨任务长期有效的行为原则

也就是:不管这个 Agent 今天在写文章、查资料、做排期,还是和你对话,它都应该稳定遵守的那一层规则。

它更像下面这些问题的答案:

  • 我应该怎么说话?
  • 我做判断时遵循什么原则?
  • 遇到边界问题时,什么必须先请示?
  • 我的默认工作风格是什么?

它适合放的内容,大致可以分成 4 类:

1)表达风格

比如:

  • 少客套,直接给价值
  • 先结论,后细节
  • 默认中文简体
  • 可以适度直接,但不要油腻

2)行为原则

比如:

  • 先做功课再提问
  • 先保护用户,再追求效率
  • 不编造来源
  • 不确定信息必须标注待核实

3)边界与禁区

比如:

  • 未经确认,不对外发布
  • 不擅自联系他人
  • 不替用户做超出授权的决定
  • 涉及隐私和敏感内容默认谨慎

4)协作偏好

比如:

  • 输出长度偏中等
  • 不要太啰嗦
  • 允许直接指出低效做法
  • 遇到复杂问题先自己查,不要先把问题甩回给用户

这些东西有一个共同点:

它们不依赖具体业务,而定义的是这个 Agent 的稳定人格和做事方式。

三、AGENTS.md 适合放什么

如果说 SOUL.md 解决的是“怎么做人”,那么 AGENTS.md 解决的就是“你到底是干什么的”。

它更适合放那些业务身份、职责范围、目标、流程和输出物

它更像下面这些问题的答案:

  • 这个 Agent 的岗位是什么?
  • 它服务谁?
  • 它追求什么业务目标?
  • 它平时交付哪些内容?
  • 它按照什么 workflow 工作?

通常来说,AGENTS.md 更适合放 5 类内容。

1)角色定位

比如:

  • 你是内容运营助理
  • 你是产品助理
  • 你是客服助理
  • 你是销售支持助理

2)业务目标

比如:

  • 沉淀知识资产
  • 建立个人品牌
  • 提升团队交付效率
  • 降低重复沟通成本

3)服务对象 / 平台 / 受众

比如:

  • 主要平台:公众号、小红书
  • 目标受众:AI 从业者、程序员、Java 工程师
  • 服务对象:HJ 本人和他的内容业务

4)核心工作流

比如:

  • 收集输入
  • 梳理观点
  • 生成提纲
  • 产出长文 / 短帖 / 配图提示词
  • 发布前检查
  • 复盘内容表现

5)默认交付物和衡量标准

比如:

  • 默认产出长文、小红书文案、短帖摘要、封面文案
  • 复盘优先级:阅读 > 收藏 > 转发
  • 每周更新频率和平台节奏

这些内容有一个共同点:

它们定义的是这个 Agent 的工作岗位,而不是性格。

四、最直白的判断方法:一句规则到底回答了什么问题

如果你拿到一条规则,不知道该放哪,就问自己一句:

它到底在回答“我怎么做事”,还是“我做什么事”?

如果它回答的是“我怎么做事”

放进 SOUL.md

例如:

  • 少废话
  • 先查再问
  • 不编造
  • 敏感动作先确认

如果它回答的是“我做什么事”

放进 AGENTS.md

例如:

  • 默认输出公众号长文和小红书文案
  • 主要平台是公众号和小红书
  • 工作流是收集 → 梳理 → 成文 → 检查 → 复盘
  • 复盘指标优先看阅读和收藏

这是区分这两个文件最省脑子的办法。

五、一个常见误区:把所有东西都堆进 SOUL.md

很多人喜欢把一切“对 Agent 的要求”都堆进 SOUL.md,因为它名字听起来更高级。

但这会带来两个问题:

  • SOUL.md 变成一个无边界的大杂烩
  • AGENTS.md 反而变空,只剩一句角色介绍

这样做的后果是,Agent 会越来越像“有很多态度,但没什么明确职责”。

反过来也一样。

如果你把所有业务流程和 KPI 都塞进 AGENTS.md,却不定义风格和原则,那 Agent 通常会变成另一个问题:

  • 很像流程机器人
  • 但没有稳定的判断框架
  • 做事时容易僵、容易飘、容易忽冷忽热

所以真正合理的方式,不是二选一,而是:

  • SOUL.md 负责“人格和准则”
  • AGENTS.md 负责“业务和工作”

两者配合,Agent 才会既稳定,又有明确产出。

六、如果你要自己配 Agent,我建议按这个方式写

最简单的模板可以是这样。

SOUL.md

只保留 4 类:

  • 风格
  • 原则
  • 边界
  • 协作偏好

AGENTS.md

只保留 5 类:

  • 角色
  • 目标
  • 受众 / 平台
  • 工作流
  • 交付物 / KPI

如果你按这个思路来写,后面维护会轻松很多。

因为每次新增规则时,你都知道自己是在改:

  • “这个 Agent 的做事方式”
  • 还是“这个 Agent 的业务职责”

这两个东西一旦分清,整个 Agent 配置就会明显稳定下来。

结语

Agent 配置这件事,表面上看是在写几个 Markdown 文件,本质上其实是在回答两个问题:

  • 这个助手应该成为什么样的人?
  • 这个助手应该承担什么样的工作?

前一个问题,交给 SOUL.md

后一个问题,交给 AGENTS.md

如果你把这两个文件的边界理顺了,后面很多配置问题都会变简单。

因为你终于不是在“堆规则”,而是在真正地设计一个有灵魂、也有岗位职责的 Agent。

AI Agent 正在进入工程化深水区:从代码模型、生产框架到多智能体协作协议

2026-03-31 01:10:00

过去一年,围绕 AI Agent 的讨论大多集中在模型能力本身。

但如果把最近几篇有代表性的内容放在一起看,一个更关键的变化已经出现:AI Agent 的竞争重心,正在从“模型能力展示”转向“工程系统能力”。

这里的“工程系统能力”,不是一句空话。它至少包含四层:

  • 面向特定任务优化的模型能力
  • 可接入生产环境的框架能力
  • 能控制复杂度的架构能力
  • 支撑协作扩展的协议能力

如果只记一条:2026 年的 Agent,已经不再只是“大模型 + 工具调用”,而是在走向一套完整的软件工程体系。

一、模型层正在专用化:从“全能模型”转向“任务最优模型”

以 Cursor 发布 Composer 2 为例,这类发布最容易被表面解读为“又一个新模型上线”。但如果只盯着 benchmark 分数,其实会错过真正重要的信息。

真正值得关注的是:垂直场景优化,正在从提示词层面的工程技巧,变成底层模型层面的产品策略。

过去大家默认的路径是:

  • 先用一个尽可能强的通用模型
  • 再通过 system prompt、工具定义、上下文拼接去适配业务场景

而现在,越来越多产品开始反过来做:

  • 先承认模型不需要全能
  • 再针对核心任务做专门训练和强化
  • 最后用更低成本、更高稳定性去打场景穿透

在代码生成领域,这个逻辑尤其成立。因为对开发者来说,关键指标从来不是“会不会聊天”,而是:

  • 多步修改是否稳定
  • 大工程上下文下是否少犯错
  • 工具调用链条是否顺
  • 生成结果是否更接近可运行状态
  • 成本是否足够低,能支撑高频使用

所以代码模型的价值,不在于“像人一样懂很多”,而在于“在狭窄但高价值的任务里做到足够可靠”。

从工程视角看,这一步非常重要。因为一旦模型专用化开始成立,系统设计就会自然进入下一阶段:

  • 不同任务会使用不同模型
  • 模型之间会形成分工
  • 上层调度必须决定何时调用哪个能力
  • 成本控制开始成为架构问题,而不是单次推理问题

一句话:模型层一旦专用化,Agent 系统就不再是单核结构,而开始具备多能力模块化特征。

二、框架层正在生产化:企业真正要的不是“聪明”,而是“可治理”

如果模型层的关键词是“专用化”,那么框架层的关键词就是“生产化”。

以 AgentScope Java 这类框架为代表,可以明显看到一个趋势:企业级 Agent 框架的卖点,已经从“快速做 Demo”转向“纳入生产治理体系”。

一个 Demo 能跑起来,解决的是“能不能演示”;而一个生产系统能跑下去,解决的是另一组完全不同的问题:

  • 能否中断执行
  • 能否保存状态并恢复
  • 能否限制文件、网络、工具访问权限
  • 能否观察中间推理过程
  • 能否记录请求链路和成本
  • 能否融入已有服务体系、监控体系和发布体系

这些问题很少出现在社交媒体上的 Agent 演示视频里,但它们决定了系统是否能进入真实业务。

这也是为什么 Java 框架在企业 Agent 讨论里开始重新获得存在感。不是因为 Java 在模型创新上领先,而是因为大量企业核心系统、权限体系、服务治理体系本来就在 Java 世界里。谁更容易接入这些系统,谁就更容易跨过“从试验到生产”的门槛。

从架构角度看,生产化框架至少意味着三件事。

1)Agent 不再只是一次性调用,而是一个有生命周期的执行体

它可能被启动、暂停、中断、恢复、观察、接管。这说明 Agent 已经不再是单纯的“函数调用”,而更接近“状态化任务单元”。

2)Agent 不再只追求最终答案,而要暴露过程

生产环境里,最终结果固然重要,但更重要的是:

  • 它是怎么得出这个结果的
  • 过程中调用了哪些工具
  • 哪一步失败了
  • 到底是模型错了,还是工具错了,还是上下文错了

没有过程可见性,就没有治理能力。

3)Agent 必须服从企业原有系统边界

企业不会为了 Agent 重写整套权限和运维体系。真正可落地的框架,必须反过来适应既有系统,而不是要求企业围着 Agent 转。

因此,从这一步开始,Agent 就越来越像软件基础设施问题,而不是一个单独的 AI 功能问题。

三、架构层正在分层化:多智能体不是默认架构,而是复杂度阈值后的选择

过去一段时间,“多智能体”几乎成了 Agent 讨论里的政治正确。但真正有实践经验的团队,反而越来越强调另一条原则:Single Agent First。

这个原则看起来保守,其实非常工程化。原因很简单:多智能体架构虽然听起来强大,但它天然会引入新的系统成本:

  • 角色划分成本
  • 上下文切分成本
  • 调度链路成本
  • 状态同步成本
  • 调试与排障成本
  • Token 与时延成本

如果业务复杂度还没高到需要这些机制,那么多智能体带来的收益,很可能不足以覆盖它引入的复杂度。

因此,更合理的路径不是“先上多智能体,再想办法降复杂度”,而是:

  • 先用单智能体 + 工具解决大多数任务
  • 只有在复杂度跨过阈值时,才引入多角色协作

这个“阈值”通常出现在几类场景:

  • 上下文无法放进一个窗口
  • 不同职责需要严格隔离
  • 子任务天然适合并行
  • 流程必须分段控制与校验
  • 不同团队需要分别维护不同智能体能力

这意味着,多智能体的本质不是“更聪明”,而是更适合处理复杂系统中的职责拆分与流程编排问题。

从这一点看,多智能体更像微服务演进中的服务拆分:

  • 在规模小、逻辑简单时,单体更高效
  • 在复杂度上升后,拆分才开始有意义
  • 拆分本身不是目标,控制复杂度才是目标

四、协议层正在标准化:Agent 系统开始进入“协作时代”

当模型专用化、框架生产化、架构分层化之后,会自然冒出下一个问题:多个 Agent 之间如何协作?

如果没有标准协议,所谓“多智能体”很容易退化成一种脆弱的私有编排:

  • 谁都能发消息,但格式不统一
  • 上下文传递全靠手工拼接
  • 能力授权边界模糊
  • 任务交付物缺少稳定结构
  • 一旦换一个 Agent 实现,协作链路就断掉

这也是 A2A 这类协议值得关注的原因。它的价值,不是又发明了一个新缩写,而是试图回答协作系统里最基础的几个问题:

  • 如何发现具备特定能力的 Agent
  • 如何把任务以结构化方式委托出去
  • 如何只传递最小必要上下文
  • 如何定义可验证的交付规格
  • 如何在协作过程中进行受控授权

这件事为什么重要?因为它标志着“上下文工程”的边界正在上移。

过去谈上下文工程,大家主要关注的是:

  • prompt 怎么写
  • 检索内容怎么塞
  • tool schema 怎么设计
  • memory 如何注入

但在多 Agent 系统里,这些问题不再只发生在“人和模型之间”,还发生在“Agent 和 Agent 之间”。

于是新的工程问题出现了:

  • 哪些上下文应该共享
  • 哪些上下文必须隔离
  • 信息切片粒度如何定义
  • 任务目标如何结构化描述
  • 结果如何自动验收和回流

当这些问题成为主问题时,Agent 系统的本质就已经变了。它不再只是“一个大模型加若干外挂工具”,而是在向“分布式协作系统”靠近。

五、把四层放在一起看:Agent 正在从能力组件变成系统基础设施

把前面四层连起来,可以看到一条非常清晰的演进链路:

  • 模型层专用化,解决特定任务的能力效率问题
  • 框架层生产化,解决生产环境的治理问题
  • 架构层分层化,解决复杂度与职责分工问题
  • 协议层标准化,解决系统扩展与协作问题

这四者不是并列关系,而是递进关系。

因为一旦你开始使用专用模型,就会需要调度;一旦你进入调度,就会需要框架与治理;一旦任务复杂度提高,就会需要角色拆分;一旦角色拆分发生,就会需要标准化协作协议。

所以今天讨论 Agent,最容易犯的错误,就是仍然把它理解成一个单点能力增强工具。实际上,它正在逐步变成一套软件系统的基础设施层。

从这个意义上说,Agent 的下半场竞争,本质上是软件工程能力的竞争。

六、对技术团队的实际启示

如果这个判断成立,那么技术团队下一步最值得做的,不是继续沉迷“模型榜单更新”,而是反过来重建自己的落地顺序:

1)先定义任务,再定义智能

不要先问“哪个模型最强”,要先问:

  • 这个任务到底是问答、执行、编排还是协作
  • 结果是开放式输出,还是结构化交付
  • 容错成本高不高
  • 有没有人工接管点
  • 是否需要审计与追踪

没有任务边界,讨论 Agent 架构几乎一定会失真。

2)先做单智能体闭环,再决定是否升级多智能体

先验证这几个东西:

  • 工具链路是否稳定
  • 上下文设计是否有效
  • 失败主要来自哪里
  • 哪些环节真的需要拆角色
  • 并发是否真的带来收益

很多“多智能体需求”,最后会发现其实是“单智能体上下文和工具设计没做好”。

3)尽早补齐治理面,而不是最后补

包括:

  • 状态保存
  • 权限隔离
  • 中断恢复
  • 过程观测
  • 成本统计
  • 回放与审计

这些能力越晚补,代价越大。因为它们通常不是外挂功能,而是会反向影响你的框架选择与系统边界。

结语

如果只看单个新闻,最近这些变化看起来是分散的:一个代码模型升级了,一个 Java Agent 框架火了,一篇多智能体选型文章刷屏了,又出现了新的协作协议。

但把它们放在一起,就会看到更本质的趋势:AI Agent 正在从“可演示的智能能力”,演化成“可治理、可扩展、可协作的软件系统”。

这意味着接下来的竞争,不只是“谁更聪明”,而是:

  • 谁的模型更适合任务
  • 谁的框架更适合生产
  • 谁的架构更能控制复杂度
  • 谁的协议更能支撑协作扩展

对于真正做落地的人来说,这反而是个好消息。因为从这一刻开始,Agent 不再只是模型厂商的游戏,而重新变成了系统设计者、架构师和工程团队的主战场。

OpenClaw Gateway 三种对外接口怎么选?

2026-03-24 16:36:02

很多团队在接 OpenClaw Gateway 时,第一反应是:到底该用哪个接口?

答案不是“哪个更新就用哪个”,而是看你的目标:是先把能力接入,还是把系统做成可控、可观测、可治理的平台。

如果你只记一条:Chat Completions 适合快接入,OpenResponses 适合复杂编排,Gateway WS 适合平台控制面。

本文按工程落地视角,把三种协议放到同一张决策图里讲清楚。

先明确一个问题:同一个 Gateway 为什么要提供三种接口?

这是“分层设计”而不是“重复造轮子”——兼容层负责接入效率,原生协议负责控制力与系统治理。

一、三种接口各自解决什么问题

1)Gateway 协议(WebSocket)

这是 OpenClaw 的原生控制面协议。客户端通过 WebSocket 握手(connect),声明 role/scopes/caps,然后以 req/res/event 方式通信。

它最适合做:

  • 自研控制台
  • 会话与节点能力统一编排
  • 审批、配置、设备配对、运维级治理

一句话:最完整,但接入门槛最高。


2)OpenAI Chat Completions(/v1/chat/completions

这是面向存量生态的兼容接口。你已有 OpenAI SDK 或上层框架时,几乎可以低改造迁移。

它最适合做:

  • 快速打通业务链路
  • 验证模型+工具能力
  • 已有 OpenAI 生态资产复用

一句话:上手最快,迁移成本最低。


3)OpenResponses(/v1/responses

这是更现代的兼容接口,强调 item 化输入、工具回合、多模态输入(文件/图片)和更细颗粒度的流式事件。

它最适合做:

  • 复杂工具调用回合
  • 多模态上下文输入
  • 需要更强可观测事件流的 Agent 系统

一句话:语义更完整,适合复杂场景。


二、工程决策矩阵(可直接拿去评审)

维度 1:接入复杂度

  • 最低:Chat Completions
  • 中等:OpenResponses
  • 最高:Gateway WS

维度 2:生态兼容性

  • 最强:Chat Completions
  • 次之:OpenResponses
  • 最弱(但可控性最高):Gateway WS

维度 3:工具与回合表达能力

  • Chat Completions:够用,偏经典函数调用形态
  • OpenResponses:更适合复杂工具回合与结构化交互
  • Gateway WS:可做全链路控制与事件编排

维度 4:可观测性与治理

  • Chat Completions:偏业务调用视角
  • OpenResponses:事件语义更细,观测更自然
  • Gateway WS:控制面最完整,适合平台治理

维度 5:长期演进空间

  • Chat Completions:适合作为入口层
  • OpenResponses:适合作为复杂业务主接口
  • Gateway WS:适合作为平台核心控制面

三、三类典型团队该怎么选

场景 A:你要“这周上线”

选 Chat Completions。

原因:复用现有 SDK,改造最小,最快出结果。

场景 B:你要“复杂 Agent 工作流”

选 OpenResponses。

原因:输入输出语义更现代,工具回合、多模态、事件流更顺手。

场景 C:你要“公司级 AI 平台控制面”

选 Gateway WS。

原因:只有原生协议能把角色、权限、节点能力、审批、配置纳入一套统一治理模型。


四、推荐落地路径(避免一步到位翻车)

Phase 1:先用 Chat Completions 跑通业务闭环

目标:验证价值,不纠结架构完美。

Phase 2:把复杂链路迁到 OpenResponses

目标:提升工具编排能力和事件可观测性。

Phase 3:控制治理能力下沉到 Gateway WS

目标:统一权限、审批、配置与节点编排,做成平台而不是脚本集合。


五、生产防坑清单

  1. 协议选型不要脱离组织能力:团队不会维护 WS 客户端,就别上来就全量 WS。
  2. 先定义会话键与幂等策略:没有幂等,重试就是事故放大器。
  3. 日志字段跨协议统一:requestId/sessionKey/runId 必须统一,才能追踪问题。
  4. 权限边界先于功能边界:先做“能不能做”,再做“做什么更快”。
  5. 演进路线写进技术方案:短期兼容层、长期控制面,避免每次重构都推倒重来。

结语

OpenClaw Gateway 三种接口不是替代关系,而是分层协作关系。

对工程团队来说,真正重要的不是“选哪个最先进”,而是:

  • 当前阶段怎么最快交付价值
  • 下一阶段怎么平滑升级
  • 最终怎么形成可控、可观测、可治理的平台能力

这才是协议选型的终局。

Agent 落地不靠更强模型:后端团队先补这 4 个治理动作

2026-03-18 21:00:00

最近一轮知识库信息放在一起看,结论很清楚: Agent 已经从“能不能做”进入“能不能稳定做、持续做、规模做”。

真正决定成败的,不是模型上限,而是工程治理下限。

很多团队现在都能把 Agent 跑起来:接 IM、调工具、跑自动化流程。 但一上真实业务就出问题:串会话、误操作、成本飙升、结果不可复盘。 这类问题本质上不是 Prompt 问题,而是系统边界没有建好。

一、会话与并发治理:先保证可预测,再谈性能

第一步不是提并发,而是先把并发“关进笼子”:

  • 同会话串行执行,避免上下文串台
  • 消息队列策略固定(collect / followup)
  • 设置会话排队上限、超时与丢弃规则

如果这一层没做,业务一上量就会出现“同一用户前后文互相污染”,后面所有优化都白做。

二、工具权限治理:把“会执行”变成“可控执行”

Agent 接了终端、文件、外部 API 后,风险不再是“答错一句话”,而是“做错一件事”。

必须落地三件事:

  • 工具最小权限(默认 deny)
  • 高风险动作审批(删除、外发、系统修改)
  • 审计日志留痕(谁在何时执行了什么)

没有这层,任何一次误调用都可能直接变生产事故。

三、稳定性与成本治理:把失败设计成默认路径

生产环境里,失败不是例外,是常态。 要提前把“故障时怎么继续”设计好:

  • 模型/密钥 fallback 链
  • 限流与错误指数退避
  • 上下文压缩 + 工具结果修剪

目标只有一个:在坏环境下还能跑,不把服务打穿。

四、内容运营治理:把一次经验变成团队资产

纯技术落地如果不转成“可复用内容”,团队学习曲线会重复踩坑。

建议固定复盘模板:

  • 本次问题与触发条件
  • 处置动作与回滚策略
  • 可复用检查项
  • 下一次默认配置

技术治理 + 内容沉淀同时做,才能形成长期复利。

上线前最小检查清单(可直接执行)

  • [ ] 会话边界明确,DM/群聊不串台
  • [ ] 队列策略配置并压测通过
  • [ ] 工具最小权限与审批生效
  • [ ] 关键执行链路可审计
  • [ ] 模型故障有 fallback 与退避
  • [ ] 上下文与成本可观测
  • [ ] 复盘模板落盘并可复用

结语

Agent 落地不是“再接一个模型”,而是“先建一套护栏”。 先把系统变成可控工程,再把效率放大。 这一步做对了,后面才是真正的规模化红利。

OpenClaw多Agent方案

2026-03-12 01:50:00

很多团队把 Agent 做到第二阶段都会遇到同一个问题:

  • 单个 Agent 已经不够用,要拆“角色分工”。

  • 一台机器放不下所有任务,要跨多台主机部署。

  • 代理之间需要通信协作,但又不能互相污染上下文。

这篇文章基于 OpenClaw 官方文档,系统讲清四件事:单机多 Agent 怎么搭单主机多 OpenClaw 实例何时可用多 OpenClaw 主机怎么协作代理间如何通信才稳定可控

1. 先统一心智模型:OpenClaw 的多 Agent 不是“多人格提示词”

在 OpenClaw 里,一个 agent 本质是一个“完整隔离单元”,它拥有自己的:

  • workspace(包括 AGENTS.md/SOUL.md/USER.md 与本地文件上下文)

  • agentDir(认证与 agent 级状态)

  • sessions(会话与路由状态)

所以“多 Agent”是工程级隔离,而不是同一上下文里改几段提示词。


2. 单机多 Agent:推荐的标准架构

先给结论:一个 Gateway + 多个 agent + 显式 bindings 路由 是官方推荐范式。

2.1 架构骨架

  • 一台主机只跑一个 Gateway(官方架构约束)。

  • Gateway 持有所有渠道连接(Telegram/WhatsApp/Slack/…)。

  • 通过 bindings 把不同 channel/account/peer 的入站消息,确定性路由到不同 agent。

  • 每个 agent 使用独立 workspace 和 agentDir,避免认证与会话冲突。

2.2 最小配置示例(单机多 Agent)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
  "agents": {
    "list": [
      {
        "id": "assistant",
        "default": true,
        "workspace": "~/.openclaw/workspace-assistant",
        "agentDir": "~/.openclaw/agents/assistant/agent"
      },
      {
        "id": "research",
        "workspace": "~/.openclaw/workspace-research",
        "agentDir": "~/.openclaw/agents/research/agent"
      }
    ]
  },
  "bindings": [
    {
      "agentId": "research",
      "match": {
        "channel": "telegram",
        "peer": { "kind": "direct", "id": "tg:123456789" }
      }
    },
    {
      "agentId": "assistant",
      "match": { "channel": "telegram" }
    }
  ]
}

2.3 单机模式下的通信方式

同一 Gateway 内,agent 间协作优先走 session 工具:

  • sessions_send:向另一个 session 发消息并等待结果(可超时控制)。

  • sessions_spawn:派生隔离子代理执行长任务,完成后回传摘要。

这两类通信在同一 Gateway 内是“内生通信”,上下文边界更清晰、可追踪性更好。

2.4 单主机多 OpenClaw 实例:可做,但要明确边界

有些团队会在同一台机器上启动多个 OpenClaw 进程(而不是一个 Gateway 托管多个 agent)。这个方案不是主路径,但在“强隔离”诉求下可用。

适用场景:

  • 你需要把不同业务线彻底隔离到不同进程生命周期。

  • 你希望为不同实例配置不同端口、不同状态目录、不同系统服务策略。

必须满足的工程约束:

  • 每个实例使用独立 OPENCLAW_STATE_DIR

  • 每个实例使用独立 Gateway 端口(避免 WS/HTTP 端口冲突)。

  • 每个实例的 channel 账号登录状态独立管理,避免同账号并发占用。

  • 每个实例独立 workspace/agentDir,避免会话与认证污染。

实践建议:如果目标只是“多人格/多角色协作”,优先选择单 Gateway + 多 agent + bindings。只有当你明确需要“进程级隔离”时,再采用单主机多实例。


3. 多 OpenClaw 主机:现实可用的 3 种协作拓扑

这里最容易误解:OpenClaw 官方当前核心是“单 Gateway 控制面”。跨主机协作不是默认内建成“跨 Gateway 透明 RPC”。

所以工程上要用“桥接层”把多主机连起来。

3.1 拓扑 A:渠道桥接(推荐起步)

  • Host-A 的 agent 通过消息渠道(如 Telegram Bot/群)发任务。

  • Host-B 作为另一个 OpenClaw 实例在同渠道接收并处理。

  • 处理结果再通过渠道回发到 Host-A 或人工会话。

优点:部署快,稳定性高,几乎不用改 OpenClaw 内核。

3.2 拓扑 B:Webhook / Hook 事件桥接

  • Host-A 将任务打包成结构化事件(JSON)投递给 Host-B 的接收端。

  • Host-B 的 Hook/入口会话消费事件并触发 agent 执行。

  • 回传可走 webhook 回调或消息渠道。

优点:便于与现有后端系统集成,适合平台化。

3.3 拓扑 C:外部任务总线桥接(企业场景)

  • 两台 OpenClaw 通过外部队列/任务系统(如 Redis Streams、Kafka、SQS)解耦。

  • OpenClaw 只做“智能执行器”,任务编排交给外部工作流层。

优点:吞吐与治理能力最好,但实施复杂度最高。


4. 代理间通信与协作:建议采用“分层协议”

4.1 协作协议(建议)

  • 控制消息:任务编号、优先级、超时、重试策略。

  • 业务消息:输入参数、上下文摘要、期望输出格式。

  • 回执消息:状态(accepted/running/done/failed)、结果摘要、错误分类。

4.2 角色分工(建议)

  • Orchestrator Agent:接任务、拆解、派发、汇总。

  • Worker Agent:按契约执行单一子任务。

  • Reviewer Agent:做一致性检查与质量门禁。

4.3 三条硬规则

  • 幂等键:每个任务都要有业务 id,重复投递可安全去重。

  • 超时与降级sessions_send/外部桥接必须有 timeout 与 fallback。

  • 上下文最小化:跨代理只传“必要上下文 + 结构化结果”,不要整段历史硬转发。

4.4 协议补充:A2A(Google Agent2Agent)与 ANP(Agent Network Protocol)

在跨系统、跨组织的多代理协作里,可以把 OpenClaw 作为运行时,把 A2A/ANP 当作“外部互联协议层”。

  • A2A(Agent2Agent):Google 发起的开放互操作协议,强调任务生命周期、能力发现(Agent Card)、长任务状态同步,以及基于 HTTP / SSE / JSON-RPC 的标准化通信。

  • ANP(Agent Network Protocol):国内社区推动的开源协议,重点放在开放网络中的智能体身份与安全通信(例如 DID 身份、认证与加密通道)。

一个实用落地方式:

  • OpenClaw 内部(同 Gateway 或同实例)优先用 sessions_send / sessions_spawn

  • OpenClaw 与外部 Agent 平台协作时,可通过桥接层接入 A2A。

  • 在跨组织、需要身份自治与安全互信的场景,可评估引入 ANP 作为身份与通信补充层。

注意:协议选型要看你的治理边界——企业内统一平台优先 A2A 生态兼容,开放网络互联优先关注 ANP 的身份与安全模型成熟度。


5. 实操中的常见坑

  • 把多个 agent 复用同一个 agentDir,导致认证/会话冲突。

  • bindings 规则不够具体,出现“路由命中漂移”。

  • 把跨主机协作当成同机 sessions_send,结果通信链路设计不完整。

  • 没有幂等,重试时重复执行副作用(重复发消息/重复写库)。

  • 没有统一状态模型,排障时看不到“任务卡在哪一跳”。


6. 给团队的落地建议(从 0 到 1)

  • 第一步:先在单机把“多 Agent + bindings + sessions_spawn”跑顺。

  • 第二步:引入一种跨主机桥接(先渠道桥接,再升级 webhook/队列)。

  • 第三步:补齐治理(幂等、重试、审计、告警、权限边界)。

这样做的好处是:每一步都可验证,不会把复杂度一次性打满。


7. 总结

OpenClaw 的多 Agent 架构要点可以压缩成一句话:

同机协作用 Gateway 内生会话工具,跨机协作用外部桥接层;隔离、路由、幂等是稳定性的三根柱子。

如果你正在做多代理系统,不要先追求“最智能”,先把“能稳定协作”做出来。


参考资料(权威来源)

OpenClaw 架构剖析

2026-03-03 00:15:00

上一篇聊了「OpenClaw 是什么」。这一篇更偏工程视角:OpenClaw 到底怎么实现一个可长期运行的 Agent 系统?消息是怎么进来的?怎么路由到 Agent?工具调用与定时任务如何编排?

如果你做过 Agent 落地,会很熟悉这些关键词:channel、tool、session、cron、memory、安全边界、幂等、观测……OpenClaw 的价值在于把这些抽象成一套可部署的 runtime。

1. OpenClaw 由哪些模块组成?

你可以把 OpenClaw 想成三层:

1) 接入层(Channels):连接外部世界(Telegram/钉钉/QQ/…),负责收消息、发消息。

2) 编排层(Gateway + Routing + Sessions):决定“这条消息交给哪个 Agent/哪个会话”,并维护状态与生命周期。

3) 执行层(Agents + Tools/Skills + Jobs):Agent 负责决策,Tools 负责执行,Jobs(cron 等)负责触发。

对应到工程实体,大致是:

关键约束(和官方架构一致):一台主机一个 Gateway连接首帧必须是 connect 握手事件流默认不回放(客户端需自行补拉状态)

  • Gateway(守护进程):常驻运行,连接多个 channel provider,维护连接与重连。
  • Channel Plugin:每个渠道一个适配器,实现 inbound/outbound。
  • WebChat/UI 客户端:本质是通过 WebSocket 连接 Gateway 的控制平面客户端。
  • Agent:可配置多个(不同模型/不同工作空间/不同权限),按路由绑定到渠道。
  • Session:把对话与任务上下文组织起来(类似“对话线程 + 状态机”)。
  • Skills:可复用的工具说明与脚本集合,给 Agent 一个“可靠使用工具”的方法。
  • Cron/Jobs:把定时触发变成一等公民,支持隔离执行、送达与可配置去重策略。
  • Memory:长期/短期记忆(以文件记忆为主 + 语义检索),为跨会话连续性服务。

2. 核心流程 1:一条消息从“外部”到“Agent”的路径

把它拆成 8 步,你会发现它是一条典型的事件驱动流水线:

1) Channel 收到事件

  • 可能是文本、图片、语音、文件、按钮回调等。

2) 插件标准化(Normalize)

  • 把不同平台的 message schema 归一:from/to/messageId/timestamp/chatType/attachments…

3) 封装输入(Envelope)

  • 给 Agent 一个稳定的“输入格式”,避免每个渠道都写一套提示词。

4) 路由(Routing/Binding)

  • 根据规则把消息交给指定 agent(例如 QQ 走 hang-ai,Telegram 走 main)。

5) 会话选择(Session Key)

  • 同一用户/群聊映射到固定 session,确保上下文连续。

6) Agent 推理(Decide)

  • Agent 选择:直接回复,还是调用工具(搜索/执行/写文件/定时任务)。

7) 工具执行(Tools/Skills)

  • 工具是“副作用层”:读写文件、访问网络、调用 API、跑命令。

8) 回传与发送(Outbound Deliver)

  • 将 Agent 结果交给 channel 插件发送,处理分段、markdown、富媒体等。

这条链路里,最容易做坏的其实是第 2~5 步:输入不干净、路由不清晰、session 混乱,都会让 Agent “聪明但不稳定”。OpenClaw 的设计重点正是在这里。

3. 核心流程 2:工具调用如何“可靠地执行”?

一个可落地的 Agent 系统,工具调用必须具备三种属性:

3.1 可控(Controllable)

  • 工具入口有限且明确(不是什么都能 exec)。
  • 敏感能力要有策略(allowlist/denylist/人工确认)。

3.2 可观测(Observable)

  • 能看到:调用了什么工具、参数是什么、耗时多久、失败原因。
  • 能复盘:某次输出是怎么来的。

3.3 可恢复(Recoverable)

  • 失败要能重试/降级(例如 web fetch 失败就换来源)。
  • 长链路要能分段(先产出,再补充)。

OpenClaw 的 skill 机制,本质是在做“把提示词工程变成可维护的工程资产”。你不希望每次靠大模型临场发挥写一堆 shell;你希望它遵循一个稳定的脚本与约定。

4. 核心流程 3:Cron/Jobs(定时任务)为什么是 Agent 生产化的关键?

很多 Agent 项目死在“能对话,但不能跑”。原因是:

  • 任务不能准点触发
  • 不能隔离执行(被主会话上下文污染)
  • 失败后没有送达保障
  • 会重复发送(没有幂等)

OpenClaw 的 cron 设计可以抽象成:

  • 触发器(schedule):cron / every / at
  • 执行体(payload):systemEvent 或 agentTurn(隔离会话跑)
  • 投递(delivery):把结果发到指定 channel/target
  • 幂等/去重:通常用 state 文件(last_date/last_hash)或业务键

一个很实用的经验:凡是“每天推送/定时汇总/提醒”的任务,都要把幂等写成硬性要求。这比“写得更聪明”重要得多。

5. 语音/图片等多媒体:为什么“把内容注入正文”很关键?

以语音为例,很多系统会把语音转写结果作为“附件描述”塞进消息里,但 Agent 可能把它当噪声过滤掉,最后表现为“不回复”。

更可靠的做法是:

  • 语音 → 转写
  • 把转写文本当作用户输入正文(例如前缀“(语音转写)xxx”)
  • 同时保留附件元信息(可选):文件路径、时长、来源

这其实是一条通用原则:

Agent 真正在乎的是“它以为用户说了什么”。 所以多模态处理的结果要进入“正文层”,而不是“旁注层”。

6. 可复用的方法论:如何用 OpenClaw(或任何 Agent Runtime)做出稳定的系统?

下面这套方法论与 OpenClaw 强相关,但本质上是通用的 Agent 工程原则。

方法论 1:把 Agent 系统拆成“决策层 vs 执行层”

  • 决策层:LLM/Agent(可变、概率性)
  • 执行层:脚本/工具/skill(确定性、可测试)

越早把副作用收敛到执行层,你的系统越稳。

方法论 1.5:模块化优先——Plugin 与 Skill 是“可加载的工程单元”

很多 Agent 项目后期会失控,本质原因是:所有能力都堆在一个巨大的代码/提示词里,无法升级、无法替换、也无法复用。

OpenClaw 的架构里有两个非常值得复用的抽象:

  • Plugin(插件):面向“渠道/外部系统”的适配层。它把不稳定、强耦合的外部差异隔离掉(消息格式、鉴权、富媒体、限流、重连…)。
  • Skill(技能):面向“工具使用”的可维护模块。它把“如何调用某个工具”沉淀成文档/脚本/约定,让 Agent 可靠执行。

你在研发其他项目时可以照搬这套思想:

  • 把所有 I/O 做成插件接口(inbound/outbound 都走统一协议)
  • 把执行能力做成可装卸的模块(每个模块有清晰的输入输出契约)
  • 把运行时策略配置化(允许按项目/按环境切换能力组合)

这样系统才具备“长期演进能力”:

  • 想换搜索引擎/供应商?替换 skill 即可。
  • 想多接一个渠道?加一个 plugin,不影响核心。
  • 想做权限收敛?在 runtime/策略层统一控制。

方法论 2:事件驱动 + 明确的状态机

你会发现 OpenClaw 的心智模型很像: - event in → route → session → agent → tools → deliver

这其实就是一个状态机。把“会话键/幂等键/任务键”定义清楚,系统就会稳定。

方法论 2.5:把“配置”当成系统契约(Contract),而不是参数堆

OpenClaw 里很多稳定性来自于“约束前置”:

  • 绑定规则(哪个 channel → 哪个 agent)
  • 工具权限(哪些 tool 可用/哪些 elevated 禁止)
  • 推送策略(cron 的去重文件、重试退避)

工程上你可以把它抽象成:

  • 配置即策略:把可变决策(谁能做什么、什么时候做)从代码里拿出来。
  • 配置可审计:出现事故时能追溯“当时允许了什么”。
  • 配置可迁移:换环境/换机器/换团队时,复制配置即可复现能力。

方法论 3:任何自动推送都必须幂等

推荐最低配:

  • last_date(今天发过就退出)
  • last_hash(内容一致就退出)

把它当成产品级需求,而不是“优化项”。

方法论 4:先做可观测,再做智能

一个很反直觉的点:

  • 你以为“让模型更聪明”能解决问题
  • 实际上,80% 的线上问题来自:超时、失败重试、权限、消息格式、平台限制

所以先把日志、运行记录、失败原因打通,后面再谈“更聪明”。

方法论 5:安全边界要前置

建议至少做到:

  • 渠道 allowlist / groupPolicy
  • 敏感工具禁用或需要确认
  • 不信任外部内容(把网页/邮件当不可信输入)

Agent 的安全不是模型能解决的,是架构要解决的。

7. 总结

OpenClaw 的架构并不神秘:它把 Agent 的生产化问题拆解为一组工程模块(channel、session、tool、cron、memory、安全策略),并把“核心流程”做成可运行、可观测、可扩展的系统。

如果你要复用它的方法论,记住一句话就够:

让 LLM 做决策,让系统做约束,让工具做执行。

这就是把 Agent 从 demo 推向长期运行系统的关键。