OpenClaw Memory系统详解!告别“金鱼脑”,让AI真正记住你!

用AI助手,却总要反复重新介绍自己?你是否也遇到过这样的情况:每次打开对话,都要先跟AI说明自己的身份、正在做的项目、还有各种使用偏好;对话稍长,AI就开始遗忘前文,昨天刚帮你梳理的好方案,今天再聊,又要重新解释一遍背景和需求。

这从来不是AI不够聪明,而是大模型的结构性限制——它的“记忆”,只存活在当前的对话窗口里。窗口关闭,所有记忆便一键归零。

而OpenClaw的Memory系统,正是为破解这一痛点而生。更关键的是,它的解法,出人意料地简单。

原理只有一句话:用文件代替记忆

OpenClaw 的 Memory 不依赖任何数据库魔法,核心思路极其朴素:

把 AI 应该记住的事情,写进 Markdown 文件。下次对话时,把这些文件读进来。

就这样。

具体来说,有两种文件类型:

每日日志memory/2026-03-13.md ,记录当天发生的事、做了哪些决定、有哪些上下文。每次会话开始时,系统自动读入今天和昨天的日志。

长期记忆MEMORY.md ,精选的持久性信息——你的偏好、项目状态、重要决策、不变的背景知识。这个文件会一直陪着 AI。

这两个文件就是 AI 的"大脑外挂"。所有需要跨对话持久化的东西,最终都落在这里。


它是怎么"找"到相关记忆的?

有人会问:如果记录了几个月的日志,文件越来越多,AI 每次都要全部读进来吗?

不用。OpenClaw 内置了两个工具:

memory_search ——语义搜索。你问"我上次配路由器是怎么设置的",它不是靠关键词匹配,而是理解问题的意思,从所有日志里找出最相关的片段。

memory_get ——精准读取。当你知道要找哪个文件的哪几行,直接拿,不绕弯子。

更有意思的是搜索的工作方式。OpenClaw 把 Markdown 文件切成约 400 个 token 的小块,为每块生成向量嵌入,存进 SQLite。搜索时同时跑两条路:

  1. 向量搜索 :找语义上相似的内容,哪怕你用了完全不同的词

  2. BM25 关键词搜索 :找精确匹配,适合 ID、变量名、错误信息这类高精度词

两者的得分按权重合并(默认向量权重 0.7,关键词权重 0.3),最后输出综合排名的结果。这叫混合搜索,是当前工程上效果最稳定的方案。


两个容易被忽视的细节

旧记忆会自动"退场"

一个月前你记录了一条信息,今天搜索时它的相关性可能不如上周的记录。OpenClaw 支持时间衰减 (Temporal Decay):

ounter(line
得分 = 原始分 × e^(-λ × 距今天数)

默认半衰期 30 天——30 天前的记录权重只剩原来的一半,90 天前的只剩 12.5%。越新的记忆越有优先级。

但有一个例外:MEMORY.md 和那些没有日期的长期文件(比如 memory/projects.md永远不衰减 。它们是常青树,始终以全权重参与搜索。

这个设计很合理。昨天的会议纪要有时效性,但你的工作偏好、项目背景是长期有效的。两类信息用不同规则处理。

重复结果会被主动去掉

如果你记录了 10 天关于同一个话题的日志,搜索时可能拿到 10 条几乎一样的片段。OpenClaw 用 MMR(最大边际相关性) 算法处理这个问题:

每次选结果时,既考虑它跟问题的相关性,也惩罚它跟已选结果的相似度。结果是——你拿到的是多角度、不重复的信息,而不是一堆克隆。


"记住"这件事,需要主动触发

这里有一个关键认知:AI 不会自动记住你说的话,需要明确写入文件。

有三种写入时机:

你主动说 :告诉 AI “把这个记下来”,它会把内容写进 MEMORY.md 或当天的日志。

快要到上下文窗口上限时 :OpenClaw 会在会话接近压缩点之前,静默触发一次记忆刷新——提醒 AI 把这次对话里的重要内容写进文件,再压缩上下文。这个过程用户不可见,但确保关键信息不因压缩而丢失。

HEARTBEAT 检查时 :如果你配置了定期运行的 Agent,它每次运行后会把完成情况写进日志,保持跨轮次的状态同步。

写文件的原则很简单:

  • 决策和偏好 → MEMORY.md

  • 当天发生的事 → memory/YYYY-MM-DD.md

  • 只要说了"记住这个",就会落盘


搜索不够用?还有 QMD 方案

对于记录量非常大的用户,OpenClaw 还提供了一个进阶方案:QMD backend (实验性)。

QMD 是一个本地优先的搜索工具,结合了 BM25 + 向量 + 重排序,搜索质量比默认方案更高。整个索引和搜索都在本地运行,不依赖任何云服务。

配置也不复杂:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line

memory: {

  backend: "qmd",

  qmd: {

    includeDefaultMemory: true,

    update: { interval: "5m" },

    limits: { maxResults: 6 }

  }

}

装好 QMD CLI,配上这几行,就切换到新引擎了。如果 QMD 出问题,OpenClaw 会自动降级回默认方案,不影响使用。


记忆的边界在哪里?

有几个问题值得说清楚。

跨 Agent 不共享记忆。 每个 Agent 有独立的索引,你的 Content Agent 的记忆,Dev Agent 看不到。要共享,得手动把文件复制过去,或者在配置里加 extraPaths 指向同一个目录。

记忆文件是明文。 本质上就是 Markdown 文件,谁有文件系统访问权限谁就能读。不要把密码、密钥这类敏感信息写进记忆文件。

只索引 Markdown。 Memory 系统不会帮你检索代码文件、PDF、图片,只有 .md 文件。如果你有其他格式的参考文档,可以把关键内容摘出来写进 Markdown。


一个实际配置例子

如果你想开启完整的记忆功能,这是一个合理的起点:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line

agents: {

  defaults: {

    memorySearch: {

      provider: "openai",

      query: {

        hybrid: {

          enabled: true,

          vectorWeight: 0.7,

          textWeight: 0.3,

          mmr: {

            enabled: true,

            lambda: 0.7

          },

          temporalDecay: {

            enabled: true,

            halfLifeDays: 30

          }

        }

      }

    }

  }

}

开启混合搜索 + 去重 + 时间衰减,这三个功能组合在一起,搜索体验会好很多。

如果不想用 OpenAI 的嵌入 API,设置 provider: "local" 即可切换到本地模型,首次运行会自动下载约 600MB 的 GGUF 模型文件。


写在最后

Memory 是 AI Agent 能否真正"可用"的分水岭。

一个没有记忆的 AI,每次都是陌生人。一个有记忆的 AI,才能叫助手。

OpenClaw 的解法没有任何神秘感——就是 Markdown 文件加上语义搜索。但这种简单带来了一个重要的好处:你的记忆是你自己的 。文件存在本地,随时可以查看、编辑、备份,也可以迁移到任何地方。

几个核心要点:

  • 两层架构:每日日志(短期)+ MEMORY.md(长期),各司其职

  • 语义搜索 + 关键词搜索混合,不怕你换着花样问

  • 时间衰减让旧信息自然退场,最新的上下文始终优先

  • 写记忆需要主动触发,告诉 AI "记住这个"就会落盘

  • 文件是明文 Markdown,完全掌控在你手里

如果你在用 OpenClaw,但还没有认真配过 Memory,现在是时候了。两个文件加几行配置,AI 从此记得住你。

Memory系统终于讲清楚了

Memory系统还有很大提升空间

修bug的时候发现token浪费严重

嘻哈产品经理算了下成本确实可观