OpenClaw记忆系统全面解析,打造不会失忆的小龙虾

作者: admin 分类: 评论分析 发布时间: 2026-03-14 13:37

要把OpenClaw的记忆系统全部理解透彻,其实也不是一件一目了然,一看就懂的事情。

老马尽量浓缩提炼,用大白话给大家总结讲清楚。为什么小龙虾的记忆那么重要,因为很多时候AI智能体的记忆就像金鱼脑。

今天说的事,明天就忘,记不住你的用户偏好,忘记了之前常用的工具或者决策,经常重复询问你相同信息等等。

鉴于以上情况,对于任何一款AI Agent框架来说,我们都有必要去了解它的记忆系统是怎么工作的。

掌握了它的工作方式,才能更好地使用和组合它的记忆系统。让它发挥该有的作用,而不是一无所知,遇到问题了找不到原因。

所以老马大概把OpenClaw小龙虾的记忆系统分成了文本记忆和向量记忆两种。这里面有系统本身内置自带的,也有可以接入第三方插件,或者本地搭建的记忆存储方式。

废话不多说,我们直接进入介绍环节。还是那句老话,希望大家能仔细一点阅读文章,该说的细节点老马都会说到的。

文本记忆

文本记忆简单的说,就是把你跟小龙虾之间的对话记录存储下来,只不过是用文字的方式去记录。

在OpenClaw默认开启的文本记忆主要有以下5种:

1.Session会话记录(存储为Json/Jsonl文件)

2.每日日志记录(存储为Markdown文件)

3.长期记忆(存储为Markdown文件)

4.分类记忆(存储为Markdown文件)

5.索引层(存储为sqlite文件)

如果你不知道以上文件都在什么地方,请记住,以Windows系统为例,打开电脑C盘点击进入,找到用户或者Users文件夹,再确认你的电脑系统用户名,找到对应的用户名文件夹。

点击用户名文件夹进去,往下滑动寻找一个.openclaw的文件夹,进去后,以上提到的记忆文件都在这个目录下。

一般路径就是:C:\Users\你的用户名\.openclaw,但是每种记忆文件所在的位置又有所区别,等下具体讲到各个记忆文件的时候再单独说明位置。

(1)Session会话记录

Session会话记录详细记录你当前会话窗口的聊天内容,它的路径一般是:C:\Users\你的用户名\.openclaw\agents\main\sessions,如图:

会话窗口大家都应该懂的,就是你当前跟小龙虾聊天的窗口。无论你是在OpenClaw的网页控制台,亦或是接入了飞书、钉钉、QQ等机器人,再或者是使用终端tui的方式,这都是会话窗口。

一般情况下,当会话窗口上下文满的时候,OpenClaw会自动帮你压缩。而会话窗口也不是说只能开一个。

你可以开一个窗口操作编程任务,再开一个新窗口做数据分析任务,以此类推。每个会话窗口之间互不干涉,上下文互不干扰,等于多线程操作。

比如在当前的会话窗口,通过输入:/new 命令,即可新建一个新会话。开启了新会话之后,小龙虾就不记得旧会话聊了什么东西了。

同样的道理,你昨天的会话内容,将会在第二天的凌晨4点重置,保存成昨天的会话记录文件,即存储为Json/Jsonl文件。

如果你昨天的会话窗口,你跟小龙虾聊了5分钟,就放在那里了。那么默认2个小时后,这个会话窗口也会被重置,存储完文件,等于又新开了一个会话窗口。

这两点规则大家能明白了吧。因此,更别说你今天的会话内容了,它其实就是一个新的会话窗口。

有些小伙伴这时候就会懵逼了,说不对呀,我从始至终都是用一个窗口在跟小龙虾对话啊,没打开过新的会话窗口啊。

哪怕是在飞书机器人,或者QQ机器人上,也没有新窗口的说法呀,从头到尾都是一个窗口,一直在聊下去的。

这就是因为你所理解的窗口,是类似于物理的窗口,必须得新开一个全新的,干干净净没有任何聊天记录的对话窗口,才叫新窗口。

但其实不是这样的,一旦你没跟小龙虾对话超过2个小时,或者是到了凌晨4点,它都是会新建立一个新的会话窗口。

或者叫会话线程,前面的线程已经断了,重新开一个线程继续,大概就是这个意思。

而且新的会话窗口是不会去加载旧的会话窗口任何记录的,这就是为什么很多小伙伴昨天跟小龙虾聊完,发现今天再问小龙虾,它把昨天的事情都忘记了。

这就说明,会话记录它是一种短期记忆。之所以短期,不是因为这个记忆消失了,没有,还记得老马前面提到的吧,它会被保存成Json/Jsonl文件。

