OpenClaw 系统架构

0 阅读3分钟

五层嵌套架构

OpenClaw 采用的是一种洋葱式架构——从外到内,每一层都承担着特定的职责,并通过标准化的接口与相邻层通信。

image.png

1. 控制面(Control Plane):用户与系统的接触点 --请求入口

入口形态:

  • cli命令行工具
  • web UI页面
  1. 控制面只负责“展示”和“指令下发”,不承担任何业务逻辑

  2. 系统生命周期管理, 启动前的检查清单

  • 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 轮询

安全认证

image.png

图中包含两个主要组件:

  • 左侧的客户端(Control Plane)
  • 右侧的网关(Gateway,端口18789)。

客户端拥有一个本地密钥(Local Secret Key),而网关则包含一个Nonce生成器(Nonce Generator)。

流程图详细描述了四个步骤:

  1. WebSocket Connect:客户端发起连接请求
  2. connect.challenge:网关返回一个32字节的随机nonce挑战值
  3. connect(签名+Token):客户端使用HMAC-SHA256算法对签名和设备ID进行加密
  4. hello-ok:验证通过后建立信任连接

图下方还注明了握手成功后进入心跳保活阶段,每30秒一次tick,且nonce一次性使用防重放。

这是一个典型的安全认证流程,通过挑战-响应机制来防止重放攻击,并实现设备绑定验证和动态nonce管理,确保通信的安全性。

路由分发

Gateway 会根据 7 层优先级匹配规则,决定将消息分发给哪个 Agent 处理

image.png

3. 消息通道层(Message Channels):连接异构世界的桥梁

OpenClaw 通过适配器模式(Adapter Pattern), 将平台特有的消息格式转换为统一的 UnifiedMessage 对象

精妙之处

核心引擎层完全不知道消息来自哪个平台。对于 Agent Loop 来说,它处理的永远是标准化的 UnifiedMessage,无需关心底层是 Telegram 还是 WhatsApp

4. 核心引擎层(Core Engines):智能的“心脏”

1. AgentLoop:三层嵌套的执行引擎

image.png

run.ts(外层):

负责全局生命周期管理,包括

  • 双重队列化
  • 指数退避容错、
  • Session 串行化
  • Jitter 抖动。

当 Agent 调用失败时,外层会根据错误类型决定是重试还是放弃

attempt.ts(中层)

管理单次 LLM 交互会话,包括

  • Sandbox 解析
  • 工具注册
  • Prompt 构建
  • 以及 6 个关键的 Plugin Hook 点(如 before_llm、after_tool 等)。
subscribe.ts(内层)
  • 处理流式事件消费
  • 工具调用执行
  • 实时状态同步

确保每一个 token 都能被正确处理。

###3. 核心子系统

image.png

扩展层:24 个 Hook 点的能力边界