OpenClaw 系统架构分析
遇到错误无从下手?带你深入了解OpenClaw的架构和核心流程,排查问题得心应手

带你深入了解OpenClaw的架构和核心流程。
1. 架构概述
OpenClaw 采用插件化的 Gateway 控制平面架构,结合多渠道消息系统和跨平台客户端应用,构建了一个完整的个人 AI 助手生态系统。
核心架构特征

- Gateway 控制平面: 单一 WebSocket 服务器管理所有会话、渠道和事件
- 多渠道消息系统: 统一抽象层支持 15+ 消息平台
- 插件化扩展: Monorepo 架构下的独立插件包
- 跨平台客户端: CLI + macOS App + iOS/Android 节点
- AI 代理引擎: 基于 Pi Agent 的 RPC 模式代理
- 本地优先设计: 数据和会话本地存储,隐私可控
2. 整体架构模式
2.1 架构分类
OpenClaw 结合了多种架构模式:
| 架构模式 | 应用场景 |
|---|---|
| 分层架构 | 核心代码分为接入层、路由层、业务层、存储层 |
| 插件架构 | 渠道扩展、工具扩展、内存扩展 |
| Monorepo | 统一管理核心包和 20+ 插件包 |
| 事件驱动 | Gateway 事件总线、WebSocket 消息分发 |
| 微服务思想 | 每个渠道插件独立运行、故障隔离 |
| 客户端-服务器 | Gateway (服务器) + macOS/iOS/Android 应用 (客户端) |
2.2 架构层次

3. 核心组件
3.1 Gateway 控制平面