你只要打开这个路径:C:\Users\你的用户名\.openclaw\agents\main\sessions,就能够看到这些文件。

但是小龙虾就是忘记了,原因很简单。当新窗口打开时,小龙虾是不会去加载之前旧窗口的会话记录的,因为这样会导致上下文太长了,非常消耗token。

小龙虾只会加载一些长期记忆的文件,这点我们下面提到每日日志记录和长期记忆的时候会说到。

所以OpenClaw定义的长期记忆跟短期记忆,就是看在会话窗口中,会不会去经常加载读取。

如果不是经常加载读取的,像Session会话记录、每日日志记录,前者不会去加载读取,后者顶多加载读取个几天内的记录,再往前的历史记录就不加载读取了。

这从定义上来说,它们就都算是短期记忆。不像长期记忆的文档,也就是我们熟悉的MEMORY.md这个文档,是每次都会去加载读取的。

还有什么SOUL.md,AGENTS.md等基础设置类的文档,都是长期记忆,需要每次都加载读取,提醒小龙虾不能忘记基础设置的东西。

那有没有办法让小龙虾想起来旧会话窗口,或者昨天的会话记忆呢?答案就是得去查,比如使用自带的搜索工具或者命令。

更简单的方法是用语言提示词告诉小龙虾,去帮我查一下昨天的会话记录,我们聊到了什么东西,你完成了什么任务等等。

这样小龙虾就会自己去查,如果不查询,小龙虾默认就是忘记掉的。到这里大家就能够理解了吧,会话记录的特性就是这样。

还有一个重点,会话记录保存的是详细的聊天内容记录,不是摘要或者重点,这点跟每日日志、长期记忆、分类记忆都不一样。

(2)每日日志记录

每日日志记录就是说,你每天跟小龙虾的聊天内容记录,都会被总结一下,形成有重点的摘要,然后记录下来。

比如3月13日这一天,小龙虾干了1、2、3、4件事情,每件事情大概一两句话总结重点,最后保存成Markdown格式的文档,也就是.md格式结尾的文件。

每日日志记录文件的路径是:C:\Users\你的用户名\.openclaw\workspace\memory,如图:

每日日志的特点前面提到过了,再啰嗦一句,它在对话窗口中,只会被加载读取最近几天的记忆,再老的记录就不会被加载读取。

说到这里,有小伙伴就有疑问了。既然每日日志记录会被加载读取最近几天的记忆,那为什么我今天问小龙虾一些昨天对话的问题,它就忘记了呢?

这个问题问得很好,这得看你是问什么问题。因为每日日志记录只会记录昨天大概的重点,不会记录每一个细节。

记录每一个细节的Session会话记录是没有被加载读取,你昨天让小龙虾处理了2月份员工工资表,它的每日日志记录只会记住,我处理了100个员工的工资表,使用Excel的工具进行完成的。

就这么简单,就这么重点,就这么离谱。所有你今天去问小龙虾,张三2月份的工资是多少?

小龙虾来了句,不好意思,我的每日日志记录没那么详细,查不到那么具体工资数字,所以我不知道张三2月份的工资是多少。

我只知道昨天我处理了100个员工的工资表,是使用Excel的工具进行完成的,就只记得这件事情。

所以,你这就没辙了。除非,你在昨天让小龙虾处理完员工工资表的时候,额外发送一句话提醒小龙虾,给我记住张三2月份的工资数据。

那小龙虾就会把这句提醒,当成重要的内容记录下来。因此,大家也可以养成一个习惯,当天有什么重要的细节点是需要记录的,记得提醒小龙虾。

此外,每日日志记录还有一个特点,那就是有的时候它不会自动生成。默认是会生成的,偶尔会出现漏掉个别天数,没生成记录.md文件的情况。

如果遇到这种情况,你也需要提醒小龙虾,让它记住每日日志记录每天都要生成文件,最好是把这件事情写入到长期记忆MEMORY.md文件中。

要是这样还会出现漏记录的话,那只能算是OpenClaw的bug问题了。有Bug很正常,从开源到现在,OpenClaw一直在修复各种Bug。

(3)长期记忆

长期记忆就是精选的记忆了,一般会用来记录用户基本信息和偏好、重要技术决策和方案、项目状态和进展、关键经验教训等内容。

长期记忆的MEMORY.md文件的路径是:C:\Users\你的用户名\.openclaw\workspace,如图:

所以不要什么小事,鸡毛蒜皮的事情,都跟小龙虾讲,记录到长期记忆中。一些非常重要的,常用的,形成习惯的,固定的SOP流程的,才记录进去。

