|
2026年初,开源圈发生了一件魔幻现实主义事件:一个用TypeScript写的"微信机器人",在GitHub上的星标数竟把Linux内核项目甩在了身后。没错,就是那个统治服务器三十年的Linux。
这个项目的吉祥物是一只名叫Molty的龙虾,社区暗号是"去角质(EXFOLIATE!)",听起来像个朋克乐队的名字——OpenClaw(前身为ClawdBot/Moltbot)。它不像ChatGPT那样给你当聊天搭子,而是直接接管你的电脑,像一个有手的实习生帮你干活。
当你在微信里发一句"把桌面上的报销单整理成Excel",它真会打开你的文件夹、识别图片、填表、发邮件。这种从"动嘴"到"动手"的跨越,让开发者们疯狂打星,直接把Mac Mini买断货。
但OpenClaw的恐怖之处不在功能,而在架构设计。今天咱们就扒开它的源码,看看这只"小龙虾"是怎么让AI从"顾问"变成"员工"的。
架构解剖:四个盒子搭起的智能大厦
OpenClaw的代码仓库里没什么黑魔法,核心就四个模块:Gateway(网关)、Agent(智能体)、Skills(技能)、Memory(记忆)。这四个盒子像乐高积木一样咬合,构成了一个能自主运行的数字生命体。
Gateway:快递分拣中心的大脑
想象你同时有微信、钉钉、Telegram三个工作群,OpenClaw怎么知道消息该发给谁?答案在Gateway。
Gateway是一个基于Node.js 22+的WebSocket服务器,跑在你本地的127.0.0.1上。它像极了一个快递分拣中心:所有包裹(消息)进来后,检查收件人、分配到正确的Agent、再把回复发出去。
// 简化的Gateway核心逻辑(基于真实源码结构)
class GatewayServer {
private agents: Map<string, Agent> = new Map();
async handleMessage(incoming: Message) {
// 1. 格式校验(严格类型检查)
if (!this.validateSchema(incoming)) {
throw new Error("消息格式非法:缺少idempotencyKey");
}
// 2. 路由分发
const agent = this.agents.get(incoming.targetAgent);
if (!agent) {
throw new Error(`Agent ${incoming.targetAgent} 未启动`);
}
// 3. 幂等性控制(防止重复执行)
if (this.processedKeys.has(incoming.idempotencyKey)) {
return { status: 'duplicate', message: '已处理' };
}
// 4. 触发Agent执行
return await agent.execute(incoming);
}
}
注意那个idempotencyKey(幂等键),这是防止AI手滑重复转账的关键设计。所有可能产生副作用的操作(比如发邮件、删文件)都必须带上这个"防重令牌"。
Agent:从"问答机"到"执行流"
传统AI对话是"你问我答"的函数调用:f(提问) = 回答。OpenClaw的Agent打破了这种模式,它是一个ReAct架构(Reasoning + Acting)的循环体。
当Agent收到"帮我订明天去上海的机票",它不会直接回答,而是进入这样的思维循环:
思考:用户要订机票 → 行动:调用browser_skill打开携程 →
观察:页面显示搜索框 → 思考:需要输入出发地 →
行动:fill_input("上海") → ... → 终止:任务完成
这种"想-做-看-再想"的循环,让AI能处理多步骤复杂任务。源码里对应着AgentLoop类,维护一个状态机,直到任务完成或达到最大迭代次数。
Skills:AI的"手"和"脚"
Agent光有脑子不行,得能干实事。OpenClaw把具体能力封装成Skills,本质上是一组带描述的TypeScript函数,供大模型调用。
看个真实的Skill示例(浏览器自动化):
// skills/browser.ts - 基于Playwright的浏览器操控
export const browserSkill = {
name: 'browser_automation',
description: '控制浏览器访问网页、点击元素、填写表单',
async execute(params: { url: string; actions: Action[] }) {
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
await page.goto(params.url);
for (const action of params.actions) {
if (action.type === 'click') {
await page.click(action.selector);
} else if (action.type === 'input') {
await page.fill(action.selector, action.value);
}
// 截图给AI看执行结果
const screenshot = await page.screenshot();
return { screenshot, status: 'success' };
}
}
};
媒体吹嘘的"神奇浏览器操控",其实底层是微软的Playwright库。OpenClaw只是在大模型和Playwright之间当"传声筒":模型说"点那个红色按钮",OpenClaw翻译成page.click('#submit-btn'),再把截图喂给模型看效果。
Memory:AI的"日记本"和"肌肉记忆"
没有记忆的AI只是瞬间的函数映射,关掉窗口就失忆。OpenClaw的记忆系统分三层:
1. 工作记忆(Context):当前对话的短期记忆,塞在LLM的上下文窗口里
2. 长期记忆(Memory):跨会话的持久化存储,本质是本地Markdown文件+向量检索
3. 技能记忆(Skill Memory):AI自己学会的"肌肉记忆",存为SKILL.md文件
最妙的是上下文压缩机制。当对话太长超过模型限制时,OpenClaw不会粗暴截断,而是调用LLM生成摘要:"前文总结:用户正在开发电商网站,已完成了支付模块,现在讨论购物车逻辑"。这样既省Token,又不丢关键信息。
源码级拆解:1000行代码复刻核心
OpenClaw完整代码约50万行,但核心架构可以压缩到1000行理解。它的精髓在于事件驱动+状态持久化。
心跳机制:让AI学会"主动"
传统AI被动得像个树懒,你戳一下它动一下。OpenClaw有个Heartbeat(心跳)模块,定时检查待办事项:
// 主动唤醒机制简化版
class HeartbeatService {
async tick() {
const pendingTasks = await this.memory.getPendingTasks();
for (const task of pendingTasks) {
// 时间到了,主动触发Agent
if (task.scheduledTime <= Date.now()) {
await this.gateway.dispatch({
agentId: task.ownerAgent,
message: `⏰ 定时任务触发:${task.description}`,
type: 'system_wakeup'
});
}
}
}
}
// 每5分钟跳一次
setInterval(() => heartbeat.tick(), 5 * 60 * 1000);
这就好比给AI设了个闹钟。你昨天说"明天早上9点提醒我发周报",到了时间Agent自己会醒过来执行,不需要你一直开着聊天窗口。
记忆系统的文件实现
别被"记忆系统"吓到,OpenClaw的实现很朴素:就是把对话存成Markdown文件,用grep搜索。
// memory/file_storage.ts
class FileMemory {
private memoryDir: string;
async save(sessionId: string, messages: Message[]) {
const content = messages.map(m =>
`## ${m.role} - ${m.timestamp}
${m.content}
`).join('\n');
await fs.writeFile(
`${this.memoryDir}/${sessionId}.md`,
content
);
}
async search(keyword: string): Promise<string[]> {
// 用grep搜历史记录,简单暴力但有效
const { stdout } = await execAsync(
`grep -r "${keyword}" ${this.memoryDir} --include="*.md" -A 2 -B 2`
);
return stdout.split('\n');
}
}
这种"土法炼钢"恰恰体现了工程智慧:没必要上来就上向量数据库,对于个人用户的本地数据,文件系统+全文检索够用且零依赖。
为什么火:它解决了AI落地的"最后一公里"
2025年大模型能力已经很强,但大多数人还在浏览器里打字聊天。问题出在接口层:模型再聪明,如果只能在对话框里回答问题,那永远只是个"顾问"而非"助手"。
OpenClaw的破局点在于OS级权限的开放。它给AI接上了操作系统的方向盘:
• 文件系统:读写本地文件,自动整理文件夹
• 浏览器:基于Playwright的自动化,能订机票、查物流
• Shell:执行终端命令,甚至帮你部署代码
• 消息网关:打通微信、钉钉、Telegram,随时待命
这就像从"功能机"到"智能机"的跨越——以前AI只能"说",现在能"做"。而且它是本地优先的设计,数据存在自己硬盘,不用把隐私喂给云厂商。
理性看待:这只龙虾不是万能的
扒完代码得说点实话。OpenClaw被部分自媒体吹成了"贾维斯",但实际能力边界很清晰:
它不会的:
• 不能突破网站的人机验证(面对复杂反爬会抓瞎)
• 不能替代你做出复杂业务决策(还是得你拍板)
• 不是本地大模型(推理多数还是调Claude/OpenAI的API,本地只是个"网关")
它适合的:
• 定时自动化任务(日报生成、数据备份)
• 跨平台消息聚合(一个Agent管多个工作群)
• 本地文件预处理(整理发票、重命名图片、格式转换)
部署门槛也不低,需要Node.js 22+环境、配置Webhook回调、处理端口映射。这也是为什么海外会出现"代装OpenClaw收费3000美元"的奇葩生意。
结语:从胶水代码到生态平台
有人说OpenClaw只是Playwright+LLM API的"胶水代码",这话对了一半。Linux本质上也是GNU工具的胶水,iPhone是芯片和触摸屏的胶水。
工程创新的价值往往不在于发明新技术,而在于把现有技术以正确的方式粘合,解决真实痛点。
OpenClaw代表了一个趋势:AI正在从SaaS(软件即服务)走向Agent as Infrastructure(智能体即基础设施)。它不再是一个网站,而是一个跑在你设备上的常驻进程,像操作系统的一部分。
当这只小龙虾在你电脑里安家,每天自动处理繁琐事务时,你会理解为什么开发者们愿意给它打星——我们等的不是更聪明的AI,而是更能干的AI。
延伸阅读:
如果你想动手部署,OpenClaw的GitHub仓库(github.com/openclaw/openclaw)提供了Docker一键部署方案。建议在备用机上先试跑,毕竟给AI开放文件权限这事,就像把家门钥匙交给实习生——方便是真方便,但别一上来就让它管你的工资卡。
|