五层嵌套架构
OpenClaw 采用的是一种洋葱式架构——从外到内,每一层都承担着特定的职责,并通过标准化的接口与相邻层通信。
1. 控制面(Control Plane):用户与系统的接触点 --请求入口
入口形态:
- cli命令行工具
- web UI页面
-
控制面只负责“展示”和“指令下发”,不承担任何业务逻辑
-
系统生命周期管理, 启动前的检查清单
- Step 1:加载配置文件 (config.yaml)
- Step 2:初始化日志系统 (Winston/Pino)
- Step 3:建立数据库连接 (SQLite)
- Step 4:加载安全策略 (Policy Engine)
- Step 5:初始化 Memory 向量索引 (SQLite-vec)
- Step 6:注册核心 Agent 实例
- Step 7:加载 Plugins (38+ 官方扩展)
- Step 8:解析 Skills (52+ 内置技能)
- Step 9:启动 Gateway 监听 (Port 18789)
- Step 10:激活消息通道 (WhatsApp/Telegram/…)
2. Gateway 网关层:系统的“交通枢纽
Gateway 采用 JSON over WebSocket 协议,监听在 18789 端口
Gateway组件作用:
- 安全认证
- 路由分发
为什么选择 WebSocket 而不是 HTTP?
因为 Agent 系统需要处理大量的双向实时通信,
- 用户发送消息
- Agent 流式回复
- 工具执行结果返回
- 状态更新推送
这些场景下长连接的效率远高于短连接的 HTTP 轮询
安全认证
图中包含两个主要组件:
- 左侧的客户端(Control Plane)
- 右侧的网关(Gateway,端口18789)。
客户端拥有一个本地密钥(Local Secret Key),而网关则包含一个Nonce生成器(Nonce Generator)。
流程图详细描述了四个步骤:
- WebSocket Connect:客户端发起连接请求
- connect.challenge:网关返回一个32字节的随机nonce挑战值
- connect(签名+Token):客户端使用HMAC-SHA256算法对签名和设备ID进行加密
- hello-ok:验证通过后建立信任连接
图下方还注明了握手成功后进入心跳保活阶段,每30秒一次tick,且nonce一次性使用防重放。
这是一个典型的安全认证流程,通过挑战-响应机制来防止重放攻击,并实现设备绑定验证和动态nonce管理,确保通信的安全性。
路由分发
Gateway 会根据 7 层优先级匹配规则,决定将消息分发给哪个 Agent 处理
3. 消息通道层(Message Channels):连接异构世界的桥梁
OpenClaw 通过适配器模式(Adapter Pattern), 将平台特有的消息格式转换为统一的 UnifiedMessage 对象
精妙之处
核心引擎层完全不知道消息来自哪个平台。对于 Agent Loop 来说,它处理的永远是标准化的 UnifiedMessage,无需关心底层是 Telegram 还是 WhatsApp
4. 核心引擎层(Core Engines):智能的“心脏”
1. AgentLoop:三层嵌套的执行引擎
run.ts(外层):
负责全局生命周期管理,包括
- 双重队列化
- 指数退避容错、
- Session 串行化
- Jitter 抖动。
当 Agent 调用失败时,外层会根据错误类型决定是重试还是放弃
attempt.ts(中层)
管理单次 LLM 交互会话,包括
- Sandbox 解析
- 工具注册
- Prompt 构建
- 以及 6 个关键的 Plugin Hook 点(如 before_llm、after_tool 等)。
subscribe.ts(内层)
- 处理流式事件消费
- 工具调用执行
- 实时状态同步
确保每一个 token 都能被正确处理。
###3. 核心子系统