因为长期记忆MEMORY.md它是一直会被读取加载的,跟什么SOUL.md,AGENTS.md等文件一样。

如果你的MEMORY.md长时间被你啥都记录下来,变得跟懒婆娘的裹脚布一样,又长又臭。加载到上下文窗口中,这是很消耗token的。

精炼,精华,重点之中的重点,才是MEMORY.md应该记录的记忆。但跟Session会话记录和每日日志记录不一样的点是,它需要手工记录,人工维护。

比如我们刚安装部署了全新的OpenClaw,你会发现在路径中是没有自动生成MEMORY.md这个文件的。

这就要求你跟小龙虾对话的时候,让它手动创建这个文件。使用的时候,比如你觉得这件事情值得记录到长期记忆,你就跟小龙虾说记录到MEMORY.md文件。

还有就是,长期记忆MEMORY.md无论你开了多少个会话窗口,它都是会去加载读取的,都是生效的,不会因为是新窗口,它就失忆了。

(4)分类记忆

分类记忆一般记录的是技能文档、项目资料、专项知识等记忆,保存的也是Markdown文件,就有点类似于你的小型知识库。

想打造不是太复杂的个人知识库的小伙伴,就可以采用这种方式。自己去创建或者转换一些文件文档链接啥的,变成.md文件,放进去对应的目录就行。

当然,你也可以直接发给小龙虾,让它帮你转换成Markdown文件,并保存到记忆目录下。

分类记录的路径是:C:\Users\你的用户名\.openclaw\workspace\memory,如图:

如上图所示,openclaw-knowledge.md这个文件,就是老马把OpenClaw的官网链接发给了小龙虾,让它生成的知识文档。

因此有时候我们把链接或者文件发给小龙虾,让它学习一下,没有明确要求保存成Markdown文件保存到记忆目录下的时候,小龙虾也有概率自己会去保存。

在memory下存储的.md文件,会话的时候是会去加载读取的。但是memory下你还新建了子目录,那OpenClaw默认就不会去加载读取了。

这需要你让小龙虾重新定义设置才行,所以还是建议大家一般情况下分类记忆的.md文件,都放在memory目录下,不要再去创建子目录来存放。

(5)索引层

索引层,顾名思义,它就是起到导引,菜单的作用。如果说前面提到的.md文件都是图书馆里面的书,那索引层就是书单。

通过书单,你就可以快速找到自己想要的.md文件里面的记忆。无论是Session会话记录、每日日志记录,还是长期记忆MEMORY.md、分类记忆,都会被索引。

索引层主要是通过SQLite数据库来进行存储的,它的路径是:C:\Users\你的用户名\.openclaw\memory,里面有个main.sqlite文件就是,如图:

索引层的SQLite数据库表结构中,主要有元数据(meta)、文件列表(files)、文本块(chunks)、embedding_cache(嵌入缓存)。

索引层要能正常使用,则需要FTS5模块,当在Windows系统环境中,你启动网关之后,经常会在命令窗口看到一行提示,FTS5模块不可用。

这有可能是网关检测有问题,也有可能是需要特定编译选项的SQLite数据库,但不用管它,不影响我们的日常使用。

老马之所以介绍索引层,主要是让大家了解一下,当我们使用OpenClaw的内置搜索工具去查找记忆的时候,并不是直接去翻看每一个.md文件的。

而是通过作为书单的SQLite数据库去查看一下索引信息,一般是关键词匹配的形式。比如你要找昨天是否安装了Skill,Skill和昨天就是关键词,去查询数据库。

数据库中匹配到了昨天的每日日志记录.md文件,找到了这本书,才正式去翻开。随后回复你,昨天到底是安装了哪些Skill。

索引层本身只是为了快速定位是哪个文件,哪些内容,避免每次都去扫描所有的记忆文件。它本身自己并不存储任何的记忆内容,这点大家别搞混。

最后再补充说明两个OpenClaw内置的搜索工具,分别是语义搜索memory_search,精确读取memory_get。

当我们要求小龙虾去查询相关记忆时,如果是查询跟语义相关,也就是跟要求差不多意思的内容时,使用的就是memory_search。

如果你没有开启向量记忆的情况下,memory_search的所谓语义搜索,只是通过关键词去匹配,你要找苹果,它找出来的就是水果,而不是苹果公司。

如果有向量记忆的情况下,它才会根据上下文判断苹果的含义,把苹果公司、苹果电脑也考虑进去。

所以memory_search本质上就是去搜索文本类的.md文件,而不是去搜索向量数据库。

