跳到主要内容

OpenClaw 里哪些实现最值得提炼成通用系统模式

我不想只记住 OpenClaw 自己的细节

这条资源最容易被浪费的方式,就是最后只记住项目名、目录名和某几个模块名。

更值钱的读法,是主动问:

这里有哪些实现,其实值得抽出来当通用系统模式。

如果让我先挑,我会挑这五类:

  1. 消息网关统一入口
  2. 控制平面和执行后端解耦
  3. 每会话串行化
  4. 流式事件协议
  5. 跨重启身份恢复

1. 消息网关统一入口

这类模式在真实 Agent 产品里非常重要,但在很多教程里几乎不出现。

它的核心不是“支持多个聊天渠道”,而是你必须先有一层稳定入口,才能谈后面的权限、路由、运行时和回复一致性。

这个模式可迁移的点在于:

  • 所有用户输入先进入统一消息模型
  • 渠道差异尽量在入口层被吸收
  • 后面的运行时不要直接绑死在某个前端渠道上

2. 控制平面和执行后端解耦

ACP 这一章尤其能说明这一点。

OpenClaw 没把“外部 coding agent 接入”写成一个硬编码特例,而是拆成:

  • 控制平面负责生命周期和策略
  • AcpRuntime 接口负责契约
  • 后端实现负责具体 Agent 适配

这是一种很值得复用的模式。

因为它让你以后新增后端时,不用重写整套会话、绑定、策略和流式回传逻辑。

3. 每会话串行化

SessionActorQueue 这类设计非常值钱。

它解决的是一个很真实的问题:同一个 session 的初始化、runTurn、cancel、close 不能互相抢。

这类模式的可迁移价值很高,因为很多 Agent 系统一旦进入多会话、多入口、多重试场景,就会碰到竞态问题。

我会把它记成一个简单原则:

跨会话可以并发,但单会话的状态变更最好有严格串行边界。

4. 流式事件协议

OpenClaw 在 ACP 里没有只传“最终答案”,而是定义了 text_deltastatustool_calldoneerror 这些事件类型。

这件事很重要,因为它说明一个成熟系统不会把流式输出当成 UI 装饰,而是当成协议层能力。

可迁移的模式是:

  • 输出不只是文本
  • 中间状态也应该有类型
  • 前端显示和后端执行之间需要一个稳定的事件契约

只要你以后要接不同前端、不同 runtime,这一层都会派上用场。

5. 跨重启身份恢复

我很看重这一点,因为它最能区分“玩具系统”和“长期工作系统”。

ACP 里用 backendSessionIdagentSessionId 这类 identity 做恢复,说明他们很清楚:

运行时缓存会丢,但会话不能因为一次重启就彻底失忆。

这类模式不只是给 ACP 用的。

凡是长周期任务、持久会话、外部执行后端,这个问题都会出现。

哪些我暂时不急着抽得太深

像某些具体后端适配器细节、某个插件实现、某种渠道绑定边角逻辑,我会先看成项目实现,不急着上升为通用模式。

不是它们没用,而是通用价值没有前面五类那么高。

如果只允许带走三件事

如果我只能从 OpenClaw 里带走三类通用模式,我会带走:

  1. 统一消息入口
  2. 控制平面 / 后端解耦
  3. 每会话串行化 + 跨重启恢复

因为这三类最直接决定一个真实 Agent 系统是不是能长期稳定工作,而不只是“今天跑通了”。