乐于分享
好东西不私藏

翻完 OpenClaw 源码,我发现它火得一点都不冤

翻完 OpenClaw 源码,我发现它火得一点都不冤

一个奥地利人,花了一个周末,用 Vibe Coding 攒了个项目。

三天后,GitHub 涨了 6 万 Star。到现在,10 万+ Star,一周 200 万访客。

听起来很夸张对吧?更夸张的是,很多人翻完代码后说了一句:「这不就是个胶水项目吗?」

OpenClaw 的技术确实没什么门槛。它没有自研大模型,没有革命性的算法,甚至底层的 Agent 循环都是直接用的开源框架 Paimimo。

但它就是火了。

为什么?因为产品设计做对了。技术选型和系统架构怎么搭的,这才是值得拆的东西。

今天这篇文章,我把 OpenClaw 的底层拆干净,让你看清楚它到底是怎么搭的。看完之后你会发现——这套东西,你也能搭。


先搞清楚 OpenClaw 在解决什么问题

在拆技术之前,先说清楚一件事:OpenClaw 到底在干嘛。

一句话概括:它是一个跑在你自己电脑上的、能通过聊天工具控制的、有自主性的 AI 助手。

三个关键词:

个人 不是 SaaS 服务,是你自己的。数据存在你电脑上,性格你自己调教,能力你自己装配。你可以让它像渣女一样说话,也可以让它像沉默的管家一样只做事不废话。

自主 不是你一步步教它干活的 Workflow,而是你说一句「帮我把那个文件夹整理一下」,它自己去翻文件、分类、建索引。基于 ReAct 架构,能自己思考下一步该干什么。

助手 定位是帮你完成任务,不是替代你。你不需要说太多,把需求扔给它,它自己搞定。

明确了这个,我们来看它是怎么实现的。


系统架构全景

OpenClaw 的整体架构其实不复杂。

所有东西都跑在一个 Gateway 进程里,这是一个 Node.js 服务。它做的事情可以拆成这么几块:

Channel 管理是第一层。不管你从 WhatsApp 还是 QQ 发消息过来,都会对应到一个 Channel。每个用户的私聊、每个群组的对话,都是独立的 Channel。

拿到 Channel 后,消息路由会把它分发到具体的 Agent 上。每个 Agent 管着自己的多个 Session——Session 就是你跟模型的一通对话。

这层网关的作用很简单:把不同来源的消息统一起来,让 Agent 运行时不用关心消息是从哪来的。

Session 运行时才是核心。它基于 Paimimo 框架构建,一条消息进来后:

  1. 先构造 System Prompt(后面重点讲)
  2. 把用户消息放进 User Prompt
  3. 进入 ReAct 循环

ReAct 循环本质上是个死循环:

调模型 → 模型输出想法和要用的工具 → 执行工具 → 把结果塞回上下文 → 再调模型 → 循环往复,直到任务完成。

比如你说「帮我生成股票早报」,它会这样跑:

  • 第 1 轮:「我需要获取股票行情」→ 调用行情 API → 拿到数据
  • 第 2 轮:「行情数据有了,我需要整理成报告格式」→ 调用文件写入工具 → 生成报告
  • 第 3 轮:「报告写完了,任务完成」→ 跳出循环

架构就这些。说白了不难。但 OpenClaw 真正牛的地方,在于它在这个架构上做的几个技术设计。


技术亮点一:动态 System Prompt 加载

这是 OpenClaw 最基础也最聪明的设计。

在每次调模型之前,OpenClaw 会先拼装 System Prompt。除了基础的 ReAct 指令,它还会动态加载工作区里的一组 Markdown 文件。这些文件才是你的龙虾和别人龙虾不一样的原因。

文件
作用
举例
soul.md
龙虾的「灵魂」,影响决策和性格
用渣女语录说话、理想型性格
identity.md
表面身份信息,名字和风格
「我叫小虾,语气轻松幽默」
user.md
主人的信息
职业、喜好、习惯
agent.md
能力和知识强化
搜索用什么工具、做某事的 SOP
tools.md
可用工具清单和调用规则
哪些 Skill 可用、什么时候用