同样道理,memory_get也只能去精确读取文本类的.md文件里面某一行记忆,或者指定片段的记忆。

这些大家大概了解一下就可以了,实际使用上并不会有什么感知。除非你开启了向量记忆,可能才会有搜索准确度和效率上的不同感受。

向量记忆

向量这个词可能很多小伙伴都是第一次听说,你可以大概把向量当成一种数据的表达方式,或者一种数据的格式,本质上是一维数组。

OpenClaw的向量数据库存储范围仅限于文本,不会去存储图片、视频、音频、文件附件等内容。

比如上面提到的文本记忆中的一些.md文件里面的文本内容,就算是.md里面记录了生成了某个图片或者视频,它也只是记录这句话的文本文字。

而不会去把整张图片或者视频存储下来,因为这样存储需要的空间很大。况且OpenClaw使用的Embedding嵌入模型是文本类的。

Embedding模型负责将文本转换成向量,再存储到向量数据库。无论你用的Embedding模型是通过API接的云端,还是本地部署,都是一样的道理。

真的要存储图片或者视频,还得使用多模态Embedding嵌入模型,像Gemini Embedding 2这种。

所以我们可以认为,OpenClaw开启的向量记忆,就是文本文字的记忆。还有就是,它也不是什么都会去记忆。

像Session会话记录就不会存储,每日日志记录不一定会存储,有时候会存储部分向量,不会存储原文。而MEMORY.md长期记忆跟分类记忆就会存储。

什么情况下才会用到向量记忆呢?当你记忆.md文件超过50个,或者有更多的文件产生,而且需要语义搜索,有模糊查询的需求时,就可以使用。

补充说明一点,如果你对AI的基础知识不懂,更不懂技术的情况下。向量记忆跟你没多大关系,你只需要用好文本记忆就行了。

OpenClaw的向量记忆方式大致有以下三种:

1.LanceDB向量数据库+Embedding API(OpenAI)

2.MemOS第三方记忆管理系统

3.QMD本地语义搜索引擎

首先说第一种LanceDB向量数据库+Embedding API,这个是OpenClaw自带的,只是大部分人在安装OpenClaw之后,设置向导那里没有配置OpenAI的API接口信息。

因为LanceDB向量数据库是通过调用OpenAI提供的Embedding模型,来实现开启向量记忆的。

但是这里就存在一个弊端,你的一些数据是需要上传到OpenAI去使用Embedding模型进行处理的,数据的隐私安全没有保障。

当然不是说你只能调用OpenAI提供的Embedding模型,如果你有什么火山引擎、千问等服务商提供的Embedding模型API接口,可以告诉小龙虾去配置。

让小龙虾先启用LanceDB向量数据库,再设置你提供的Embedding模型API接口信息。如果你是本地搭建的Embedding模型服务,同样可以接入。

第二种MemOS第三方记忆管理系统,它既可以是云端,也可以是本地使用。之前老马的文章中也介绍过,可以回看:给你的OpenClaw装上记忆能力,还能省掉72%的token消耗。

推荐是使用MemOS的云端服务,注册账号就有送免费的额度,一般轻度使用也足够了,省去自己本地搭建的一些麻烦事。

MemOS的云端服务相当于外挂的向量记忆数据库,外挂了一个脑袋来存储记忆。缺点是需要联网,数据隐私安全得不到保障。

第三种是QMD本地语义搜索引擎,QMD是采用SQLite数据库+Vector拓展来实现记忆的。没错,前面提到的SQLite数据库这里也能派上用场。

这是一套完整的本地解决方案,具有完全开源免费,完全本地运行不联网,数据隐私有保障,响应速度快。

有关QMD的本地部署教程网上很多,大家可以自行搜索查看,也可以通过它github的开源项目地址:
https://github.com/tobi/qmd去详细了解。

老马这里就不展开细讲了,只是给大家解析一下方式。如果后面大家有需求,加上有时间的情况下,可能会出一期单独的部署教程。

通过以上介绍,相信大家对OpenClaw的记忆系统已经有一个大概的了解。普通用户用好文本记忆即可,进阶和高阶用户,则可以考虑向量记忆。

了解完记忆系统不同记忆方式的特点,你就知道接下来如何更好地去使用OpenClaw的记忆系统,从而打造出不会随便失忆的小龙虾。

好了,以上就是今天的分享,欢迎关注、点赞、转发一键三连。有任何问题和需求,请在评论区留言,回见!

对了,老马最近刚创建了一个AI学习交流群,有兴趣进群的小伙伴可以添加老马微信号:immajiabin,添加好友时备注:进群(不备注不通过)。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Protected by WP Anti Spam