去年底,OpenClaw突然爆火,引发全民养“龙虾”的热潮,甚至逼得Anthropic“封杀”OpenClaw。那么,OpenClaw架构设计有哪些迷人的地方,竟然能从Claude Code、ChatGPT等一众强劲对手中脱引而出。
OpenClaw 不是“功能看起来最多”的那类系统。
但它有一个很硬的优点:执行秩序做得稳。
代价也很直接:前期上手快,后期场景复杂了,治理压力会上来。
一、OpenClaw 真正的骨架
OpenClaw 的主线,不是“接了多少渠道”,而是这条执行链:
entry -> lane queue -> run loop -> recover/exit
这条链外面再包两层:能力扩展层(skill/plugin)和治理分层(sandbox/policy/approval)。
线上最容易炸的,往往不是模型本身,而是这些层的边界被写松了。
1) 入口层:多入口可以有,语义必须统一
IM、CLI、Web 可以同时接,但同一类任务要走同一套状态语义。
不统一,后面就是跨渠道解释成本。
你能学到的设计点:
- 入口协议可以不同,但任务状态机必须统一(开始、纠偏、结束语义一致)。
- “消息类型”要显式化,不要靠每个渠道各自猜意图。
- 入口层只做接入和标准化,不做高风险业务决策。
示例:
同一句“改成可转债口径”,A 渠道被当 steer,B 渠道被当新任务。
结果是 A 在纠偏旧任务,B 在起新任务,用户会看到两份相互矛盾的答案。
正确做法是:入口先把这句标准化成同一消息处置语义,再进队列。
2) lane queue:先守会话顺序,再谈全局并发
会话内串行,跨会话并发。
这不是性能技巧,是一致性底线。
你能学到的设计点:
- 先定义“同会话串行”硬约束,再谈吞吐优化。
- 全局并发上限要和租户/会话维度一起治理,不能只看总 QPS。
- 队列层要暴露可观测指标(排队时长、回压、丢弃原因)。
示例:
用户连续补两条条件,如果同会话并发跑,后一句很容易覆盖前一句上下文。
线上表现通常是“偶发答案错位”,看起来像模型问题,实际是队列保序没守住。
正确做法是:同会话严格串行,跨会话再并发提吞吐。
3) run loop:每轮进入、退出、恢复都要写死
队列决定“谁先跑”,run loop 决定“怎么跑完”。
只有队列没有稳定循环,系统迟早“排队有序、执行乱序”。
你能学到的设计点:
- 每轮循环必须有明确状态转移(运行中、等待、恢复、终止)。
- 终态语义要固定,避免同类失败在不同入口表现不同。
- 中断/恢复要可回放,方便排障和审计。
示例:
任务被调度了,但循环缺终态判断,同一任务在恢复阶段被重复执行。
用户侧看到“怎么重复回了两次”,研发侧日志却显示“都成功了”。
正确做法是:run loop 写死进入/退出条件,并把恢复后的终态单独标识。
4) 能力层:技能可以扩,主循环语义不能漂
skill/plugin 是业务扩展层,不是主执行语义层。
每加一个能力就改队列和失败语义,系统会越跑越漂。
你能学到的设计点:
- 业务差异放进 skill/plugin,主循环只管执行秩序。
- 技能升级要版本化,避免线上行为漂移不可追踪。
- 新技能接入要过“是否改变主语义”的门禁。
示例:
某团队给“报价助手”加了新技能,顺手改了失败重试逻辑。
短期看功能增强了,长期看全局失败语义被污染,其他助手也跟着异常。
正确做法是:技能只扩能力,不改主循环语义。
5) 治理分层:sandbox / policy / approval 各司其职
这三层别混成一个开关。
一混,故障时你根本不知道是隔离失效、策略误判,还是审批链卡死。
你能学到的设计点:
- sandbox 负责执行边界,policy 负责规则裁决,approval 负责人机确认。
- 三层日志键要可关联,出事时能快速定位是哪层失效。
- 任何“临时绕过”都要有时效和回滚机制,防止常态化越权。
示例:
生产上出现一次敏感操作误放行,团队只知道“安全开关开着”。
但由于三层没拆,最后查不出是容器边界漏了、策略判错了,还是审批被绕过。
正确做法是:分层治理 + 分层审计,问题能定位到具体层。
这套骨架真正防的是三类事故:同会话互踩、执行失序、安全语义混乱。
二、把骨架跑稳,还要补这三条机制
第一部分讲的是主骨架。
真正上线前,还要把下面三条补齐,不然系统还是会掉坑。
1) 超时自恢复:不是无脑重试
OpenClaw 值钱的点是:超时先恢复,再决定重试。
不是“失败了就再来三次”。
最小落地版:
- 超时先分型:先区分“上下文过载型超时”和“外部依赖硬失败”。
- 只对上下文过载型走“压缩恢复 -> 重试”链路,硬失败直接终止并返回明确错误码。
- 压缩恢复次数、重试次数、总执行时长三条都要设上限,任一触发都进入终态。
- 每次恢复要写审计事件(触发原因、策略版本、压缩比例、结果状态)。
反例:
所有超时统一三次重试,不区分上下文型超时和硬失败。
高峰期会把“局部超时”放大成“全链路拥塞”。
示例:
晚高峰批量跑报告,某租户请求超时后被统一重试三轮。
因为没有先做超时分型,外部接口硬失败也被塞进重试队列,队列越堆越长。
正确做法是:先判超时类型,能恢复的才恢复,不能恢复的立即失败并释放队列位。
2) 空回合失败语义:不许假成功
没有有效 payload,就明确失败。
别让用户看到“处理中”,后台其实已经死了。
最小落地版:
- 定义“空回合”判定条件(无 payload、无工具结果、无可消费中间态)。
- 空回合直接返回显式失败态(错误码 + 可执行下一步),不允许挂在处理中。
- 前后端、网关、任务编排层共用同一终态枚举,禁止各层各自翻译。
- 空回合事件落到统一 trace/request/tool_use 链路,支持按错误码聚合统计。
反例:
日志里已经报错,用户端却显示“处理中”或“请稍后重试”。
排障时业务、研发、运维看到三套状态。
示例:
投研助手一次工具调用返回空对象,编排层没认定失败,前端一直转圈。
用户以为系统还在算,运营以为是网络抖动,研发以为是模型慢。
正确做法是:空回合立刻进入失败终态,并把下一步操作写清楚(重试/改条件/人工接管)。
3) collect / followup / steer:队列语义要统一
这三个词如果各端理解不同,队列模型就废了。
collect
先聚合输入,再触发一次调度。
例子:用户连发两条补充信息,系统合并后跑一轮。
followup
上一轮任务的延续,不是新任务。
例子:模型问“按行业还是发行人”,用户回“发行人”。
steer
对正在执行的任务纠偏,不是升权通道。
例子:任务在跑“全行业”,用户改成“只看可转债”。
记法很简单:
collect 管聚合,followup 管延续,steer 管纠偏。三者混了,队列就会开始自相矛盾。
最小落地版:
collect/followup/steer做成显式入参和显式状态转移,不靠文案猜测。- 三者都要绑定可观测字段(触发来源、会话 ID、上一轮任务 ID、语义判定结果)。
- 跨 Web/IM/CLI 保持同一语义映射,渠道适配层只能做格式转换。
steer默认不升权,不绕过policy/approval,且要保留纠偏前后 diff。
反例:
同一句纠偏指令在 A 渠道按 steer 处理,在 B 渠道按新任务处理。
最终会出现“用户看到两套真相”的体验崩坏。
示例:
用户先在 IM 里说“按可转债重算”,又在 Web 里点了“继续当前任务”。
如果两个入口语义不统一,IM 会走纠偏,Web 会起新任务,最终产出两份冲突结果。
正确做法是:语义判定先统一,再把两个入口都映射到同一条 followup/steer 链路。
三、场景科普:什么场景适合,什么场景不适合
这部分不聊抽象概念,直接看业务场景。
场景 A:你要快速做出“能用”的助手
适合:渠道多、业务迭代快、团队先求可用再求极致。
不适合:一上来就想做全能自治内核,把所有复杂能力一次吃下。
示例:
某团队要在 8 周内把企业 IM 助手上线,核心目标是“先稳定可用”。
如果这时直接上重型自治编排,需求还没跑通,团队就会先被治理复杂度拖慢。
我会先把入口、队列、失败语义立住,再按业务增量补能力。
场景 B:你已经被竞态和超时反复折腾
适合:先补双层队列、run loop、超时恢复、空回合语义。
不适合:只加并发和机器,不动执行语义。
示例:
高峰期任务大量超时,系统默认“失败就重试”,结果队列不断回灌。
表面看是机器不够,实质是执行语义不完整:没有恢复分流,也没有终态收口。
先把 run loop、超时分型恢复、空回合失败语义补齐,再谈扩容。
场景 C:你要做高风险副作用动作
适合:在现有骨架上补 sandbox / policy / approval 分层。
不适合:把高风险动作直接放进自由 loop。
示例:
把“外联发送、交易执行、写库更新”直接接到自由 loop,短期看效率很高。
一旦出现误判或提示注入,副作用会直接落地,事故代价远高于普通回答错误。
先隔离执行环境,再做策略裁决,最后走审批闸门。三层缺一不可。
场景 D:你要多渠道统一体验
适合:统一 collect / followup / steer 语义,再扩渠道。
不适合:每个渠道各定义一套会话语义。
示例:
同一句“改成可转债口径”,A 渠道当 steer,B 渠道当新任务。
用户在两个端看到两份冲突结果,会直接判断系统不可信,而不是去理解你的架构。
先统一语义判定和状态转移,再做渠道适配,不让入口改写任务本意。
四、按团队需求来选:OpenClaw 适不适合
不讨论“谁更强”,只看你的团队现在要解决什么。
需求 1:两三个月内必须上线可用助手
适合 OpenClaw:
你要先把业务跑起来,渠道接入和技能扩展速度优先。
不太适合 OpenClaw:
你第一天就要求重治理、强审计、复杂多代理统一控制。
决策阈值:
- 上线时限 <= 12 周,且核心目标是“先可用再优化”。
- 团队规模 3-8 人,需要边做边改而不是一次定型。
- 当前事故主要是“功能没跑通”,不是“合规越权”。
落地建议:
先立统一入口 + 队列 + 失败语义,把“可稳定交付”作为第一阶段验收线。
需求 2:团队已经被竞态和超时折腾
适合 OpenClaw:
你能马上把双层队列、run loop、超时恢复落到运行时,先把稳定性拉起来。
不太适合 OpenClaw:
你只想加机器和并发,不愿意改执行语义和失败语义。
决策阈值:
- 同会话互踩、超时重试风暴每周都在发生。
- P95/P99 抖动明显,扩容后效果仍不稳定。
- 故障复盘里“语义不一致”频次高于“单机性能瓶颈”。
落地建议:
先改运行时纪律,再加资源;先补语义收口,再谈吞吐天花板。
需求 3:团队面对高风险副作用动作(外联/交易/写入)
适合 OpenClaw(有前提) :
你愿意在现有骨架上补 sandbox/policy/approval 分层和审批链。
不太适合 OpenClaw(当前形态) :
你想保留自由 loop 执行,同时又要求强合规零事故。
决策阈值:
- 动作一旦误执行,损失是“真实世界代价”(资金/客户/数据)。
- 合规要求至少要可追溯、可审计、可回放。
- 团队能接受“速度慢一点”,换取越权风险显著下降。
落地建议:
把副作用动作全部收口到审批闸门,默认拒绝,按白名单逐步放开。
需求 4:团队要做长期统一内核
适合 OpenClaw:
先跑通业务、积累场景,再逐步补治理深度。
不太适合 OpenClaw 单独承担:
你要一步到位做“高治理 + 高自治 + 跨场景统一控制面”,这种目标通常要更重的内核方案配合。
决策阈值:
- 你有 6-12 个月演进窗口,而不是“本季度一次性到位”。
- 你愿意接受“两阶段架构”:先交付,再统一控制面。
- 组织内已有多条业务线,需要逐步统一而不是强行一刀切。
落地建议:
把 OpenClaw 当作第一阶段稳定内核,第二阶段再补强治理控制面和跨场景编排。
最后收一句实操建议:
如果你现在卡在“还没跑起来”,先用 OpenClaw 把秩序立住;
如果你已经卡在“治理不够深”,别再拖,直接补控制面。