OpenClaw 技能解构:从 WhatsApp 谈天呆板人到 AI 使用体系

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
布局决定功能,汗青显现筹划。本文从用户视角出发,向底层追问"它是怎么做到的"。
OpenClaw 是什么?

你在任何谈天窗口给它发一条消息,它就能帮你使用电脑——实行下令、读写文件、欣赏网页、操控桌面应用、管理定时任务,乃至语音对话。
和常见的 AI 谈天呆板人差别,OpenClaw 运行在你自己的电脑上,不依赖云端服务器。它支持 WhatsApp、Telegram、Discord、Slack、Signal、iMessage 等外洋主流平台,也通过插件支持飞书、企业微信、qq等国内渠道。除了消息平台,尚有 macOS / iOS / Android 原生应用,以及终端下令行和 Web 控制台。
简单说:20+ 种入口,一个当地 AI 大脑,一套工具集。
graph TB    subgraph IN ["用户入口"]        MSG["消息渠道
WhatsApp · Telegram · Discord
Slack · Signal · iMessage
飞书 · LINE · Matrix ..."]        APP["原生应用
macOS · iOS · Android"]        CLI["终端与 Web
TUI 下令行 · Control UI"]    end    subgraph GW ["Gateway 网关"]        R["消息路由"] --- Q["消息队列"]        Q --- S["会话管理"]        S --- CR["Cron 调理"]        CR --- HK["Hook 体系"]        HK --- PL["lugin 注册"]    end    subgraph AG ["Agent 运行时"]        PI["i SDK agent loop"] --- PR["rovider 路由"]        PR --- FO["Model Failover"]        FO --- CE["Context Engine"]    end    subgraph TL ["工具集"]        T1["体系使用
exec · read · write · cron"]        T2["网络与感知
browser · web_search · memory"]        T3["多媒体与 GUI
peekaboo · canvas · tts"]    end    MSG --> GW    APP --> GW    CLI --> GW    GW --> AG    AG --> T1    AG --> T2    AG --> T3    style MSG fill:#bbdefb,stroke:#333    style APP fill:#bbdefb,stroke:#333    style CLI fill:#bbdefb,stroke:#333    style R fill:#fff9c4,stroke:#333    style Q fill:#fff9c4,stroke:#333    style S fill:#fff9c4,stroke:#333    style CR fill:#fff9c4,stroke:#333    style HK fill:#fff9c4,stroke:#333    style PL fill:#fff9c4,stroke:#333    style PI fill:#e8d5f5,stroke:#333    style PR fill:#e8d5f5,stroke:#333    style FO fill:#e8d5f5,stroke:#333    style CE fill:#e8d5f5,stroke:#333    style T1 fill:#c8e6c9,stroke:#333    style T2 fill:#c8e6c9,stroke:#333    style T3 fill:#c8e6c9,stroke:#333演化史

OpenClaw 历经 Warelay → Clawdis → Clawdbot → OpenClaw 四次更名,我们看看每次更名时的架构变革。
Warelay:"一条管道"

项目名 warelay = WA Relay(WhatsApp 中继)。用户通过 WhatsApp 或短信给 AI 发消息,收到笔墨复兴。没有 Gateway、没有 Agent、没有会话管理——就是一个 webhook 脚本。
graph LR    A["Twilio / Baileys
吸收消息"] --> B["Express 路由"] --> C["AI API
天生复兴"] --> D["原路返回"]    style A fill:#f9f,stroke:#333    style D fill:#9f9,stroke:#333关键选择:用 Baileys(开源 WhatsApp 协议库)而非商业 API 收发 WhatsApp。利益是免费且不依赖第三方服务,代价是 Baileys 要求每台呆板只能维持一个 WhatsApp 会话
Clawdis:最关键的跃迁

这是变革最剧烈的阶段——三件大事同时发生:
引入 Pi SDK:Pi 是一个外部 agent 框架,提供了"消息 → prompt → 调大模子 → 剖析工具调用 → 实行 → 循环"的焦点 agent 循环(架构详见后文 Pi Agent Runtime 一节)。OpenClaw 以后不再是"收到消息调一次 API",而是一个真正的 AI agent。
2 周内接入 5 个渠道:Telegram、Discord、Signal、iMessage、WhatsApp——每个平台的消息格式、API 风格、群组概念都差别。多渠道的差别催生了 Adapter 模式Channel Dock(同一注册中央),每个渠道只实现它必要的接口子集(详见后文通道适配器一节)。
Gateway 诞生:从一个 CLI 下令行工具变为常驻背景服务,全部客户端通过 WebSocket 同一接入,内含消息路由、队列、会话管理、Cron 调理、Hook 体系和 Plugin 注册。
Clawdbot → OpenClaw:生产化与平台化

焦点思绪是让新功能通过插件生长,焦点代码库不再膨胀。为此落地了三层扩展机制:
插件体系:Plugin SDK + jiti

社区开发插件时,导出一个 register(api) 函数即可声明本事——可注册的范例包罗:

  • 渠道(registerChannel)—— 接入新的消息平台
  • 工具(registerTool)—— 给 AI 新的使用本事
  • 钩子(registerHook)—— 在消息流水线的特定节点插入逻辑
  • HTTP 路由 / CLI 子下令 / 背景服务 —— 扩展 Gateway 和下令行
Node.js 生态的模块格式分裂(ESM vs CJS)是插件加载的重要停滞。OpenClaw 用 jiti(运行时 TypeScript 编译加载器)同一处置惩罚:插件不必要预编译,写完直接安装即可运行。现在 40+ 个扩展(飞书、LINE、Matrix、Twitch、语音通话……)都以插件情势存在。
当地影象:sqlite-vec

让 AI 拥有跨会话的恒久影象。文本切片后转为向量,存入当地 SQLite,用 sqlite-vec 扩展做余弦相似度检索。搜刮采取肴杂计谋——向量语义匹配 + BM25 关键词匹配——分身"意思相近"和"关键词掷中"。全部数据留在当地磁盘,也可通过 MCP 桥接对接外部知识库。
技能市场:ClawHub

插件办理了渠道和工具的扩展,但 AI 的运动模式怎么共享?ClawHub(clawhub.ai)是公开的技能注册中央。技能本质是注入 system prompt 的声明文件,形貌 AI 在特定场景下该怎么做(比如"操控 macOS 桌面"、"天生代码后自动运行测试")。

  • 安装:clawhub install
  • 加载优先级:workspace > 当地 > 内置
  • 社区管理:点赞、品评、举报,有独立考核机制
项目标 VISION.md 明确要求:新技能应先发布到 ClawHub,不要默认参加焦点堆栈
焦点子体系拆解

Pi Agent Runtime:OpenClaw 的大脑

OpenClaw 的 agent 本事不是从零自研——它站在 Pi SDK 的肩膀上。Pi 是一个 7 包 monorepo,从底向上分三层:
graph TB    subgraph PI_AI ["pi-ai · LLM 抽象层"]        direction LR        PROV["rovider 注册
Anthropic · OpenAI · Google
Mistral · Bedrock 等 16+"]        MODEL["Model 注册表
340KB 自动天生
资本 · 窗口 · 本事"]        STREAM["EventStream
同一流式协议
text / thinking / toolcall"]        PROV --- MODEL --- STREAM    end    subgraph PI_AGENT ["pi-agent-core · Agent 运行时"]        direction LR        LOOP["Agent Loop
prompt → stream → parse
→ execute → loop"]        TOOL["Tool 体系
TypeBox schema 校验
流式进度回调"]        EVENT["事故总线
turn_start · message_update
tool_execution_end ..."]        STEER["Steering + FollowUp
运行中插入新指令
列队后续任务"]        LOOP --- TOOL --- EVENT --- STEER    end    subgraph PI_APP ["pi-coding-agent · SDK 层"]        direction LR        SDK["createAgentSession()
工具 · 钩子 · 会话一站式初始化"]        SESS["SessionManager
JSONL 树形长期化
分支 · 规复 · 压缩"]        CTX["Context 管线
transformContext 裁剪注入
convertToLlm 格式转换"]        SDK --- SESS --- CTX    end    PI_AI --> PI_AGENT --> PI_APP    style PROV fill:#e8d5f5,stroke:#333    style MODEL fill:#e8d5f5,stroke:#333    style STREAM fill:#e8d5f5,stroke:#333    style LOOP fill:#d5e8f5,stroke:#333    style TOOL fill:#d5e8f5,stroke:#333    style EVENT fill:#d5e8f5,stroke:#333    style STEER fill:#d5e8f5,stroke:#333    style SDK fill:#c8e6c9,stroke:#333    style SESS fill:#c8e6c9,stroke:#333    style CTX fill:#c8e6c9,stroke:#333pi-ai(LLM 抽象层) 把 16+ 家模子供应商同一成一个 stream(model, context) 调用。每个供应商实现一个 StreamFunction,把各家私有的流式相应转成标准事故序列(text_delta、thinking_delta、toolcall_start/end)。模子注册表是自动天生的,包罗每个模子的资本、上下文窗口、支持的输入范例(文本/图片)和推理本事。
pi-agent-core(Agent 运行时) 提供焦点循环:用户消息进入 → 流式调用 LLM → 剖析工具调用 → 按序实行工具 → 效果返回 LLM → 继承循环直到 end_turn。工具用 TypeBox 界说参数 schema,运行时自动校验。。
pi-coding-agent(SDK 层) 提供 createAgentSession() 工厂方法,一次性组装工具集、上下文钩子和会话存储。SessionManager 用 JSONL 文件存储对话树(每条消息有 id + parentId),支持分支、规复和压缩。上下文管线分两步:transformContext() 在 AgentMessage 层面裁剪/注入(比如删掉过旧的消息),convertToLlm() 再把自界说消息范例转成 LLM 能明确的标准格式。
OpenClaw 在 Pi 之上包了六部分,让它从一个通用 agent 框架变成多渠道 AI 助手:
graph LR    subgraph PI ["i SDK"]        PA["agent 循环引擎"]        PB["LLM 流式推理"]        PC["SessionManager
会话长期化"]    end    PI --> L1 & L4    subgraph OC1 ["OpenClaw 包装 — 调理层"]        L1["rovider 路由
适配差别 LLM 供应商"]        L2["Model Failover
主模子挂了自动切备用"]        L3["Context Engine
长对话不丢上下文"]    end    subgraph OC2 ["OpenClaw 包装 — 接入层"]        L4["工具注册
exec / browser / memory ..."]        L5["rompt 构建
体系指令 + Skills"]        L6["会话订阅
流式回调给渠道"]    end    style PI fill:#e8d5f5,stroke:#333    style OC1 fill:#fff3e0,stroke:#333    style OC2 fill:#fff3e0,stroke:#333消息全链路:从收到到复兴

一条消息从进入体系到收到复兴,颠末如许的流水线:
graph TD    A["1 收到原始消息"] --> B["2 归一化
差别渠道的消息同一成雷同格式"]    B --> C["3 去重"]    C --> D    subgraph D ["4 Hook + 路由"]        direction LR        D1["触发插件钩子
如自动翻译、日记"] -.- D2["路由剖析
确定交给哪个 Agent"]    end    D --> E    subgraph E ["5 媒体明确"]        direction LR        E1["语音转笔墨"] -.- E2["图片天生形貌"]    end    E --> F    subgraph F ["6 入队计谋"]        direction LR        F1["eager
立刻处置惩罚"] -.- F2["batch
短时间多条归并处置惩罚"] -.- F3["debounce
等用户克制输入再处置惩罚"]    end    F --> G    subgraph G ["7 Agent 实行"]        direction LR        G1["i SDK 循环"] -.- G2["Steering 转向"]    end    G --> H    subgraph H ["8 复兴调理"]        direction LR        H1["包管次序"] -.- H2["仿人打字隔断"]    end    H --> I["9 投递到渠道"]    style A fill:#bbdefb,stroke:#333    style B fill:#bbdefb,stroke:#333    style C fill:#bbdefb,stroke:#333    style D fill:#fff9c4,stroke:#333    style E fill:#fff9c4,stroke:#333    style E1 fill:#fff9c4,stroke:#333    style E2 fill:#fff9c4,stroke:#333    style F fill:#fff9c4,stroke:#333    style F1 fill:#fff9c4,stroke:#333    style F2 fill:#fff9c4,stroke:#333    style F3 fill:#fff9c4,stroke:#333    style G fill:#e8d5f5,stroke:#333    style G1 fill:#e8d5f5,stroke:#333    style G2 fill:#e8d5f5,stroke:#333    style H fill:#c8e6c9,stroke:#333    style H1 fill:#c8e6c9,stroke:#333    style H2 fill:#c8e6c9,stroke:#333    style I fill:#c8e6c9,stroke:#333两个值得留意的筹划:

  • Steering(转向):agent 正在天生复兴时,你又发了一条消息。平凡体系会让你等上一条处置惩罚完。OpenClaw 通过 session.steer() 把新消息及时注入当前 agent 运行,AI 会立刻调解复兴方向——就像你跟人语言时补了一句"等等,我改主意了"。
  • 仿人延长:复兴不是一次性弹出,而是分块发送,块间插入随机隔断,模拟真人打字节奏。在微信、Telegram 这类即时通讯里,这让对话体验更自然。
通道适配器:怎样同一 20+ 种渠道

WhatsApp 有"已读回执",Telegram 有"群组管理 API",Discord 有"权限体系",Signal 险些什么管理接口都没有——每个平台的本事完全差别。
OpenClaw 的做法不是筹划一个大而全的接口让每个通道都实现,而是拆成 10 种细粒度 Adapter,每个通道只实现它必要的子集
graph TB    DOCK["Channel Dock 注册中央
渠道发现 · 生命周期管理"] --> A_TG["Telegram"]    DOCK --> A_DC["Discord"]    DOCK --> A_WA["WhatsApp"]    DOCK --> A_MORE["..."]    subgraph IFACE ["Adapter 接口(按需实现)"]        direction LR        subgraph LIFE ["生命周期"]            direction LR            IF1["Setup"] -.- IF2["Config"] -.- IF6["Status"] -.- IF8["Heartbeat"]        end        subgraph MSG ["消息收发"]            direction LR            IF4["Messaging"] -.- IF3["Outbound"] -.- IF10["Media"]        end        subgraph PERM ["权限与管理"]            direction LR            IF7["Security"] -.- IF9["Auth"] -.- IF5["Group"]        end    end    A_TG --> IFACE    A_DC --> IFACE    A_WA --> IFACE    A_MORE --> IFACE    style DOCK fill:#d5e8f5,stroke:#333    style IFACE fill:#eef4fb,stroke:#333    style LIFE fill:#e8f5e9,stroke:#a5d6a7    style MSG fill:#fff3e0,stroke:#ffcc80    style PERM fill:#fce4ec,stroke:#ef9a9a

  • WhatsApp 实现了 HeartbeatAdapter(Baileys 毗连不稳固,必要心跳保活)
  • Discord 实现了 SecurityAdapter(有复杂的权限体系)
  • Signal 不必要 GroupAdapter(没有群管理 API)
社区开发新渠道插件(比如飞书、LINE)时,用 Plugin SDK 实现同样的接口即可接入,不必要改动 OpenClaw 焦点代码
Peekaboo Bridge:让 AI 瞥见并操控 macOS 桌面

你在 WhatsApp 里说"帮我看看屏幕上是什么",AI 就能截屏、明确画面内容、告诉你答案。你说"点击登录按钮",它就能找到按钮并点击。你说"打开 Safari 访问某个网址",它能启动应用、导航页面、在输入框里打字。
这背后是 Peekaboo——一个 macOS 桌面自动化工具,让 AI 拥有"眼睛"和"手":

  • :截屏、录屏、标注 UI 元素(给每个按钮/输入框分配 ID),共同 AI 视觉分析明确画面
  • 使用:点击、打字、按键组合、滚动、拖拽,支持定位到具体 UI 元素
  • 管理:启动/切换/关闭应用,管理窗口巨细和位置,切换 macOS 空间,读写剪贴板
典范工作流是:截屏标注 → AI 辨认元素 ID → 点击/输入 → 再截屏确认效果,全程在谈天窗口完成。
Peekaboo 内部分为五层:
graph TB    subgraph CONSUMER ["消耗层"]        direction LR        CLI["peekaboo CLI
Commander 框架"]        APP["macOS App
SwiftUI"]        MCP["MCP Server
供外部 AI 调用"]        AGENT["内置 Agent
Tachikoma 驱动"]    end    subgraph BRIDGE ["Bridge IPC 层"]        direction LR        CLIENT["BridgeClient
毗连 UNIX Socket"]        HOST["BridgeHost
监听 Socket"]        VERIFY["代码署名验证
Team ID 白名单"]        CLIENT --> HOST        HOST --> VERIFY    end    subgraph ORCH ["服务编排层"]        UAS["UIAutomationService
同一调理入口"]        SNAP["SnapshotManager
元素状态缓存"]        VIS["Visualizer
点击动画 · 高亮反馈"]        UAS --- SNAP        UAS --- VIS    end    DET["ElementDetection
AX 树遍历 · 元素分类
B1/T1 编号"]    CAP["ScreenCapture"]    CLK["Click · Type
Scroll · Hotkey"]    APPCTL["App · Window
Space · Menu"]    AX["Accessibility
AXorcist 封装"]    SCK["ScreenCaptureKit"]    CG["CGEvent
鼠标 · 键盘"]    AS["AppleScript
应用管理"]    CLI --> BRIDGE    APP --> ORCH    MCP --> BRIDGE    AGENT --> ORCH    BRIDGE --> ORCH    ORCH --> DET & CAP & CLK & APPCTL    DET --> AX    CAP --> SCK    CLK --> CG    APPCTL --> AS    style CLI fill:#bbdefb,stroke:#333    style APP fill:#bbdefb,stroke:#333    style MCP fill:#bbdefb,stroke:#333    style AGENT fill:#bbdefb,stroke:#333    style CLIENT fill:#fff9c4,stroke:#333    style HOST fill:#fff9c4,stroke:#333    style VERIFY fill:#fff9c4,stroke:#333    style UAS fill:#e8d5f5,stroke:#333    style SNAP fill:#e8d5f5,stroke:#333    style VIS fill:#e8d5f5,stroke:#333    style DET fill:#c8e6c9,stroke:#333    style CAP fill:#c8e6c9,stroke:#333    style CLK fill:#c8e6c9,stroke:#333    style APPCTL fill:#c8e6c9,stroke:#333    style AX fill:#ffe0b2,stroke:#333    style SCK fill:#ffe0b2,stroke:#333    style CG fill:#ffe0b2,stroke:#333    style AS fill:#ffe0b2,stroke:#333几个关键筹划:
Bridge 权限署理:macOS 的屏幕录制和辅助功能权限是按应用授予的,但 AI agent 调用的是下令行工具 peekaboo。办理方案是 Bridge 架构——CLI 通过 UNIX Socket 毗连到 OpenClaw.app 内的 BridgeHost 进程,BridgeHost 先验证调用方的代码署名和 Team ID,通过后才借出 app 已得到的权限实行使用。用户只需在体系设置里授权一次 OpenClaw.app。
元素检测与编号:see 下令截屏时同步遍历 Accessibility 树(通过 AXorcist 封装),把每个可交互元素按范例编号——按钮 B1、B2,输入框 T1、T2。遍历有严酷限定(深度 8 层、子节点 200 个、150ms 超时),检测效果缓存 1.5 秒制止重复遍历。后续 click B1 就能直接定位到目标元素。
内置 Agent 模式:Peekaboo 自带基于 Tachikoma 的 agent 循环(支持 OpenAI / Anthropic / Ollama 等模子),可以独立实行多步桌面任务——不颠末 OpenClaw,直接 peekaboo agent "打开备忘录写一条待办" 就能截屏→分析→点击→输入→确认,循环直到完成。
Skill 注入:Peekaboo 在 OpenClaw 中不是代码依赖,而是一个 Skill——通过声明文件标注"仅限 macOS、必要 peekaboo 下令",运行时按需注入到 AI 的 system prompt 中。非 macOS 用户完全不会感知到它的存在。
Cron 调理器:不但是定时器

OpenClaw 的定时任务不是简单的 setInterval,而是一个生产级调理体系:

  • SHA256 Stagger:如果设了 100 个"天天早上 9 点"的定时任务,不会同时触发——用每个任务 ID 的 SHA256 哈希做确定性偏移(默认在 5 分钟窗口内分散),制止全部任务同一秒涌入,导致 CPU 和 API 调用刹时过载
  • 两种实行模式:systemEvent(把消息注入主会话,像用户发了一条消息)和 agentTurn(启动独立的 agent 运行,互不干扰)
  • 容错:失败后指数退避重试(30 秒 → 1 分钟 → 5 分钟 → 15 分钟 → 1 小时),连续失败触发告警,临时 session 自动采取
Context Engine:长对话不丢影象

大模子有上下文窗口限定(比如 200K token),聊久了上下文就超出。Pi SDK 提供了底层的两步上下文管线(transformContext 裁剪 + convertToLlm 格式转换),OpenClaw 在此底子上实现了自己的 Context Engine,界说了 5 个生命周期钩子:
bootstrap(初始化)→ ingest(新消息进入)→ assemble(组装发给模子的上下文)→ compact(上下文太长时压缩)→ afterTurn(一轮对话竣过后整理)
默认实现用 token 计数 + LLM 择要来压缩汗青对话。但整个 Context Engine 是可插拔的——社区可以写一个完全差别的实现(比如基于向量检索的恒久影象),更换进去不必要改一行焦点代码。
结语

阿瑟·克拉克在《2001:太空环游》里写过一个场景:猿人玉轮观察者捡起一块石头,第一次意识到自己的手可以延伸。从那一刻起,工具就不再是身段之外的东西——它是意志的投射。
我们本日拆解的这些——Gateway、Adapter、Bridge、Agent Loop——本质上都是同一件事的差别切面:让意图穿透介质。用户在 WhatsApp 里打一行字,意图穿过消息协议、穿过归一化流水线、穿过 LLM 的概率空间、穿过工具调用,终极变成屏幕上的一次点击、磁盘上的一个文件、终端里的一行输出。中央的每一层抽象,都是为了让这条路径上的摩擦再少一点。
这让人想起维纳在《控制论》里的判定:智能的本质不是盘算,而是与情况之间有效的信息互换。OpenClaw 做的事变,与其说是"让 AI 用工具",不如说是在收缩人的意图天下的状态之间的隔断。

免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金.
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表