OpenClaw架构揭秘:178k stars的个人AI助手如何用Gateway模式统一控制12+通讯频道

一句话简介:178k stars 的开源项目 OpenClaw,用一套 Gateway 架构同时接入了 WhatsApp、Telegram、Slack、Discord 等 12+ 通讯频道,还实现了 Canvas 可视化、全时语音、浏览器控制等高级功能。这篇文章将深度拆解它的架构设计,告诉你一个「个人 AI 助手」应该如何构建。


📋 目录


背景:为什么需要个人AI助手?

你是否也遇到过这样的场景?

  • 同事在 WhatsApp 上问你问题,客户在 Slack 上催进度,老板在 Telegram 上布置任务,而你还在 Discord 上跟社区成员讨论技术问题...
  • 你想让 AI 帮你处理这些消息,但每个平台都有不同的 API、不同的接入方式、不同的消息格式...
  • 你试过 ChatGPT,但它只能在网页里聊天;你试过各种 AI 助手,但它们要么收费昂贵,要么不能接入你日常使用的通讯工具...

直到我发现了 OpenClaw。

这个项目用一套优雅的架构解决了所有这些痛点:一个 Gateway 控制平面,统一管理 12+ 通讯频道,让你在任何平台上都能与同一个 AI 助手对话。更重要的是,它是完全开源的,你可以部署在自己的设备上,数据完全由你掌控。


项目概览:178k stars的OpenClaw

OpenClaw 是一个个人 AI 助手,你可以在自己的设备上运行它,通过 WhatsApp、Telegram、Slack、Discord 等常用通讯工具与它交互。它的核心理念是:Gateway 只是控制平面,真正的产品是 AI 助手本身。

核心数据

指标 数据 说明
GitHub Stars 178k ⭐ 验证日期: 2026-02-09
Forks 29.4k 活跃的开发者社区
Commits 9,167+ 持续迭代更新
License MIT 开源可商用
Issues 2.6k 活跃的 issue 讨论

支持的通讯频道(12+)

频道 技术实现 状态
WhatsApp Baileys 库 ✅ 稳定
Telegram grammY 框架 ✅ 稳定
Slack Bolt SDK ✅ 稳定
Discord discord.js ✅ 稳定
Google Chat Chat API ✅ 稳定
Signal signal-cli ✅ 稳定
iMessage BlueBubbles (推荐) / 传统 imsg ✅ 稳定
Microsoft Teams 扩展实现 ✅ 稳定
Matrix 扩展实现 ✅ 稳定
Zalo 扩展实现 ✅ 稳定
WebChat 内置 Web 界面 ✅ 稳定

支持的平台

  • macOS:完整的菜单栏应用,支持 Voice Wake、Talk Mode、Canvas
  • iOS:Node 模式,支持 Canvas、语音、相机、录屏
  • Android:Node 模式,支持 Canvas、语音、相机、录屏、短信

核心架构:Gateway WebSocket控制平面

OpenClaw 的架构可以用一句话概括:一个 Gateway,多个客户端,统一控制

架构图

graph TD A[WhatsApp] --> G[Gateway WebSocket Control Plane] B[Telegram] --> G C[Slack] --> G D[Discord] --> G E[Google Chat] --> G F[Signal/iMessage/Teams/Matrix/Zalo/WebChat] --> G G -->|WebSocket ws://127.0.0.1:18789| P[Pi Agent Runtime] G -->|CLI| CLI[openclaw CLI] G -->|Web UI| WC[WebChat] G -->|Native App| MA[macOS App] G -->|Node Protocol| N1[iOS Node] G -->|Node Protocol| N2[Android Node] P -->|Canvas| CV[Canvas A2UI] P -->|Browser| BR[Browser Control] P -->|Skills| SK[Skills Platform] P -->|Voice| VW[Voice Wake] P -->|Talk| TM[Talk Mode]

为什么用 WebSocket 做控制平面?

你可能会问:为什么要用 WebSocket 而不是 HTTP REST API?

答案很简单:实时性 + 双向通信

传统的 HTTP 请求是"一问一答"模式:客户端问,服务器答。但在 AI 助手的场景里,我们需要:

  1. 服务器主动推:AI 生成内容时,需要流式输出(stream)到客户端
  2. 双向通信:Gateway 既要接收用户消息,也要发送 AI 回复,还要处理各种事件(typing indicators、presence、媒体文件等)
  3. 长连接管理:一个用户可能同时在 WhatsApp、Telegram、Slack 上聊天,Gateway 需要同时维护多个连接

WebSocket 就像是给 AI 助手装了一个"神经系统":所有感官(频道)都连接到大脑(Pi Agent),大脑的处理结果又能实时反馈到任何一个感官。

