主题
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 架构