Peter 开源 OpenClaw 的时候,唯一没开源的就是他自己那只龙虾的 soul.md。到现在没人知道他写了什么。

但社区里已经有大量分享了——有人让龙虾说话像霸道总裁,有人让它像日本管家一样恭敬。

这些文件不是固定的。你跟龙虾聊天的过程中,它会自己决定更新这些文件。比如某天你聊到自己喜欢吃火锅,它觉得「这个偏好应该记在 user.md 里」,就自己记进去了。下次你问它「今晚吃什么」,它就会考虑到你爱吃火锅。

但这也带来一个问题:这些 MD 文件会越来越大。System Prompt 光基础部分就要 1.5 万 Token。加上 Memory、Skill 描述,用久了能飙到 3 万甚至 5 万 Token。

所以 OpenClaw 必须用强模型。那些小模型,上下文超过几万 Token 就开始犯迷糊。这也是为什么有人说本地跑 OpenClaw 纯属浪费——小模型连 ReAct 都干不好。


技术亮点二:上下文的剪裁和压缩

OpenClaw 是单 Agent 架构。不是那种多个 Agent 分工合作的设计,而是一个 Agent 从头干到尾。

单 Agent 的好处是简单。坏处是上下文会爆。

每一轮 ReAct 循环,模型的想法、工具调用的入参、工具返回的结果,全部追加到上下文里。

System Prompt 已经 5 万 Token 了,再加上工具结果——读一个文件就是整个文件内容,搜一次网就是 20 条结果——上下文很快就满了。

OpenClaw 的解决方案分两步:

剪裁

最占空间的是工具结果。OpenClaw 的做法很直接:自动把 N 轮前的工具结果全部隐掉,只保留模型当时的思考和工具入参。

比如 10 轮前模型读了一个文件,那个文件内容可能有 5000 Token。剪裁后,上下文里只保留「模型决定读 xxx 文件」和「模型基于文件内容得出了 xxx 结论」,原始文件内容就不占空间了。

压缩

剪裁不够用的时候,还有压缩。

整个流程是这样的:

  1. 框架监控上下文 Token 数,比如设定阈值 80K
  2. 快到 80K 了,触发压缩
  3. 先把当前所有原始信息写进 Memory 的日志文件(完整保留,不丢数据)
  4. 再用模型对历史上下文做一次摘要,只保留关键信息
  5. 压缩后的 Message List 变得很精炼,但详细信息在日志文件里,需要时用 Memory 工具去查

这套机制保证了两件事:任务不会因为上下文溢出而中断;历史信息也不会真的丢掉。


技术亮点三:双层长记忆系统

龙虾经常干一件让人觉得暖心的事——突然想起你很久以前聊过的一件小事。

这不是巧合,是系统设计。

第一层:memory.md

模型在心跳触发时(后面会讲),会不定期检查聊天记录和运行日志,把最重要的记忆点写进 memory.md。比如你说过「下周三有个重要面试」,它会记下来。

下次拼 System Prompt 时,memory.md 作为长期记忆被加载进上下文,模型就知道这些信息了。

第二层:Memory Search 工具

memory.md 只记核心信息,细节在哪呢?在之前上下文压缩时写入的那些日志文件里。

OpenClaw 为这些日志做了向量索引。底层没用什么专业向量数据库,就是 SQLite 自带的轻量级向量存储。

搜索时用的是混合检索:

  • 向量搜索:按语义相似度召回一批结果(权重 70%)
  • 关键词搜索:按精确匹配召回另一批(权重 30%)

两者加权合并、重排序,再结合时间衰减策略,返回最相关的 Top K 内容。

这套设计不算复杂,但效果确实好。龙虾能在几百轮对话的历史里精准找到你提过的事情。


后台任务:CronTab + Heartbeat 双调度

OpenClaw 最让人惊喜的体验是主动性——你没找它,它主动找你。

这背后靠的是两套调度机制。

CronTab

