Skip to content

01 - OpenClaw 架构分析

GitHub: https://github.com/openclaw/openclaw (362K stars, MIT) 语言: TypeScript/JavaScript (Node.js monorepo)

整体架构

┌──────────────────────────────────────────────────────────────────┐
│                      OpenClaw 架构                               │
│                                                                  │
│  ┌──────────────────────────────────────────────────────────┐    │
│  │                    通道层 (Channels)                       │    │
│  │                                                          │    │
│  │  ┌─────┐ ┌──────┐ ┌───────┐ ┌────────┐ ┌─────────┐     │    │
│  │  │Slack│ │Tele- │ │Whats- │ │Discord │ │iMessage │     │    │
│  │  │     │ │gram  │ │App    │ │        │ │         │     │    │
│  │  └──┬──┘ └──┬───┘ └──┬────┘ └───┬────┘ └────┬────┘     │    │
│  │     │       │        │          │           │           │    │
│  │     └───────┴────────┴──────────┴───────────┘           │    │
│  │                         │                               │    │
│  └─────────────────────────┼───────────────────────────────┘    │
│                            │ WebSocket / API                    │
│  ┌─────────────────────────▼───────────────────────────────┐    │
│  │                    Gateway (控制平面)                     │    │
│  │                                                          │    │
│  │  ┌────────────┐ ┌────────────┐ ┌─────────────────────┐  │    │
│  │  │ Session    │ │ Router     │ │ Event Bus           │  │    │
│  │  │ Manager    │ │ 路由请求到  │ │ 事件驱动             │  │    │
│  │  │ 会话管理   │ │ 对应Agent  │ │ 组件解耦             │  │    │
│  │  └────────────┘ └────────────┘ └─────────────────────┘  │    │
│  │                                                          │    │
│  │  ┌────────────┐ ┌────────────┐ ┌─────────────────────┐  │    │
│  │  │ Auth       │ │ Skills     │ │ LLM Provider        │  │    │
│  │  │ DM配对认证  │ │ Registry   │ │ (多模型支持)         │  │    │
│  │  │            │ │ Skills管理  │ │                     │  │    │
│  │  └────────────┘ └────────────┘ └─────────────────────┘  │    │
│  └──────────────────────────────────────────────────────────┘    │
│                            │                                    │
│  ┌─────────────────────────▼───────────────────────────────┐    │
│  │                    执行层 (Sandbox)                       │    │
│  │                                                          │    │
│  │  ┌────────────────────────────────────────────────────┐  │    │
│  │  │ Docker Container (默认)                             │  │    │
│  │  │ ┌──────────┐ ┌──────────┐ ┌──────────────────────┐│  │    │
│  │  │ │ Bash     │ │ Browser  │ │ File System          ││  │    │
│  │  │ │ 命令执行  │ │ 浏览器   │ │ 隔离文件系统          ││  │    │
│  │  │ └──────────┘ └──────────┘ └──────────────────────┘│  │    │
│  │  └────────────────────────────────────────────────────┘  │    │
│  │                                                          │    │
│  │  替代后端: SSH | OpenShell (Kubernetes)                   │    │
│  └──────────────────────────────────────────────────────────┘    │
│                                                                  │
└──────────────────────────────────────────────────────────────────┘

核心设计亮点

1. 多通道统一架构

OpenClaw 支持 25+ 消息通道,核心设计是 "通道无关":

  ┌─────────────────────────────────────────────────────┐
  │                                                     │
  │  每个通道实现相同的接口:                               │
  │                                                     │
  │  interface Channel {                                │
  │    connect()           // 连接到平台                 │
  │    sendMessage(msg)    // 发送消息                   │
  │    onMessage(handler)  // 接收消息                   │
  │    getCapabilities()   // 支持什么功能(图片/文件/等)  │
  │  }                                                  │
  │                                                     │
  │  Gateway 不关心消息来自哪个通道:                       │
  │                                                     │
  │  Slack 消息 ─┐                                      │
  │  Telegram ──┼──▶ 统一 Message 格式 ──▶ Agent        │
  │  iMessage ──┘                                       │
  │                                                     │
  │  Agent 的回复也是统一格式:                             │
  │  Agent 回复 ──▶ 根据来源通道自动适配 ──▶ 发回去       │
  │                                                     │
  │  这就是 "适配器模式" 的经典应用                        │
  │                                                     │
  └─────────────────────────────────────────────────────┘

