乐于分享
好东西不私藏

我花费了几个星期研究OpenClaw源码(一)

我花费了几个星期研究OpenClaw源码(一)

前段时间,养虾非常火热,安装OpenClaw得几百一次,基本上身边每个人都要讨论一下,好像不了解就要被时代淘汰一样 ,大家都非常焦虑,再后来又好多人吐槽,好像功能华而不实,并不能真正解放他的生产力 ,甚至卸载都要花钱。

老实说,刚出来的东西肯定是不成熟的,部署门槛高、很难根据自己实际情况落地,api成本也不低 ;当市场热度超过技术成熟度时,自然很多人都在卸载。但是这个工具本身是有很多需要我们学习的地方。

虽然热度降了,但是学习这到底是啥玩意是非常有必要的 ,对你以后了解这些AI工具的发展走向很有帮助。于是我花了好几个星期拆解OpenClaw,阅读源码,让我彻底改变了对AI agents的理解,因为它比我想象的要简单很多。

这是小编vibe coding的很多好用的免费小工具,可以看看是否有需要的,包含图片相关处理,实用工具,GIF处理,后续会添加功能功能。

1. 幻觉工厂

OpenClaw的原理其实很简单,它使用的模式已经在软件开发中存在了几十年的:事件循环,定时任务,基于文件配置,工具调用 。你感觉到的“智能”大都是LLM做的事情,OpenClaw就是一个LLM的脚手架,这个脚手架设计的非常精妙,但是理解学习后,将会改变你使用的方式,包含配置、调试、甚至你会知道你该信任这个系统的哪块。

2. OpenClaw的三部分组成

2.1. 通道

OpenClaw其实并不知道啥是Telegram、WhatsApp,每个平台都只是一个适配器,用于转换特定平台事件的很薄的一层(一个Telegram消息,一个WhatsApp的语音信息),将这些转为标准化的内部格式 。当你用Telegram发送消息给你的agent时,OpenClaw其实不知道那是什么Telegram,它只能看到标准的结构化的数据 ,然后拿这些数据去做对应的反应。

所以比如你要接入你自己的聊天方式,你只需要做适配层即可,把你聊天的结果转成agent能理解的标准化的内容,agent不需要改任何东西。

2.2. 上下文窗口——OpenClaw带有的“记忆”

和所有基于LLM的系统一样,OpenClaw构建了一个上下文窗口并将其发送给模型,上下文包括:

  1. 1. 系统提示词(agent是谁,它能干啥);
  2. 2. 工具描述(可以调用哪些函数);
  3. 3. 历史对话(到目前为止来回的对话);
  4. 4. 注入从相关文件中检索的记忆片段 (当你的agent记得上个月相关的信息时,它并不是记得什么,而是从markdown文件检索一个片段,并把这个片段注入到当前上下文中,这不是神经意义上的持久的记忆,是选择文件检索。)

2.3. 工具

工具是LLM可以调用的函数:

send_message(channel, text)read_file(path)exec(command)memory_write(content)memory_search(query)cron_create(schedule, task)

当你的agent“看似主动”给你发送一个总结内容时,它并没有自主决策能力,而是LLM通过模式匹配进而输出工具调用指令,然后OpenClaw拦截该调用、执行对应函数,再将运行结果回填到上下文,整套流程就是这样无限循环、机械重复。

3. 记忆系统:就是基于MakDown

让我们感觉OpenClaw好像活着的,就是他的记忆系统,让我详细描述一下这块,因为这块是我最大的“顿悟”时刻。

3.1. 三层存储

3.1.1. 每日日志

代理每天都会写下一个日志文件,如下:

# 2026-04-25- Discussed new features for trading dashboardSet reminder for Friday deploy window- User mentioned they're in Wiesbaden

3.1.2. 长期记忆

MEMORY.md是一个代理写下它觉得重要信息的markdown文件,如用户偏好、项目内容、重复出现的模式。

3.1.3. 完整的会话历史

每次对话都会存储在JSON中,agent可以查询所有历史。

3.2. QMD(Query Memory Database查询内存数据库)

OpenClaw包含一个名为QMD的实验性工具,这是一个语义搜索层,可以查询所有Markdown,包含向量嵌入和关键词的组合搜索。

当你说“还记得关于我之前说的认证流程嘛”,QMD不会只查找那几个精确的词,还会去找语义相似的其他词汇,这也是为啥我们有时候会觉得OpenClaw回答的异常准确。

QMD可以作为独立CLI工具使用,也可以作为一个MCP服务器。

4. 主动行为:它如何在未被请求的情况下行动

这是OpenClaw最独特的特点——也是大多数人并不完全理解的。

4.1. 心跳

每30分钟,OpenClaw会读取一个名为 HEARTBEAT.md 的文件,并将其内容发送给大型语言模型进行评估:

# HEARTBEAT.md- Check for new GitHub PRs needing review- Scan content backlog for anything overdue- Monitor RSS for relevant tech news

如果没有需要采取的行动,agent会响应HEARTAEAT_OK并且会继续沉睡,如果有需要做的事,才会做。

30分钟的精准度确实是个限制——你不能在14分37秒时触发某项动作。但对于大多数“环境感知”任务来说,这已经绰绰有余了。

4.2. Cron

OpenClaw 会将 JSON 任务文件写入 chrome/目录:

{"schedule""0 9 * * MON-FRI","task""Fetch open PRs from GitHub, summarize, send to Telegram"}

当计划触发时,它会加载任务上下文,发送给LLM,执行工具调用,然后发送结果给你。

内容太长了,先写到这里。明天继续!