OpenClaw 维护一个 cron.json 文件,支持三种定时任务:

  • 精确时间:「今晚 8 点提醒我参加直播」
  • 间隔时间:「每隔 20 分钟提醒我一次」
  • Cron 表达式:「工作日每天早上 8 点给我行情报告」

任务执行完后,结果通过指定的 Channel 推送给你。比如你在 QQ 上创建了任务,结果就发回你的 QQ。

Heartbeat

每 30 分钟无脑唤醒一次。

唤醒后干什么?检查心跳清单。

这个清单是日常聊天中积累的。当 OpenClaw 觉得某个事情是长期任务,就会自己塞进心跳清单。比如知道你朋友下周生日,它就会把「到时发祝福」记进去。

每次心跳唤醒时,它根据当前日期判断清单里有没有该做的事。有就主动做,没有就安静返回。

这两套机制一起,让 OpenClaw 从「你叫它才来」变成了「它主动找你」。

以前的 AI 助手都是一次性的。你问完它就消失了。OpenClaw 的双调度把短任务变成了长期任务,这才是它最让人上瘾的地方。


Skill 渐进式披露:150 个技能不炸上下文

OpenClaw 能装大量 Skill——有人装了 150 个。

但问题来了:150 个 Skill 的详细说明全塞进 System Prompt,Token 数不是 5 万,是 50 万都打不住。

OpenClaw 的解决方案叫渐进式披露。原理很简单:

  1. System Prompt 只加载每个 Skill 的名字和一句话描述(每个不超过 100 Token)
  2. 当模型决定要用某个 Skill 时,调用「加载 Skill」工具
  3. 这个工具读取对应的 skill.md 文件,把完整说明加到上下文里
  4. 模型根据说明执行具体操作

用到才加载,不用不占空间。

更有意思的是,OpenClaw 还支持一键安装 Skill。你直接说「我想要一个管理 Notebook 的能力」,它自己去 Skill Hub 搜索、下载、安装。从此你的龙虾就多了一个技能。

它甚至能自己写 Skill。比如你说「我需要一个百度搜索工具」,它自己写脚本、放进 Skill 目录。这就是为什么有人说 OpenClaw 能「自主进化」。


想自己搭一个?9 步蓝图

看完上面的拆解,你会发现 OpenClaw 的每个模块都不难。难的是把它们攒在一起,并且打磨好细节。

如果你想自己复刻,路线图是这样的:

  1. 搞定 Agent 核心:选好模型,跑通 ReAct 循环。可以自己写,也可以用 LangChain 之类的框架
  2. 装好基础工具:Shell 命令、文件读写、无头浏览器(Playwright)、代码解释器。缺一个都不行
  3. 做 System Prompt 动态构建:用 Markdown 文件管理,让模型自动加载
  4. 加 Hook 系统:在 System Prompt 构建前后、模型调用前后、工具调用前后插钩子,方便调试和安全管控
  5. 搞会话管理:Session 何时新建、何时复用、何时重试、存在哪里
  6. 做上下文工程:溢出检测、摘要生成、裁剪压缩,想更强就加长记忆
  7. 接入 IM 平台:国内推荐 QQ(飞书需要企业环境,钉钉配置麻烦)
  8. 加后台任务:CronTab + 心跳机制
  9. 做 Skill 加载:实现渐进式披露

这一套理解了原理,花一两周时间,加上 Vibe Coding,搭出来不是问题。

春节期间已经有七八个各种 Claw 冒出来了——Python 版、Go 版、Rust 版都有。核心就是这套东西。


OpenClaw 技术上没什么黑魔法。

IM 做入口,ReAct 做决策,动态 Prompt 做个性化,双调度做主动性,渐进式披露管 Skill 扩展。每一个模块单拎出来都不新鲜。但攒在一起,就变成了一个让人忍不住分享的产品。

2026 年做 AI 产品,技术不是瓶颈。怎么把技术变成人愿意用、愿意传的东西,这才是真正的门槛。

OpenClaw 给了一个样板。而且是开源的、可以复刻的。

剩下的,就看你愿不愿意动手了。

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 翻完 OpenClaw 源码,我发现它火得一点都不冤

评论 抢沙发

4 + 2 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