OpenClaw 里哪些实现最值得提炼成通用系统模式
我不想只记住 OpenClaw 自己的细节
这条资源最容易被浪费的方式,就是最后只记住项目名、目录名和某几个模块名。
更值钱的读法,是主动问:
这里有哪些实现,其实值得抽出来当通用系统模式。
如果让我先挑,我会挑这五类:
- 消息网关统一入口
- 控制平面和执行后端解耦
- 每会话串行化
- 流式事件协议
- 跨重启身份恢复
1. 消息网关统一入口
这类模式在真实 Agent 产品里非常重要,但在很多教程里几乎不出现。
它的核心不是“支持多个聊天渠道”,而是你必须先有一层稳定入口,才能谈后面的权限、路由、运行时和回复一致性。
这个模式可迁移的点在于:
- 所有用户输入先进入统一消息模型
- 渠道差异尽量在入口层被吸收
- 后面的运行时不要直接绑死在某个前端渠道上
2. 控制平面和执行后端解耦
ACP 这一章尤其能说明这一点。
OpenClaw 没把“外部 coding agent 接入”写成一个硬编码特例,而是拆成:
- 控制平 面负责生命周期和策略
AcpRuntime接口负责契约- 后端实现负责具体 Agent 适配
这是一种很值得复用的模式。
因为它让你以后新增后端时,不用重写整套会话、绑定、策略和流式回传逻辑。
3. 每会话串行化
SessionActorQueue 这类设计非常值钱。
它解决的是一个很真实的问题:同一个 session 的初始化、runTurn、cancel、close 不能互相抢。
这类模式的可迁移价值很高,因为很多 Agent 系统一旦进入多会话、多入口、多重试场景,就会碰到竞态问题。
我会把它记成一个简单原则:
跨会话可以并发,但单会话的状态变更最好有严格串行边界。
4. 流式事件协议
OpenClaw 在 ACP 里没有只传“最终答案”,而是定义了 text_delta、status、tool_call、done、error 这些事件类型。
这件事很重要,因为它说明一个成熟系统不会把流式输出当成 UI 装饰,而是当成协议层能力。
可迁移的模式是:
- 输出不只是文本
- 中间状态也应该有类型
- 前端显示和后端执行之间需要一个稳定的事件契约
只要你以后要接不同前端、不同 runtime,这一层都会派上用场。