Gateway 的核心职责

职责 说明
Session Management 管理用户会话,区分 main(私聊)和 group(群聊)模式
Channel Routing 根据配置将消息路由到不同的 Agent 或处理逻辑
Multi-agent Routing 支持多个隔离的 Agent,不同频道/账号可以路由到不同的 AI 助手
Event Streaming 流式传输 AI 生成内容、打字状态、在线状态等
Tool Invocation 调用浏览器、Canvas、Node 等工具
Media Pipeline 处理图片、音频、视频,支持转录、大小限制、临时文件生命周期管理

多频道接入:12+通讯频道的秘密

OpenClaw 最让人惊叹的是它同时支持 12+ 个通讯频道。这是怎么做到的?

统一抽象层

OpenClaw 没有为每个频道写一堆重复代码,而是设计了统一的 Channel Abstraction Layer(频道抽象层)。

代码示例(概念性):

typescript 复制代码
// 统一的频道接口
interface Channel {
  // 发送消息
  send(to: string, message: string): Promise<void>;
  
  // 接收消息(回调)
  onMessage(handler: (msg: Message) => void): void;
  
  // 发送打字状态
  sendTyping(to: string): Promise<void>;
  
  // 获取频道信息
  getInfo(): ChannelInfo;
}

// WhatsApp 实现
class WhatsAppChannel implements Channel {
  private baileys: any;
  
  async send(to: string, message: string) {
    // 使用 Baileys 库发送
    await this.baileys.sendMessage(to, { text: message });
  }
  
  onMessage(handler) {
    this.baileys.ev.on('messages.upsert', handler);
  }
  
  // ... 其他实现
}

// Telegram 实现  
class TelegramChannel implements Channel {
  private bot: Bot;
  
  async send(to: string, message: string) {
    // 使用 grammY 发送
    await this.bot.api.sendMessage(to, message);
  }
  
  onMessage(handler) {
    this.bot.on('message', handler);
  }
  
  // ... 其他实现
}

关键洞察:虽然 WhatsApp、Telegram、Slack 的底层协议完全不同(WhatsApp 用 Baileys 的 WhatsApp Web 协议,Telegram 用 Bot API,Slack 用 Bolt SDK),但在 Gateway 看来,它们都是实现了统一接口的 Channel。

群聊 vs 私聊的路由策略

OpenClaw 的消息路由设计非常精细:

场景 路由规则 说明
私聊 (DM) 直接路由到 main session 一对一对话
群聊 @提及 当消息中提到 AI 助手时响应 mention gating
群聊回复 当有人回复 AI 助手的消息时响应 reply tags
频道隔离 不同频道可以配置不同的 Agent 工作/生活分离

DM 安全策略

OpenClaw 连接到真实的通讯表面,必须处理不受信任的输入。默认安全策略:

  • Pairing Mode(配对模式):未知发送者会收到一个配对码,必须先通过 CLI 批准才能与 AI 助手对话
  • Allowlist (白名单):只有通过 openclaw pairing approve 批准的用户才能发送消息
  • Open Mode(开放模式):显式配置后允许所有人发送消息(不推荐)

这就像是在你家门口装了一个智能门禁:陌生人需要按门铃(配对码),你确认后才开门(批准)。


Pi Agent:AI大脑的RPC实现

如果说 Gateway 是神经系统,那么 Pi Agent 就是大脑。

RPC 模式 vs 直接调用

OpenClaw 的 Pi Agent 运行在 RPC(Remote Procedure Call)模式,这意味着:

  • 分离架构:Gateway 和 Agent 可以运行在不同的进程甚至不同的机器上
  • 语言无关:Agent 可以用任何语言实现(OpenClaw 用 Node.js/TypeScript)
  • 可替换性:你可以接入自己的 Agent 实现,只要遵循相同的 RPC 协议

对比传统的直接调用

typescript 复制代码
// 传统方式:Gateway 直接调用 Agent
const response = await agent.processMessage(message);

// OpenClaw 方式:RPC 调用
const response = await rpc.call('pi.agent.processMessage', {
  sessionId: 'main',
  message: message,
  tools: ['browser', 'canvas', 'node']
});

RPC 就像是给大脑和神经系统之间加了一个标准接口:只要接口不变,你可以换任何品牌的大脑。

Tool Streaming & Block Streaming

Pi Agent 支持两种流式输出:

  1. Tool Streaming:AI 决定使用工具时,实时流式传输工具调用信息
  2. Block Streaming:AI 生成内容时,分块流式传输(类似 ChatGPT 的打字效果)

这让用户体验更加实时、流畅,不用等待 AI 完全生成完才看到回复。


