乐于分享
好东西不私藏

OpenClaw 教会我的三件事:记忆、上下文与主动性

OpenClaw 教会我的三件事:记忆、上下文与主动性

最近我花了不少时间研究 OpenClaw 的源码,想搞清楚一个问题:

为什么它能做到让 AI 记住这么多事,还能保持响应流畅,甚至能主动联系用户?

答案就藏在三个核心模块里:记忆管理、上下文管理主动性设计

今天把我的学习笔记整理出来,分享给正在做 AI 产品的朋友们。

一、记忆模块:不只是存数据,而是会思考的存储

OpenClaw 最让我意外的是它的记忆存储方式,就是一个普通的 Markdown 文件

没有复杂的数据库,没有向量数据库的运维负担。每个 md 文件就是一条记忆,内容就是普通的自然语言文本。

这个设计太聪明了,因为它人类就可以直接读取、检查、编辑,并且 Git 还可以追踪,这就让所有记忆的变更历史变得一目了然,当出问题的时候,直接看文件就行了。

但文件只是皮,真正的核心是怎么找到有用的记忆

OpenClaw 的记忆检索用了混合搜索 + MMR 重排的组合拳。

混合搜索向量搜索(语义相似)+ BM25(关键词精确匹配),权重默认 0.7:0.3。这意味着既理解你的意图,又能精准匹配专有名词、代码标识符。

MMR 重排找到相关记忆后,还会再做一轮去重。用 Jaccard 相似度过滤掉内容太相似的记忆,确保返回的结果多样化,这样就能确保不会十条记忆都在说同一件事。。。

时间衰减:就是让记忆也会生老病死,哈哈。记忆不是越久越好,过时的信息可能反而会干扰到判断。

所以,OpenClaw 引入了时间衰减机制,最近创建的记忆得分更高,老记忆会逐渐淡忘。

但还有个特殊的设计,Evergreen 记忆不受衰减影响。比如,用户的长期偏好、核心项目信息,可以标记为常青,永远保持高权重。

记忆刷新:这是我最喜欢的设计之一。

当对话上下文接近压缩阈值时,系统会静默触发记忆刷新:把当前会话的重要信息提取出来,写入记忆文件,但不打断对话流程

用户完全感知不到这个过程,只觉得这个 AI 真的记得我说过的话。

那你可能会想,如果嵌入服务全部不可用怎么办?这点 OpenClaw 也想到了,它会自动降级为纯 BM25 关键词搜索

这不是报错退出,而是尽力而为。这种优雅降级的思维,也是成熟产品的标志。

二、上下文管理:AI 产品的隐形战场

上下文管理不好,用户体验就会直接崩了,要么失忆,要么报上下文太长,响应越来越慢。

OpenClaw 的上下文管理用了多层防护架构,每一层都是一道保险。

第一层,是上下文窗口守护。

实时监控上下文使用情况:

  • 接近阈值时发出软警告
  • 超过阈值时发出硬警告
  • 开发者可以据此调整策略

这是预防层面的设计,在问题发生前就感知到风险。

第二层,是自动 Compaction。当上下文接近压缩阈值(比如 128K 窗口,阈值约 104K tokens),系统就会自动触发上下文压缩

  • 把历史对话分块
  • 用 LLM 生成结构化摘要(必须包含 5 个章节)
  • 检查摘要质量,不合格就重试
  • 用摘要替换历史消息

还有一个关键细节,那就是摘要会精确的保留标识符,像UUID、文件路径、URL 这些关键信息不会被去掉,而是完整的保留下来。

第三层:Overflow Compaction(溢出恢复)。这是兜底层面的设计:万一压缩后还是超了怎么办?

OpenClaw 的处理非常精细:

  • 精确计算溢出量:从 API 的错误信息里用正则提取具体超了多少 tokens
  • 智能判断处理策略:
    • 如果本次请求已经触发过 SDK 自动压缩但仍溢出 → 直接重试
    • 如果压缩失败(错误信息含 compaction failed 等)→ 放弃,不无限循环
    • 如果是首次溢出 → 执行压缩,传入精确的溢出量帮助决策
  • 智能截断 Tool Result:如果工具返回内容太长,自动识别尾部是否有错误/结果/JSON结构,优先保留头+尾
  • 重试限制:最多 3 次压缩尝试,避免无限循环

还有一个细节,那就是,每条消息的 token 数不是实时计算的,而是在首次计算后缓存。后续更新时累加或累减。这种方式既保证了精确性,又避免了重复计算的开销。