2. Skills 系统

OpenClaw 的 Skills 类似 "插件系统":

  ┌──────────────────────────────────────────────────────────┐
  │  Skill 结构:                                              │
  │  ~/.openclaw/workspace/skills/                            │
  │  ├── web-search/                                         │
  │  │   ├── manifest.json    (元数据: 名称、描述、权限)      │
  │  │   └── main.js          (Skill 逻辑)                   │
  │  ├── code-review/                                        │
  │  └── summarize/                                          │
  │                                                          │
  │  ClawHub: 社区 Skills 市场 (5400+ Skills)                 │
  │  类似 npm / VS Code Extensions                            │
  │                                                          │
  │  Skill 的生命周期:                                        │
  │                                                          │
  │  用户消息 → Gateway → Router:                             │
  │    "搜一下最近的AI新闻"                                   │
  │         │                                                │
  │         ▼                                                │
  │  ┌──────────────┐                                        │
  │  │ Skill 匹配    │  根据意图匹配合适的 Skill               │
  │  │ (LLM 决定)   │                                        │
  │  └──────┬───────┘                                        │
  │         ▼                                                │
  │  ┌──────────────┐                                        │
  │  │ 执行 Skill    │  web-search Skill                     │
  │  │ (沙箱内运行)  │  调用搜索 API → 返回结果               │
  │  └──────┬───────┘                                        │
  │         ▼                                                │
  │  ┌──────────────┐                                        │
  │  │ LLM 整合     │  根据 Skill 结果生成最终回答             │
  │  └──────────────┘                                        │
  └──────────────────────────────────────────────────────────┘

3. 沙箱安全

OpenClaw 的 Agent 在隔离环境中执行代码:

  ┌──────────────────────────────────────────────────────────┐
  │                                                          │
  │  三种沙箱后端:                                            │
  │                                                          │
  │  1. Docker (默认):                                       │
  │     ┌────────────────────────────────┐                   │
  │     │ Docker Container               │                   │
  │     │ • 隔离的文件系统               │                   │
  │     │ • 受限的网络访问               │                   │
  │     │ • 资源限制 (CPU/内存)          │                   │
  │     │ • 每个 Session 独立容器       │                   │
  │     └────────────────────────────────┘                   │
  │                                                          │
  │  2. SSH:                                                 │
  │     连接到远程机器执行                                    │
  │     适合: 需要特定环境的场景                              │
  │                                                          │
  │  3. OpenShell (Kubernetes):                              │
  │     在 K8s Pod 中执行                                    │
  │     适合: 企业级部署                                     │
  │                                                          │
  │  安全设计:                                               │
  │  ┌────────────────────────────────────────────────────┐  │
  │  │  • Agent 代码在沙箱内执行,不能逃逸到宿主          │  │
  │  │  • DM 配对认证: 只有设备所有者能使用               │  │
  │  │  • 文件系统挂载: 只暴露指定目录                    │  │
  │  │  • 网络策略: 可配置允许/拒绝的域名                 │  │
  │  └────────────────────────────────────────────────────┘  │
  └──────────────────────────────────────────────────────────┘

值得借鉴的设计

┌──────────────────────────────────────────────────────────┐
│  从 OpenClaw 学到的                                       │
├──────────────────────────────────────────────────────────┤
│                                                          │
│  1. 适配器模式:                                           │
│     统一消息接口,多通道适配                               │
│     → 你的 Agent 也可以同时支持 CLI + Web + API           │
│                                                          │
│  2. 插件/Skill 系统:                                      │
│     Agent 的能力可以通过插件扩展                           │
│     → 核心能力内置,特定能力插件化                        │
│                                                          │
│  3. 沙箱执行:                                             │
│     Agent 执行代码必须隔离                                │
│     → Docker 是最简单有效的方案                           │
│                                                          │
│  4. 事件驱动架构:                                         │
│     组件通过 Event Bus 解耦                               │
│     → 新功能只需要监听事件,不改原有逻辑                  │
│                                                          │
└──────────────────────────────────────────────────────────┘

下一节: 02 - OpenCode 架构