Canvas+A2UI:可视化工作空间

如果说文字聊天是 1D 交互,那么 Canvas 就是 2D/3D 交互

什么是 A2UI?

A2UI(Agent-to-User Interface) 是 OpenClaw 提出的概念:Agent 主动构建用户界面,而不是被动响应。

传统 AI 助手

  • 用户问:"帮我画个架构图"
  • AI 回答:"这是一个 Mermaid 代码:mermaid..."
  • 用户:?? 还要自己复制到 Mermaid 编辑器里才能看到图

OpenClaw 的 Canvas

  • 用户问:"帮我画个架构图"
  • AI 直接在 Canvas 上渲染出架构图
  • 用户可以看到、交互、甚至修改

Canvas 的技术实现

Canvas 是一个本地运行的 Web 视图,Agent 可以通过 RPC 调用控制它的内容:

typescript 复制代码
// Agent 推送内容到 Canvas
await canvas.push({
  type: 'mermaid',
  content: `
    graph TD
      A[用户] --> B[Gateway]
      B --> C[Pi Agent]
  `
});

// Agent 重置 Canvas
await canvas.reset();

// Agent 执行 JavaScript(在 Canvas 内)
await canvas.eval(`
  document.querySelector('.chart').style.background = '#f0f0f0';
`);

关键洞察 :Canvas 就像是给 AI 助手提供了一个无限扩展的画布,它可以画图、展示表格、渲染图表、甚至构建简单的交互应用。


Voice Wake+Talk Mode:全时语音交互

文字聊天很方便,但有时候你只想 而不想打字

Voice Wake(语音唤醒)

就像 Siri 或 Alexa 的 "Hey Siri",OpenClaw 支持自定义唤醒词:

  • 你在电脑上工作,突然想查个资料
  • 说出唤醒词(比如 "Hey Claw")
  • OpenClaw 立即进入监听状态
  • 你说出问题,它语音回复

技术实现

  • macOS/iOS:使用系统 Speech Recognition API + ElevenLabs TTS
  • Android:使用 Android Speech API
  • 持续监听:本地处理唤醒词检测,保护隐私

Talk Mode(对话模式)

Voice Wake 是"一问一答",Talk Mode 则是持续对话

  • 进入 Talk Mode 后,AI 助手保持监听状态
  • 你可以像跟朋友聊天一样连续对话
  • 支持打断(interrupt):AI 说话时你也可以插话
  • 支持 context 保持:对话历史不丢失

使用场景

  • 头脑风暴时,边说边让 AI 记录和整理
  • 编程时,语音描述需求让 AI 生成代码
  • 不方便打字的场景(做饭、开车、运动)

Skills Platform:三级插件系统

OpenClaw 的插件系统叫 Skills,分三个层级:

1. Bundled Skills(内置技能)

  • 随 OpenClaw 一起发布的官方技能
  • 示例:browser(浏览器控制)、canvas(画布)、cron(定时任务)
  • 特点:开箱即用,质量有保障

2. Managed Skills(托管技能)

  • 社区开发,通过 OpenClaw 官方仓库分发
  • 用户通过 CLI 安装:openclaw skills install <skill-name>
  • 特点:审核过的第三方技能,安全可控

3. Workspace Skills(工作区技能)

  • 用户自己开发的本地技能
  • 放在工作区目录下,OpenClaw 自动加载
  • 特点:完全自定义,适合特定业务需求

技能开发示例

typescript 复制代码
// 一个简单的 Skill
export default {
  name: 'weather',
  description: 'Get weather information',
  
  async execute({ city }) {
    const response = await fetch(`https://api.weather.com/v1/current?city=${city}`);
    const data = await response.json();
    
    return {
      text: `Current weather in ${city}: ${data.temperature}°C, ${data.condition}`,
      temperature: data.temperature,
      condition: data.condition
    };
  }
};

关键洞察 :三级技能系统就像是 App Store + 企业应用 + 个人脚本 的结合,既保证了生态丰富性,又保留了灵活度。


技术启发:架构设计的通用性思考

OpenClaw 的架构设计给了我们很多启发,不仅适用于 AI 助手,也适用于其他类型的应用。

启发 1:控制平面与数据平面分离

OpenClaw 的 Gateway 是控制平面,负责连接管理、路由、安全策略;Pi Agent 是数据平面,负责 AI 逻辑。

通用化

  • 聊天应用:Gateway 管理连接,Chat Service 处理消息逻辑
  • IoT 平台:Gateway 管理设备连接,Rule Engine 处理业务逻辑
  • 实时协作:Gateway 管理用户会话,Collaboration Service 处理文档协作

