
你有没有遇到过这种情况:
告诉龙虾"以后删文件之前要先问我",它说"好的,我记住了"。
然后过了几天,它自己把文件删了。
你问它,它一脸懵:什么?你说过这件事吗?
这不是龙虾变坏了,是它的记忆系统没有正确工作。
理解这件事背后的原理,你才能真正用好 OpenClaw——知道什么该让它"记住",什么注定会被遗忘,以及怎么设计才能让它越用越聪明。
语言模型天生没有记忆
在讲 OpenClaw 之前,先把一件事说清楚。
语言模型本身,没有记忆。
每次你调用它,它都是从零开始的。不记得你是谁,不记得昨天说过什么,甚至不记得同一个对话里五分钟前发生了什么——除非那些内容还在它当前能看到的窗口里。
这对简单的聊天机器人无所谓。但对 Agent——一个需要跨时间做任务、积累经验、持续改进的系统——这种失忆是致命的。
OpenClaw 解决这个问题的方式,是在语言模型外面搭了一套记忆系统。
这套系统分四层,每层解决不同的问题。
第一层:上下文记忆——Agent 的工作台(短期记忆)
这是最直接的一层。
每次 OpenClaw 调用语言模型,它不只是把你说的话发过去。它会把一大段内容拼在一起,一起发给模型:
Soul.md 的内容(Agent 是谁、价值观是什么)+ memory.md 里检索到的相关片段+ 可用 Skills 的列表+ 历史对话的压缩摘要+ 你刚才说的话
语言模型看到的,是这整个包裹。它在这个范围内推理,给出回答。
这就是"上下文记忆"——放在当前窗口里的所有东西,模型都能即时访问,不需要任何检索步骤。
但这个工作台有尺寸限制。
Token 有上限。对话越来越长,历史内容越积越多,工作台迟早会撑满。
OpenClaw 的解法叫 Context Compaction:当历史对话快要触顶,自动调用一次语言模型,把旧的对话压缩成摘要,用摘要替换原文。这个过程可以递归发生,让 Agent 能长期运行而不爆掉。
压缩是有损的——细节会丢失,但结论和关键决策会保留。
这里藏着一个很多人踩过的坑:
你在对话里告诉 Agent "以后删文件之前要问我",它说"好的"——但这句话只存在于对话历史里。一旦触发 Compaction,这个约定可能就消失了。
这不是 bug,是上下文记忆的工作机制。
第二层:外部记忆——跨越会话边界的存储(长期记忆)
上下文记忆在对话结束后就消失了。外部记忆不会。
OpenClaw 里的外部记忆,就是那些 .md 文件:
memory.md ← 长期记忆,事实和约定soul.md ← Agent 的身份和价值观habit.md ← 定期任务和习惯
这些文件的内容会出现在每次调用的系统提示里,不会被 Compaction 压缩掉。写进去的,每次对话都在。
所以规则只有一条:想让 Agent 永远记住的事,必须写进文件。
口头说的,不算。
写进去了,才算真正记住。
这就是为什么你应该在重要约定之后,明确让 Agent 确认:"你把这条写进 memory.md 了吗?" 没写的,等于没说。
外部记忆还有另一种形式:向量存储。
当 memory.md 积累的内容越来越多,OpenClaw 不会把整个文件都塞进系统提示——那样 Context Window 很快就爆了。它用 RAG(检索增强生成)的方式:把 memory.md 切成小块,每次根据当前对话的语义,只取最相关的几段放进窗口。
这就是为什么你的龙虾有时候"想起来"某件事,有时候又好像没印象——不是它忘了,是那段记忆没有被检索到。
第三层:情景记忆——从自己的历史里学习(中期记忆)
这是最容易被忽视的一层,也是最有意思的一层。
外部记忆存的是事实。情景记忆存的是事件——具体来说,是过去行为的结果。
每次 Agent 完成一个任务,理想的情况是它记录下来:做了什么、用了什么方法、结果怎样、有什么可以改进的地方。
OpenClaw 里,这体现在 habit.md 的演化上。
比如你让龙虾每天中午提醒你做某件事,它执行了一段时间后,可能会自己在 habit.md 里记录:这类提醒在哪个时间点效果最好、用什么格式你更容易回应。
更完整的情景记忆实现,会把每次任务的过程结构化记录下来:
任务:整理上周的会议记录方法:先提取行动项,再按优先级排序结果:用户满意,花了8分钟备注:下次可以先问用户偏好哪种格式
下次遇到类似任务时,Agent 检索过去的经验,用历史结果来选择当前策略。
这是从个人历史做学习,不是从通用数据集学习——所以它会越来越适合你的具体场景。
这也是为什么同一只龙虾用得越久,往往越顺手。 不是模型变强了,是情景记忆在积累。
第四层:参数记忆——模型与生俱来的知识
这层最特殊,因为 OpenClaw 对它没有控制权。
参数记忆,就是语言模型训练时编码进权重里的所有东西:世界知识、语言模式、推理能力、编程范式……
这些知识始终都在,不需要检索,也不占 Context Window。
但它有三个硬限制:
训练截止日期。 模型不知道训练之后发生的事情。
无法运行时更新。 不重新训练,就没办法注入新的永久知识。
会幻觉。 当模型不确定时,它倾向于用"听起来对"的内容填补空白,而不是承认不知道。
这就是为什么 OpenClaw 里要有 Skills 和 memory.md——用外部记忆弥补参数记忆的局限。你的公司内部规范、你个人的工作习惯、最近发生的事情,模型不可能知道,必须靠外部记忆来补充。
正确的理解方式:参数记忆是龙虾的通识教育,外部记忆是它的在职经验。最好的 Agent,两者结合。
四层记忆在 OpenClaw 里怎么配合
把四层放在一起看,就能理解 OpenClaw 每次处理一条消息时,背后发生了什么:
你发送一条消息 ↓OpenClaw 从 memory.md 检索相关片段(外部记忆) ↓检查有没有匹配的 Skills(外部记忆) ↓把历史对话摘要 + 检索结果 + 你的消息拼成系统提示(上下文记忆) ↓调用语言模型推理(参数记忆在这里发挥作用) ↓执行工具调用,返回结果 ↓把这次交互的结果写回 memory.md(更新外部记忆) ↓如果是完整任务,记录情景日志(情景记忆)
每一步都有对应的记忆层在工作。
模型本身是无状态的,是这套记忆系统给了它有状态的假象。
用好记忆系统的三个实践
理解了四层架构,有三件事可以马上改变你用 OpenClaw 的方式:
第一,重要约定必须显式写入文件。
不要相信"它说它记住了"。重要的规则、偏好、约定,都要确认它写进了 memory.md。可以直接说:"把这条规则写进 memory.md,我要确认它在里面。"
第二,让 Agent 记录它做过的事。
每次完成一个复杂任务,让它在 memory.md 或者 habit.md 里留下记录:用了什么方法、结果如何、下次有什么可以改进。这就是在主动建设情景记忆。
第三,定期清理 memory.md。
记忆积累到一定程度,相互矛盾的内容会让 Agent 晕头转向。旧的、过期的、不再相关的条目,定期让 Agent 帮你整理清理。好的记忆系统不只是积累,还要懂得遗忘。
本篇小结
记忆类型 OpenClaw 的实现 特点 上下文记忆(短期记忆) 系统提示 + 对话历史 即时访问,对话结束后消失 外部记忆(长期记忆) memory.md + RAG 检索 跨会话持久,必须显式写入 情景记忆(中期记忆) habit.md + 任务日志 记录过去经验,越用越聪明 参数记忆 语言模型本身的权重 始终存在,无法运行时修改
四层各司其职,缺一不可。
理解这个架构,你就知道为什么龙虾有时候"记得",有时候"忘了"——不是随机的,是有迹可循的。
下一篇,我们讲 OpenClaw 的多 Agent 协作——当一只龙虾不够用,怎么让一群龙虾分工合作,而不是互相添乱。
你有没有遇到过这种情况:
告诉龙虾"以后删文件之前要先问我",它说"好的,我记住了"。
然后过了几天,它自己把文件删了。
你问它,它一脸懵:什么?你说过这件事吗?
这不是龙虾变坏了,是它的记忆系统没有正确工作。
理解这件事背后的原理,你才能真正用好 OpenClaw——知道什么该让它"记住",什么注定会被遗忘,以及怎么设计才能让它越用越聪明。
语言模型天生没有记忆
在讲 OpenClaw 之前,先把一件事说清楚。
语言模型本身,没有记忆。
每次你调用它,它都是从零开始的。不记得你是谁,不记得昨天说过什么,甚至不记得同一个对话里五分钟前发生了什么——除非那些内容还在它当前能看到的窗口里。
这对简单的聊天机器人无所谓。但对 Agent——一个需要跨时间做任务、积累经验、持续改进的系统——这种失忆是致命的。
OpenClaw 解决这个问题的方式,是在语言模型外面搭了一套记忆系统。
这套系统分四层,每层解决不同的问题。
第一层:上下文记忆——Agent 的工作台(短期记忆)
这是最直接的一层。
每次 OpenClaw 调用语言模型,它不只是把你说的话发过去。它会把一大段内容拼在一起,一起发给模型:
Soul.md 的内容(Agent 是谁、价值观是什么)+ memory.md 里检索到的相关片段+ 可用 Skills 的列表+ 历史对话的压缩摘要+ 你刚才说的话
语言模型看到的,是这整个包裹。它在这个范围内推理,给出回答。
这就是"上下文记忆"——放在当前窗口里的所有东西,模型都能即时访问,不需要任何检索步骤。
但这个工作台有尺寸限制。
Token 有上限。对话越来越长,历史内容越积越多,工作台迟早会撑满。
OpenClaw 的解法叫 Context Compaction:当历史对话快要触顶,自动调用一次语言模型,把旧的对话压缩成摘要,用摘要替换原文。这个过程可以递归发生,让 Agent 能长期运行而不爆掉。
压缩是有损的——细节会丢失,但结论和关键决策会保留。
这里藏着一个很多人踩过的坑:
你在对话里告诉 Agent "以后删文件之前要问我",它说"好的"——但这句话只存在于对话历史里。一旦触发 Compaction,这个约定可能就消失了。
这不是 bug,是上下文记忆的工作机制。
第二层:外部记忆——跨越会话边界的存储(长期记忆)
上下文记忆在对话结束后就消失了。外部记忆不会。
OpenClaw 里的外部记忆,就是那些 .md 文件:
memory.md ← 长期记忆,事实和约定soul.md ← Agent 的身份和价值观habit.md ← 定期任务和习惯
这些文件的内容会出现在每次调用的系统提示里,不会被 Compaction 压缩掉。写进去的,每次对话都在。
所以规则只有一条:想让 Agent 永远记住的事,必须写进文件。
口头说的,不算。
写进去了,才算真正记住。
这就是为什么你应该在重要约定之后,明确让 Agent 确认:"你把这条写进 memory.md 了吗?" 没写的,等于没说。
外部记忆还有另一种形式:向量存储。
当 memory.md 积累的内容越来越多,OpenClaw 不会把整个文件都塞进系统提示——那样 Context Window 很快就爆了。它用 RAG(检索增强生成)的方式:把 memory.md 切成小块,每次根据当前对话的语义,只取最相关的几段放进窗口。
这就是为什么你的龙虾有时候"想起来"某件事,有时候又好像没印象——不是它忘了,是那段记忆没有被检索到。
第三层:情景记忆——从自己的历史里学习(中期记忆)
这是最容易被忽视的一层,也是最有意思的一层。
外部记忆存的是事实。情景记忆存的是事件——具体来说,是过去行为的结果。
每次 Agent 完成一个任务,理想的情况是它记录下来:做了什么、用了什么方法、结果怎样、有什么可以改进的地方。
OpenClaw 里,这体现在 habit.md 的演化上。
比如你让龙虾每天中午提醒你做某件事,它执行了一段时间后,可能会自己在 habit.md 里记录:这类提醒在哪个时间点效果最好、用什么格式你更容易回应。
更完整的情景记忆实现,会把每次任务的过程结构化记录下来:
任务:整理上周的会议记录方法:先提取行动项,再按优先级排序结果:用户满意,花了8分钟备注:下次可以先问用户偏好哪种格式
下次遇到类似任务时,Agent 检索过去的经验,用历史结果来选择当前策略。
这是从个人历史做学习,不是从通用数据集学习——所以它会越来越适合你的具体场景。
这也是为什么同一只龙虾用得越久,往往越顺手。 不是模型变强了,是情景记忆在积累。
第四层:参数记忆——模型与生俱来的知识
这层最特殊,因为 OpenClaw 对它没有控制权。
参数记忆,就是语言模型训练时编码进权重里的所有东西:世界知识、语言模式、推理能力、编程范式……
这些知识始终都在,不需要检索,也不占 Context Window。
但它有三个硬限制:
训练截止日期。 模型不知道训练之后发生的事情。
无法运行时更新。 不重新训练,就没办法注入新的永久知识。
会幻觉。 当模型不确定时,它倾向于用"听起来对"的内容填补空白,而不是承认不知道。
这就是为什么 OpenClaw 里要有 Skills 和 memory.md——用外部记忆弥补参数记忆的局限。你的公司内部规范、你个人的工作习惯、最近发生的事情,模型不可能知道,必须靠外部记忆来补充。
正确的理解方式:参数记忆是龙虾的通识教育,外部记忆是它的在职经验。最好的 Agent,两者结合。
四层记忆在 OpenClaw 里怎么配合
把四层放在一起看,就能理解 OpenClaw 每次处理一条消息时,背后发生了什么:
你发送一条消息 ↓OpenClaw 从 memory.md 检索相关片段(外部记忆) ↓检查有没有匹配的 Skills(外部记忆) ↓把历史对话摘要 + 检索结果 + 你的消息拼成系统提示(上下文记忆) ↓调用语言模型推理(参数记忆在这里发挥作用) ↓执行工具调用,返回结果 ↓把这次交互的结果写回 memory.md(更新外部记忆) ↓如果是完整任务,记录情景日志(情景记忆)
每一步都有对应的记忆层在工作。
模型本身是无状态的,是这套记忆系统给了它有状态的假象。
用好记忆系统的三个实践
理解了四层架构,有三件事可以马上改变你用 OpenClaw 的方式:
第一,重要约定必须显式写入文件。
不要相信"它说它记住了"。重要的规则、偏好、约定,都要确认它写进了 memory.md。可以直接说:"把这条规则写进 memory.md,我要确认它在里面。"
第二,让 Agent 记录它做过的事。
每次完成一个复杂任务,让它在 memory.md 或者 habit.md 里留下记录:用了什么方法、结果如何、下次有什么可以改进。这就是在主动建设情景记忆。
第三,定期清理 memory.md。
记忆积累到一定程度,相互矛盾的内容会让 Agent 晕头转向。旧的、过期的、不再相关的条目,定期让 Agent 帮你整理清理。好的记忆系统不只是积累,还要懂得遗忘。
本篇小结
记忆类型 OpenClaw 的实现 特点 上下文记忆(短期记忆) 系统提示 + 对话历史 即时访问,对话结束后消失 外部记忆(长期记忆) memory.md + RAG 检索 跨会话持久,必须显式写入 情景记忆(中期记忆) habit.md + 任务日志 记录过去经验,越用越聪明 参数记忆 语言模型本身的权重 始终存在,无法运行时修改
四层各司其职,缺一不可。
理解这个架构,你就知道为什么龙虾有时候"记得",有时候"忘了"——不是随机的,是有迹可循的。
下一篇,我们讲 OpenClaw 的多 Agent 协作——当一只龙虾不够用,怎么让一群龙虾分工合作,而不是互相添乱。
你有没有遇到过这种情况:
告诉龙虾"以后删文件之前要先问我",它说"好的,我记住了"。
然后过了几天,它自己把文件删了。
你问它,它一脸懵:什么?你说过这件事吗?
这不是龙虾变坏了,是它的记忆系统没有正确工作。
理解这件事背后的原理,你才能真正用好 OpenClaw——知道什么该让它"记住",什么注定会被遗忘,以及怎么设计才能让它越用越聪明。
语言模型天生没有记忆
在讲 OpenClaw 之前,先把一件事说清楚。
语言模型本身,没有记忆。
每次你调用它,它都是从零开始的。不记得你是谁,不记得昨天说过什么,甚至不记得同一个对话里五分钟前发生了什么——除非那些内容还在它当前能看到的窗口里。
这对简单的聊天机器人无所谓。但对 Agent——一个需要跨时间做任务、积累经验、持续改进的系统——这种失忆是致命的。
OpenClaw 解决这个问题的方式,是在语言模型外面搭了一套记忆系统。
这套系统分四层,每层解决不同的问题。
第一层:上下文记忆——Agent 的工作台(短期记忆)
这是最直接的一层。
每次 OpenClaw 调用语言模型,它不只是把你说的话发过去。它会把一大段内容拼在一起,一起发给模型:
Soul.md 的内容(Agent 是谁、价值观是什么)+ memory.md 里检索到的相关片段+ 可用 Skills 的列表+ 历史对话的压缩摘要+ 你刚才说的话
语言模型看到的,是这整个包裹。它在这个范围内推理,给出回答。
这就是"上下文记忆"——放在当前窗口里的所有东西,模型都能即时访问,不需要任何检索步骤。
但这个工作台有尺寸限制。
Token 有上限。对话越来越长,历史内容越积越多,工作台迟早会撑满。
OpenClaw 的解法叫 Context Compaction:当历史对话快要触顶,自动调用一次语言模型,把旧的对话压缩成摘要,用摘要替换原文。这个过程可以递归发生,让 Agent 能长期运行而不爆掉。
压缩是有损的——细节会丢失,但结论和关键决策会保留。
这里藏着一个很多人踩过的坑:
你在对话里告诉 Agent "以后删文件之前要问我",它说"好的"——但这句话只存在于对话历史里。一旦触发 Compaction,这个约定可能就消失了。
这不是 bug,是上下文记忆的工作机制。
第二层:外部记忆——跨越会话边界的存储(长期记忆)
上下文记忆在对话结束后就消失了。外部记忆不会。
OpenClaw 里的外部记忆,就是那些 .md 文件:
memory.md ← 长期记忆,事实和约定soul.md ← Agent 的身份和价值观habit.md ← 定期任务和习惯
这些文件的内容会出现在每次调用的系统提示里,不会被 Compaction 压缩掉。写进去的,每次对话都在。
所以规则只有一条:想让 Agent 永远记住的事,必须写进文件。
口头说的,不算。
写进去了,才算真正记住。
这就是为什么你应该在重要约定之后,明确让 Agent 确认:"你把这条写进 memory.md 了吗?" 没写的,等于没说。
外部记忆还有另一种形式:向量存储。
当 memory.md 积累的内容越来越多,OpenClaw 不会把整个文件都塞进系统提示——那样 Context Window 很快就爆了。它用 RAG(检索增强生成)的方式:把 memory.md 切成小块,每次根据当前对话的语义,只取最相关的几段放进窗口。
这就是为什么你的龙虾有时候"想起来"某件事,有时候又好像没印象——不是它忘了,是那段记忆没有被检索到。
第三层:情景记忆——从自己的历史里学习(中期记忆)
这是最容易被忽视的一层,也是最有意思的一层。
外部记忆存的是事实。情景记忆存的是事件——具体来说,是过去行为的结果。
每次 Agent 完成一个任务,理想的情况是它记录下来:做了什么、用了什么方法、结果怎样、有什么可以改进的地方。
OpenClaw 里,这体现在 habit.md 的演化上。
比如你让龙虾每天中午提醒你做某件事,它执行了一段时间后,可能会自己在 habit.md 里记录:这类提醒在哪个时间点效果最好、用什么格式你更容易回应。
更完整的情景记忆实现,会把每次任务的过程结构化记录下来:
任务:整理上周的会议记录方法:先提取行动项,再按优先级排序结果:用户满意,花了8分钟备注:下次可以先问用户偏好哪种格式
下次遇到类似任务时,Agent 检索过去的经验,用历史结果来选择当前策略。
这是从个人历史做学习,不是从通用数据集学习——所以它会越来越适合你的具体场景。
这也是为什么同一只龙虾用得越久,往往越顺手。 不是模型变强了,是情景记忆在积累。
第四层:参数记忆——模型与生俱来的知识
这层最特殊,因为 OpenClaw 对它没有控制权。
参数记忆,就是语言模型训练时编码进权重里的所有东西:世界知识、语言模式、推理能力、编程范式……
这些知识始终都在,不需要检索,也不占 Context Window。
但它有三个硬限制:
训练截止日期。 模型不知道训练之后发生的事情。
无法运行时更新。 不重新训练,就没办法注入新的永久知识。
会幻觉。 当模型不确定时,它倾向于用"听起来对"的内容填补空白,而不是承认不知道。
这就是为什么 OpenClaw 里要有 Skills 和 memory.md——用外部记忆弥补参数记忆的局限。你的公司内部规范、你个人的工作习惯、最近发生的事情,模型不可能知道,必须靠外部记忆来补充。
正确的理解方式:参数记忆是龙虾的通识教育,外部记忆是它的在职经验。最好的 Agent,两者结合。
四层记忆在 OpenClaw 里怎么配合
把四层放在一起看,就能理解 OpenClaw 每次处理一条消息时,背后发生了什么:
你发送一条消息↓OpenClaw 从 memory.md 检索相关片段(外部记忆)↓检查有没有匹配的 Skills(外部记忆)↓把历史对话摘要 + 检索结果 + 你的消息拼成系统提示(上下文记忆)↓调用语言模型推理(参数记忆在这里发挥作用)↓执行工具调用,返回结果↓把这次交互的结果写回 memory.md(更新外部记忆)↓如果是完整任务,记录情景日志(情景记忆)
每一步都有对应的记忆层在工作。
模型本身是无状态的,是这套记忆系统给了它有状态的假象。
用好记忆系统的三个实践
理解了四层架构,有三件事可以马上改变你用 OpenClaw 的方式:
第一,重要约定必须显式写入文件。
不要相信"它说它记住了"。重要的规则、偏好、约定,都要确认它写进了 memory.md。可以直接说:"把这条规则写进 memory.md,我要确认它在里面。"
第二,让 Agent 记录它做过的事。
每次完成一个复杂任务,让它在 memory.md 或者 habit.md 里留下记录:用了什么方法、结果如何、下次有什么可以改进。这就是在主动建设情景记忆。
第三,定期清理 memory.md。
记忆积累到一定程度,相互矛盾的内容会让 Agent 晕头转向。旧的、过期的、不再相关的条目,定期让 Agent 帮你整理清理。好的记忆系统不只是积累,还要懂得遗忘。
本篇小结
四层各司其职,缺一不可。
理解这个架构,你就知道为什么龙虾有时候"记得",有时候"忘了"——不是随机的,是有迹可循的。
下一篇,我们讲 OpenClaw 的多 Agent 协作——当一只龙虾不够用,怎么让一群龙虾分工合作,而不是互相添乱。
夜雨聆风