职责: 整个系统的核心控制器
功能:
- WebSocket 服务器 (ws://localhost:18789)
- JSON-RPC 2.0 方法调度 (70+ 方法,8 个命名空间)
- 多层认证系统 (off/local-only/token/tailscale/tailscale-local)
- 作用域授权 (admin/read/write/approvals/pairing)
- 会话生命周期管理
- 多代理路由和隔离
- 实时事件广播和去重
- Canvas 宿主服务
- Cron 定时任务调度
- 配置热重载
技术实现:
- 语言: TypeScript
- 框架: Fastify + ws
- 协议: JSON-RPC 2.0
- 位置:
src/gateway/
关键文件:
src/gateway/server.impl.ts- Gateway 主入口和 WebSocket 服务器src/gateway/server-methods.ts- 方法调度和授权系统src/gateway/server-chat.ts- Chat 会话管理src/gateway/server-broadcast.ts- 事件广播系统src/gateway/auth.ts- 多层认证系统src/gateway/server-methods/- 32+ 方法处理器模块
3.2 渠道系统
职责: 连接各个消息平台,提供统一消息接口
核心渠道 (src/ 目录):
src/channels/- 渠道通用逻辑- 内置频道 (9个): telegram, discord, slack, signal, whatsapp, imessage, web, line, acp
扩展渠道 (extensions/ 目录):
extensions/telegram/- Telegram 扩展extensions/discord/- Discord 扩展extensions/slack/- Slack 扩展extensions/whatsapp/- WhatsApp 扩展extensions/msteams/- Microsoft Teamsextensions/matrix/- Matrixextensions/googlechat/- Google Chatextensions/bluebubbles/- BlueBubblesextensions/zalo/- Zaloextensions/zalouser/- Zalo Personalextensions/line/- LINEextensions/tlon/- Tlonextensions/twitch/- Twitchextensions/nostr/- Nostrextensions/nextcloud-talk/- Nextcloud Talkextensions/mattermost/- Mattermost
统一接口:
interface Channel {
start(): Promise<void>
stop(): Promise<void>
sendMessage(target: string, content: string): Promise<void>
onMessage(handler: MessageHandler): void
getStatus(): ChannelStatus
}
3.3 消息路由系统

职责: 将收到的消息路由到正确的代理和会话
功能:
- 渠道识别 (WhatsApp/Telegram/etc.)
- 对等方识别 (用户 ID/群组 ID)
- 代理路由 (多代理隔离)
- 6 级路由优先级: peer > guild > team > account > channel > default
- 7 级配置匹配: 精确 > 空间 > 账户通配符 > 账户 > 频道通配符 > 频道 > 全局
- 会话激活 (peer/guild/team/account/channel/global)
- 多层访问控制:
- Allowlist 白名单过滤
- Mention Gating (群组提及门控)
- Command Gating (控制命令授权)
- 群组逻辑 (提及门控/回复标签)
技术实现:
- 位置:
src/routing/ - 关键文件:
src/routing/resolve-route.ts- 主路由器 (resolveAgentRoute)src/channels/channel-config.ts- 7级配置匹配src/channels/command-gating.ts- 控制命令授权src/channels/mention-gating.ts- 群组消息过滤
3.4 安全与配对系统
职责: 保护系统免受未授权访问
功能:
- DM 配对模式 (默认拒绝)
- 配对码生成和验证
- 白名单管理
- 访问控制列表 (ACL)
- 配置安全检查 (Doctor 工具)
技术实现:
- 位置:
src/pairing/,src/security/ - 存储:
~/.clawdbot/pairing/(JSON 文件)
配对流程:
1. 未知用户发送消息
2. 系统生成短配对码 (例: ABC123)
3. 回复包含配对码
4. 管理员运行: openclaw pairing approve <channel> ABC123
5. 用户添加到白名单
6. 后续消息正常处理
3.5 AI 代理引擎

职责: 处理用户消息,生成 AI 响应
功能:
- 多模型支持 (Anthropic/OpenAI/Bedrock/Ollama)
- 嵌入式运行模式 (runEmbeddedPiAgent)
- 双车道排队系统:
- sessionLane: 单会话串行执行
- globalLane: 全局并发控制
- Auth Profile 轮转: 30 分钟冷却,自动切换认证配置
- Thinking Level 降级: high → low → off 故障转移
- 上下文溢出处理: 自动压缩和修剪
- 工具调用 (browser/canvas/cron/etc.)
- 块流式输出
- 会话上下文管理
- 多重尝试和错误恢复
技术实现:
- 核心: @mariozechner/pi-agent-core
- 位置:
src/agents/pi-embedded-runner/ - 关键文件:
run.ts- 核心编排逻辑 (runEmbeddedPiAgent)run/attempt.ts- 单次执行尝试pi-embedded-subscribe.ts- 流式事件订阅pi-tools.ts- 工具创建 (createOpenClawCodingTools)
支持的工具:
- Browser (playwright)
- Canvas (A2UI)
- Cron (定时任务)
- System (macOS 命令)
- Media (图像/音频/视频)
- Memory (向量存储)
3.6 会话管理系统
职责: 管理多代理、多渠道的会话状态
功能:
- 会话创建和销毁
- 上下文持久化 (JSONL 格式)
- 会话隔离 (main/group/)
- 会话激活模式
- 会话队列模式
技术实现:
- 位置:
src/sessions/ - 存储:
~/.clawdbot/sessions/或~/.clawdbot/agents/<id>/sessions/ - 格式: JSON (完整对象,包含 key + meta + history + version)
- 权限: 0o600 (仅所有者可读写)
会话作用域 (SessionScope):
- peer: 对等方会话 (1对1 直接对话)
- guild: 服务器/群组会话
- team: 团队会话
- account: 账户会话
- channel: 频道默认会话
- global: 全局会话
- custom: 自定义作用域 (任意字符串)
3.7 媒体处理管道
职责: 处理图像、音频、视频、文档
功能:
- 图像:
- 压缩和转换 (Sharp)
- 尺寸限制
- 格式转换 (PNG/JPEG/WebP)
- 音频:
- 转码
- 语音转文字 (转录钩子)
- TTS 合成
- 视频:
- 转码
- 时长和尺寸限制
- PDF:
- 提取文本
- 渲染页面
- 文档:
- DOCX 预览
- 文本提取
技术实现:
- 位置:
src/media/,src/media-understanding/ - 依赖: sharp, pdfjs-dist, node-edge-tts
3.8 浏览器工具
职责: 提供无头浏览器自动化能力
功能:
- 网页导航
- 截图
- PDF 生成
- DOM 操作
- JavaScript 执行
技术实现:
- 引擎: Playwright (Chromium)
- 位置:
src/browser/ - 沙箱: multi-agent-sandbox-tools
3.9 Canvas 系统
职责: 提供代理驱动的可视化界面
功能:
- A2UI 协议 (Agent-to-UI)
- 实时 WebSocket 更新
- 多平台支持 (macOS/iOS/Android)
- 组件渲染
- 代理控制
技术实现:
- 宿主:
src/canvas-host/ - A2UI:
src/canvas-host/a2ui/ - 打包:
scripts/bundle-a2ui.sh
3.10 语音交互系统
职责: 支持语音输入和输出
功能:
- Voice Wake:
- 语音唤醒 (macOS/iOS/Android)
- 自定义唤醒词
- 持续监听
- Talk Mode:
- 语音对话
- 推送通话 (PTT)
- 覆盖层 UI
- TTS:
- ElevenLabs 集成
- 多语言支持
技术实现:
- TTS:
src/tts/ - 依赖: node-edge-tts
- 客户端: apps/macos, apps/ios, apps/android
3.11 CLI 工具
职责: 提供命令行操作界面
命令:
openclaw gateway- 启动/停止 Gatewayopenclaw agent- 与 AI 代理交互openclaw message send- 发送消息openclaw channels status- 渠道状态openclaw config- 配置管理openclaw onboard- 引导向导openclaw doctor- 诊断工具openclaw pairing- 配对管理
技术实现:
- 框架: Commander.js
- 位置:
src/cli/,src/commands/ - 入口:
openclaw.mjs
3.12 插件系统
职责: 支持渠道和功能的动态扩展
插件类型:
- 渠道插件: 扩展消息平台支持
- 工具插件: 扩展 AI 代理工具
- 内存插件: 扩展向量存储
- 诊断插件: 扩展监控能力
技术实现:
- SDK:
src/plugin-sdk/ - 加载:
src/plugins/ - 位置:
extensions/
插件接口:
interface Plugin {
name: string
version: string
init(context: PluginContext): Promise<void>
destroy(): Promise<void>
}
3.13 配置管理
职责: 管理系统和用户配置
配置层级:
- 默认配置 (内置)
- 全局配置 (
~/.clawdbot/config.yaml) - 项目配置 (
openclaw.config.yaml) - 环境变量 (覆盖)
技术实现:
- 位置:
src/config/ - 格式: JSON5 (支持注释和尾部逗号)
- 文件:
~/.openclaw/config.json - 验证: Zod Schema
- 权限: 0o600 (仅所有者可读写)
- 工具:
openclaw config
配置系统特性:
- $include 指令: 支持多文件合并
- 环境变量替换:
${VAR}自动替换 - 原子性写入: 临时文件 + 重命名
- 备份轮转: 自动保留 3 个备份
- 遗留迁移: 自动迁移旧版配置
- 运行时覆盖: 临时修改不持久化
- 配置缓存: 可配置的内存缓存
关键配置:
{
"gateway": {
"mode": "local",
"port": 18789,
"auth": {
"mode": "token",
"token": "${GATEWAY_TOKEN}"
}
},
"agents": {
"defaults": {
"model": "claude-sonnet-4-20250514",
"thinking": "high",
"maxConcurrent": 3
}
},
"channels": {
"defaults": {
"dmPolicy": "allow",
"groupPolicy": "allow-mentions"
},
"telegram": {
"botToken": "${TELEGRAM_BOT_TOKEN}"
}
}
}
3.14 跨平台应用
macOS 应用
职责: 菜单栏控制中心
功能:
- Gateway 启动/停止
- 渠道状态显示
- Voice Wake 控制
- Talk Mode 界面
- WebChat 嵌入
- Canvas 显示
技术:
- 语言: Swift
- 框架: SwiftUI
- 位置:
apps/macos/
iOS 应用
职责: 移动节点和 Canvas 客户端
功能:
- Canvas 渲染
- Voice Wake
- Talk Mode
- 相机工具
- 屏幕录制
- Bonjour 配对
技术:
- 语言: Swift
- 框架: SwiftUI
- 位置:
apps/ios/
Android 应用
职责: 移动节点和 Canvas 客户端
功能:
- Canvas 渲染
- Talk Mode
- 相机工具
- 屏幕录制
- 可选 SMS 集成
技术:
- 语言: Kotlin
- 框架: Jetpack Compose
- 位置:
apps/android/
4. 数据流
4.1 消息接收流程

详细说明:
外部消息
→ 渠道层 (WhatsApp/Telegram/etc.)
→ 频道元数据解析 (channelId, peerId, guildId)
→ 路由解析 (resolveAgentRoute)
→ 6 级路由优先级匹配
→ 7 级配置匹配
→ 多层访问控制检查
→ Allowlist 白名单
→ Mention Gating (群组)
→ Command Gating (控制命令)
→ 会话激活/创建
→ SessionKey 解析 (agentId + scope + peerId)
→ 消息入队 (双车道)
→ sessionLane: 单会话串行
→ globalLane: 全局并发控制
→ Agent 执行 (runEmbeddedPiAgent)
→ Auth Profile 选择/轮转
→ Thinking Level 应用
→ 上下文溢出检查
→ 工具调用 (如果需要)
→ 流式响应生成
→ 响应处理
→ 类型转换 (适配频道)
→ 分块发送 (长消息)
→ 重试机制
→ 渠道发送
→ 会话持久化
→ 用户收到回复
4.2 命令执行流程
CLI 命令
→ Commander 解析
→ 命令处理器 (commands/)
→ Gateway API (WebSocket/HTTP)
→ Gateway 处理
→ 执行操作
→ 返回结果
→ CLI 显示
4.3 Canvas 更新流程
AI 代理
→ Canvas 工具调用
→ Canvas 宿主 (gateway)
→ WebSocket 推送
→ macOS/iOS/Android 客户端
→ UI 渲染更新
4.4 语音交互流程
用户语音
→ Voice Wake 检测 (macOS/iOS/Android)
→ STT (语音转文字)
→ Gateway 消息
→ AI 代理处理
→ 响应生成
→ TTS (文字转语音)
→ 用户听到回复
5. 组件依赖关系
5.1 核心依赖
Gateway 控制平面
├── WebSocket 服务器 (ws)
├── HTTP 服务器 (Fastify)
├── JSON-RPC 调度器
│ ├── 认证系统 (5种模式)
│ ├── 授权系统 (5个作用域)
│ └── 70+ 方法处理器 (8个命名空间)
├── 渠道系统
│ ├── 9 个内置频道
│ └── 15+ 扩展频道
├── 路由系统
│ ├── 6 级路由优先级
│ ├── 7 级配置匹配
│ └── 多层访问控制
├── Chat Run Registry
├── AI 代理引擎
│ ├── 双车道排队 (sessionLane + globalLane)
│ ├── Pi Agent Core
│ ├── Auth Profile 轮转
│ ├── 模型提供者
│ └── 工具注册表
├── 广播管理器
├── Canvas 宿主
└── Cron 调度
5.2 客户端依赖
macOS/iOS/Android 应用
└── Gateway WebSocket
├── 连接管理
├── 消息同步
├── Canvas 更新
└── 状态订阅
5.3 插件依赖
插件包 (extensions/)
└── Plugin SDK
├── 插件接口
├── 上下文访问
└── 生命周期钩子
6. 外部集成

6.1 AI 模型提供者
- Anthropic: Claude (官方 API + OAuth)
- OpenAI: ChatGPT (官方 API + OAuth)
- AWS Bedrock: 多模型支持
- Ollama: 本地模型运行
- node-llama-cpp: 本地 LLM (可选)
6.2 消息平台
- WhatsApp: Baileys Web 协议
- Telegram: Bot API
- Slack: Bolt SDK
- Discord: Discord.js
- Google Chat: Chat API
- Signal: signal-cli
- iMessage: imsg/BlueBubbles
- Microsoft Teams: Bot Framework
- Matrix: Matrix SDK
- Zalo: Zalo API
6.3 语音服务
- ElevenLabs: TTS 合成 (node-edge-tts)
- 本地 STT: macOS/iOS/Android 系统 API
6.4 浏览器
- Chromium: Playwright 驱动
- BiDi: Chromium BiDi 协议
6.5 网络服务
- Bonjour: mDNS 服务发现 (@homebridge/ciao)
- Tailscale: (可选) 远程访问
- Fly.io: (可选) 远程部署
7. 部署架构
7.1 本地部署 (推荐)
┌─────────────────────────────────────┐
│ 用户设备 (macOS/Linux/Windows) │
│ │
│ ┌───────────────────────────────┐ │
│ │ Gateway 守护进程 │ │
│ │ (systemd/launchd) │ │
│ └───────────────────────────────┘ │
│ │
│ ┌───────────────────────────────┐ │
│ │ macOS 菜单栏应用 (可选) │ │
│ └───────────────────────────────┘ │
│ │
│ ┌───────────────────────────────┐ │
│ │ Web 控制界面 │ │
│ │ http://localhost:18789 │ │
│ └───────────────────────────────┘ │
└─────────────────────────────────────┘
7.2 远程部署
┌─────────────────────────────────────┐
│ 云服务器 (VPS/Fly.io) │
│ │
│ ┌───────────────────────────────┐ │
│ │ Docker 容器 │ │
│ │ └── Gateway 服务 │ │
│ └───────────────────────────────┘ │
│ │
│ ┌───────────────────────────────┐ │
│ │ Nginx 反向代理 │ │
│ │ (HTTPS/WSS) │ │
│ └───────────────────────────────┘ │
└─────────────────────────────────────┘
↓ WebSocket/HTTPS
┌─────────────────────────────────────┐
│ 用户设备 │
│ - iOS 节点 │
│ - Android 节点 │
│ - macOS 应用 │
└─────────────────────────────────────┘
7.3 Docker 部署
docker-compose.yml
├── gateway 服务
├── 卷挂载 (配置/会话)
└── 端口映射 (18789)
8. 扩展性设计
8.1 水平扩展
- 插件系统: 独立 npm 包,按需安装
- 渠道扩展: 新渠道作为插件添加
- 工具扩展: 新工具通过 SDK 注册
8.2 垂直扩展
- 多代理: 每个代理独立进程
- 会话隔离: 多租户会话管理
- 资源限制: 可配置的并发和队列
8.3 未来扩展方向
- 分布式 Gateway (多节点)
- 集群会话同步
- 云端会话备份
- 企业级权限管理
9. 安全架构
9.1 认证和授权
- DM 配对: 默认拒绝未知 DM
- 白名单: 细粒度访问控制
- OAuth: AI 模型认证
- API Key: 备用认证方式
9.2 数据安全
- 本地存储: 会话和配置本地文件
- 加密传输: WebSocket + HTTPS
- 临时文件: 自动清理媒体缓存
- 隔离会话: 代理间完全隔离
9.3 风险防护
- 提示注入: 模型层防护
- 速率限制: 渠道节流 (throttler)
- Doctor 工具: 配置安全检查
- 沙箱隔离: 浏览器工具沙箱
10. 性能优化
10.1 缓存策略
- 媒体缓存: 临时文件系统
- 会话缓存: 内存 + 持久化
- 配置缓存: 热重载机制
10.2 并发控制
- 渠道节流: @grammyjs/transformer-throttler
- 队列模式: 会话级别排队
- 工具池: 浏览器实例复用
10.3 资源管理
- 自动清理: 临时文件生命周期
- 内存限制: 可配置的缓存大小
- 连接池: 数据库和 HTTP 连接
11. 监控和诊断
11.1 日志系统
- 分级日志: tslog (trace/debug/info/warn/error)
- 结构化日志: JSON 格式
- 日志轮转: 按日期归档
11.2 诊断工具
- Doctor 命令:
openclaw doctor- 配置检查
- 安全审计
- 版本检查
- 依赖验证
- 状态命令:
openclaw channels status --deep- 渠道探测
- 连接测试
- API 可达性
11.3 可观测性 (可选)
- OpenTelemetry: diagnostics-otel 插件
- 指标收集: 自定义 metrics
- 追踪: 分布式追踪 (可选)
12. 总结
OpenClaw 的架构设计体现了以下核心理念:
- 本地优先: 数据和隐私完全掌控
- 插件化: 易于扩展和定制
- 多渠道: 统一抽象,广泛兼容
- 安全默认: 配对模式和白名单
- 跨平台: CLI + 原生应用全覆盖
- AI 驱动: 强大的代理引擎和工具生态
这种架构既保证了系统的灵活性和可扩展性,又确保了个人助手应有的隐私性和安全性,是一个成熟的、生产级的个人 AI 助手平台。
其他说明:
由于项目更新频繁,文中如提到clawbot/moltbot,更换成openclaw即可。
更多推荐
所有评论(0)