好处

  • 控制平面可以独立扩展(加更多 Gateway 实例)
  • 数据平面可以独立升级(更新 AI 模型不影响连接)
  • 支持多种数据平面(可以用同样的 Gateway 接入不同的 AI 模型)

启发 2:统一抽象层应对多样性

OpenClaw 用统一的 Channel 接口接入 12+ 个不同的通讯频道。

通用化

  • 支付系统:统一的 Payment Gateway 接口,接入支付宝、微信、Stripe、PayPal
  • 存储系统:统一的 Storage 接口,接入 S3、Azure Blob、本地文件
  • 消息队列:统一的 MQ 接口,接入 Kafka、RabbitMQ、RocketMQ

好处

  • 新增渠道只需实现接口,无需改动核心逻辑
  • 可以轻松切换底层实现(比如从 WhatsApp 切换到 Telegram)
  • 便于测试(可以 mock Channel 接口)

启发 3:WebSocket 作为实时系统的标配

OpenClaw 用 WebSocket 实现双向实时通信。

适用场景

  • 实时协作(Google Docs、Figma)
  • 实时游戏(多人在线游戏)
  • 实时金融(股票行情、交易系统)
  • IoT 实时监控

注意事项

  • WebSocket 连接需要心跳保活
  • 需要考虑断线重连机制
  • 大规模部署需要负载均衡(Sticky Session)

启发 4:渐进式权限控制

OpenClaw 的 DM 安全策略从 "完全开放" 到 "完全封闭" 之间有多个层级(pairing → allowlist → open)。

通用化

  • API 权限:公开 API → 需要 API Key → 需要 OAuth → 需要特定 Scope
  • 文件访问:公开下载 → 需要登录 → 需要特定权限 → 完全私有
  • 功能开放:Beta 功能 → 灰度发布 → 全量发布

好处

  • 可以根据安全需求灵活调整
  • 便于逐步开放功能,降低风险
  • 用户可以选择自己舒适的隐私级别

启发 5:本地优先 + 云端可选

OpenClaw 的设计是"本地优先":

  • 默认 Gateway 运行在本地(ws://127.0.0.1:18789)
  • 数据存储在本地
  • 也可以部署到远程服务器(通过 Tailscale、SSH 隧道)

这种模式的优点

  • 隐私可控:敏感数据不出本机
  • 离线可用:即使没有网络也能用(只要 AI 模型本地运行)
  • 云端可选:需要远程访问时,可以通过安全隧道连接

适用场景

  • 个人知识管理工具
  • 隐私敏感的 AI 应用
  • 边缘计算场景

总结:从OpenClaw学到的5个架构原则

  1. 控制平面与数据平面分离:Gateway 负责连接,Agent 负责逻辑,两者可以独立演进

  2. 统一抽象层应对多样性:用统一接口封装底层差异,12+ 频道也能管理得井井有条

  3. WebSocket 实现实时双向通信:流式输出、打字状态、在线状态,都用 WebSocket 搞定

  4. 渐进式权限控制:从 pairing 到 allowlist 到 open,给用户选择权,给开发者灵活度

  5. 本地优先 + 云端可选:数据默认留在本地,需要时可以通过安全隧道远程访问


参考链接

链接 描述 验证状态
openclaw/openclaw GitHub 官方仓库 ✅ 已验证
openclaw.ai 官方网站 ✅ 已验证
docs.openclaw.ai 官方文档 ✅ 已验证
DeepWiki 深度 Wiki ✅ 已验证
相关推荐
mldong7 小时前
你的 Vue3 项目也能有钉钉同款审批流设计器:npm 装包,10 分钟画出第一条审批流
前端·vue.js
2分钟速写快排8 小时前
什么是 RAG?如何用 RAG 实现一个用户记忆?
前端·后端·ai编程
passerby60618 小时前
如何自己造一个时间处理库
前端·javascript·github
走到天涯海角9 小时前
react里面的长列表渲染优化
前端·react.js·前端框架
小羊没烦恼!9 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
北岛贰10 小时前
迷茫焦虑期,我做了一个带支付带官网的 AI 聊天虚拟恋人 App
前端·人工智能·后端
mayaairi11 小时前
Vue2 组件通讯(三):全局事件总线、PubSub、插槽与组件实例属性
前端·javascript·vue.js
kyriewen12 小时前
面试官问我:AI 都能写代码了,前端凭什么还值 25K
前端·javascript·人工智能
风骏时光牛马12 小时前
AI源码分析:拆解模型底层实现逻辑
前端
BillKu13 小时前
全局样式变量:CSS 自定义属性(--border-color)和SCSS 变量($border-color)的说明
javascript·css·scss