三、主动性设计:让 AI 不只是被动等待

这是让我最惊喜的部分。

很多 AI 产品只会在用户主动发起时才响应,但 OpenClaw 能主动联系用户。关键在于:它做到了主动但不打扰。

Heartbeat:周期性感知,而非定时打扰

OpenClaw 有一个心跳机制,每隔一段时间(默认 30 分钟)会自动运行一次。但它的设计非常聪明,如果检查完发现没有需要关注的事项,模型会回复一个特殊标记 HEARTBEAT_OK,系统会直接丢弃这条消息,不打扰用户。

同时,用户还可以定义一个 Markdown 文件,列出每次心跳要检查什么。一次心跳可以批量处理多项检查,而不是让用户设置 5 个独立的定时任务。

上下文感知决策心跳运行在主会话中,拥有完整的对话历史。这意味着模型可以智能判断哪些紧急、哪些可以等待,这才是真正的智能啊。

Cron Jobs:精确定时与隔离执行

有些任务需要精确的时间点,比如,每天早上 7 点发送简报。这时候就需要 Cron Jobs了。

OpenClaw 的 Cron 设计有两个亮点:

两种会话模式

  • main 模式:在主会话中运行,保留完整上下文,适合需要与用户对话相关的提醒。
  • isolated 模式:在独立会话中运行,全新上下文,适合独立任务、不同模型、避免历史污染。

自动故障处理如果一个任务连续 3 次调度失败,会自动禁用,但会通知用户,避免静默禁用让用户困惑。

Followup Queue:用户可能发起一个耗时的后台任务,然后去做别的事。任务完成后怎么通知用户?

OpenClaw 用 Followup Queue 保存了任务的回信地址:

  • 跨渠道路由:用户从 WhatsApp 发起任务,结果可以发送到 Telegram
  • 线程感知:消息会回到正确的对话线程
  • 智能去重:同一条消息不会重复触发

研究完这些机制,我总结出几个设计原则:

1、主动性不等于打扰:通过 HEARTBEAT_OK 让模型自己判断是否需要联系用户
2、批量处理优于分散触发:一次心跳处理多项检查,节省成本还能综合判断
3、隔离与连续性的平衡:根据任务特性选择会话模式
4、故障处理要用户友好:自动处理但通知用户,提供恢复路径

研究完这三个模块,我最大的感受是:OpenClaw 的成功不是靠某个单一技术,而是靠一系列刚刚好的决策。

决策一:简单优于强大。记忆存储选文件而非数据库,表面上看是不够强大,实际上换来了零运维成本、极高的可靠性,还有可调试性。

在 AI 产品里,可靠性往往比功能强大更重要

决策二:多层防护优于单点完美。上下文管理没有追求一次压缩到位,而是设计了多层防护:预警层(守护)、预防层(自动压缩)、兜底层(溢出恢复)。每一层都可能不完美,但组合起来就形成了高可用的系统。

决策三:用户无感知优于显式交互。记忆刷新、上下文压缩、心跳检查都是静默进行的。用户不需要理解这些概念,只需要感受到这个 AI 真的懂我、这个 AI 会主动帮我 就够了。

好的产品设计,是让复杂的技术在背后默默工作,而用户只要享受结果就行了。

决策四:优雅降级优于失败报错。嵌入服务不可用的时候,降级为关键词搜索。压缩失败了,就尝试更大的压缩比。工具返回太长,就直接截断保留关键部分。每一处都有 Plan B,这种工程思维才是 AI 产品走向成熟的必修课。

决策五:智能判断优于机械触发。心跳不是简单的定时发消息,而是让模型自己判断要不要打扰用户。这才是真正的智能。

研究 OpenClaw 的源码让我意识到,AI 产品的竞争力,往往藏在这些看不见的地方。

因为,用户不会说“你的记忆检索用了混合搜索,真棒啊”,他们只会觉得这个 AI 真的懂我,而且不管和它聊多长多久,也从来都不会报错,还会主动跑来帮自己解决问题。

正是这些沉默的体验,才是 AI 产品的护城河。

如果你觉得有帮助,欢迎点赞分享,并关注我的后续AI应用探索,我们一起学习探讨。

感谢阅读!如果这篇文章让你也有所启发,不妨点个 「赞」 和 「在看」 或 「转发」。

如果想第一时间收到推送,也可以给我个关注~谢谢你的支持和鼓励