news 2026/5/25 10:48:23

OpenClaw如何做好记忆持久化的 · 二、为什么是 OpenClaw?——从架构前提到三层记忆模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenClaw如何做好记忆持久化的 · 二、为什么是 OpenClaw?——从架构前提到三层记忆模型

二、为什么是 OpenClaw?——从架构前提到三层记忆模型

⏱ 30 秒速览| OpenClaw 记忆 = 三层分工:Session(工作台,秒级,逐字记录)→Workspace(书架,永久,确定性注入系统提示词)→Plugin(深层数据库,向量检索,概率性召回)。三层对应人类工作记忆→长时记忆→元记忆。核心洞察:元记忆(知道什么该记、什么该忘)是多数竞品缺失的层次——OpenClaw 通过 Weibull 衰减 + 三级晋升 + 六步清理实现了它。记忆方案可热插拔替换,生态竞争而非一家垄断。

2.1 24/7 Always-On:记忆的前提是"在场"

大多数 AI 助手只在你打开 App 时存在。你关闭标签页,它就消失了。这种"按需存在"的模式,对记忆系统来说是致命的——你不在的时候发生的事情,它永远无法记住

OpenClaw 走了一条完全不同的路:

  • Gateway 架构:WebSocket 控制平面常驻运行,Node 24 长进程。这不是一个"等你来用"的 App,而是一个 24/7 在线的服务端。
  • 20+ 通信渠道:WhatsApp / Telegram / Slack / Discord / SMS / Email / Webhook……你在哪里,它就在哪里。
  • 不是"你来找它",是"它一直在":支持 Cron 定时任务、Heartbeat 心跳、Webhook 事件触发——即使你没有主动发消息,Agent 也在后台观察、整理、预判(详见 §3.3 路径 C)。
  • Gateway 韧性:Gateway 进程崩溃或重启时,Session 状态已持久化在 JSONL 文件中,重启后自动恢复。Plugin Memory(LanceDB)作为嵌入式数据库同样持久化在磁盘。24/7 承诺的前提是"宕机可恢复"而非"永不宕机"——这是工程诚实。

So What:没有 24/7 的在场能力,记忆根本没有输入源。封闭在 App 内的助手只能记住你在 App 里说的话。OpenClaw 通过全渠道接入,获得了你在所有数字场景中的上下文——这是丰富记忆的物理前提。[召回率]

多语言注意事项:跨渠道记忆在多语言场景下依赖 Embedding 模型的跨语言能力。OpenAItext-embedding-3-small对中英文混合检索表现良好,但小语种之间的跨语言召回可能衰减。如果你在 Telegram 说英文、微信说中文,同一主题的记忆能否互通,取决于 Embedding 模型对这两种语言的语义空间对齐程度。


2.2 三层记忆架构总览

本节只讲"是什么"和"为什么这么分层"。技术细节在第三章的记忆生命旅程中展开。

理解 OpenClaw 记忆系统的关键是理解它的分层。不是一个向量数据库就完事了——不同类型的信息需要不同的存储策略、不同的生命周期、不同的访问模式。就像人类不会把"今天的早餐"和"毕生的技能"存在同一个大脑区域一样。

③ Plugin Memory · 程序性长时记忆

② Workspace Memory · 陈述性长时记忆

① Session Memory · 工作记忆

实时流入

摘要压缩

压缩前刷写
(Pre-compaction Flush)

agent_end 钩子
(对话结束回调)

before_prompt_build
(提示词构建前召回)

系统提示词注入
(每次调用自动加载)

Agent 自主创建

技能注入(热重载)

上下文窗口
(分钟~小时级)

Pruning 裁剪 + /compact 摘要

AGENTS.md · SOUL.md
TOOLS.md · USER.md

Skills 技能文件

memory-lancedb(内置基线)

memory-lancedb-pro(社区生产级)

memU / graph-memory / MemOS 等

用户对话

从上面的架构图可以看到,信息在三层之间的流动是双向的:从 Session 流向 Workspace 和 Plugin 实现持久化,又从 Workspace 和 Plugin 流回 Session 实现召回。这对应人类的记忆巩固与提取过程:你在对话中(工作记忆)学到的东西,入睡后经过巩固进入长时记忆,未来需要时再提取回工作记忆使用。

下表量化了三层的关键差异:

层级认知科学角色存储形式生命周期信息保真度容量
Session工作记忆JSONL 转录会话级(小时~天)~100%(原始对话逐字记录)有限(受上下文窗口约束)
Workspace陈述性长时记忆Markdown 文件永久(手动/Agent 编辑)~80%(结构化提炼,丢失对话语气)中(每文件数 KB)
Plugin程序性长时记忆向量数据库永久(Weibull 衰减)~2%–40%(L0 索引 ~2%,L2 完整叙述 ~40%)高(数万条+)

认知科学对照表(§1.4 预告的完整版):

人类记忆系统特征OpenClaw 对应映射理由
感觉记忆(Sensory)毫秒级暂存、快速衰减实时消息流(未处理的原始输入)信息还未进入处理管线
工作记忆(Working)秒~分钟级、7±2 项容量Session Context(上下文窗口)有限容量、活跃处理
短时记忆(Short-term)分钟~小时级、需复述维持Session Pruning +/compact摘要信息压缩以延长留存
长时 · 陈述性(Declarative)可言说的事实与事件Workspace Memory(4 注入文件)显式可读的持久知识
长时 · 程序性(Procedural)不可言说的技能与习惯Skills + Plugin Memory 向量存储隐式的行为模式
元记忆(Metamemory)对自身记忆的监控与调节Weibull 衰减 + 三级晋升 + 六步清理知道什么该记、什么该忘

值得特别注意最后一行:元记忆是大多数 AI 记忆系统缺失的层次。多数方案只实现了存储和检索——相当于只有"记"和"取",没有"对记忆本身的管理"。OpenClaw 通过 Weibull 衰减(控制遗忘速率)+ 三级晋升(评估记忆重要性)+ 六步清理(执行记忆淘汰)实现了计算意义上的元记忆——系统不仅能记,还"知道"什么值得记、什么应该忘。这是从"记忆数据库"到"记忆系统"的关键跨越。

现在让我们逐层展开。


2.2.1 Session Memory 关键机制

Session Memory 是离用户最近、更新最频繁的一层。每次你和 Agent 对话,原始消息就逐条写入 JSONL 文件——这是记忆系统的第一手数据源。

Session Model 的隔离设计

"谁的记忆"这个问题在多用户、多渠道、多 Agent 场景下变得异常复杂。OpenClaw 通过三个维度来唯一标识一个会话:

  • 每个会话由agentId + channelId + peerId唯一标识
  • 三种隔离粒度供选择:
    • per-agent:所有人共享同一个会话(适用于公开 Agent)
    • per-channel-peer推荐):每个用户在每个渠道有独立会话
    • per-account-channel-peer:同一个人在不同账号下也独立(最严格)
  • identityLinks:反过来,同一用户在 Telegram / Discord / WhatsApp 上的账号可以合并为一个身份,让记忆在渠道间打通
  • dmScope(→ Direct Message 作用域)配置决定记忆边界——配置不当可导致 A 用户看到 B 用户的对话历史(详见第五章 F7)

这套隔离模型的设计哲学是"默认安全,显式开放"——默认每人一份记忆,想共享得主动配置。

会话生命周期管理

会话不是永远存在的。OpenClaw 提供了丰富的生命周期控制:

  • 自动重置:Daily Reset(每日凌晨清空)/ Idle Reset(空闲超时重置)/ 双条件触发
  • 手动重置/new(新建会话)//reset(清空当前会话)+ 自定义触发词
  • 群聊激活:mention gating(需 @Agent)/ reply tags(需回复 Agent 消息)——避免群聊中的每条消息都填充 Agent 的上下文窗口
  • 分渠道策略覆盖resetByType(按消息类型)/resetByChannel(按渠道)——Slack 可以设为日重置,WhatsApp 设为周重置
Session Pruning:LLM 调用前的智能减法[成本]

上下文窗口总会被填满。当它接近容量上限时,Pruning 机制自动执行"减法",腾出空间给新内容:

策略行为信息保真度
cache-ttl模式与 Anthropic prompt caching 联动,保留缓存窗口内的内容高(仅移除缓存外)
Soft-trim保留头部 + 尾部,中间省略并附注原始大小中(丢失中间细节)
Hard-clear整体替换为占位符[toolResult pruned]低(仅保留存在标记)

关键约束:只修剪toolResult(工具调用结果),用户消息和助手消息不可动。包含图片 block 的toolResult也跳过。

toolResult 与记忆的交互:一个常见问题是"Pruning 会不会把重要信息丢掉"。答案是不会——因为agent_end钩子在 Pruning之前触发,值得记住的 toolResult 内容已经被 Smart Extraction 提取到向量库了。Pruning 删除的是"窗口内的副本",不是"记忆本身"。这两个管线的执行顺序是精心设计的。

上下文摘要化

当 Pruning 还不够用,或者你想主动压缩上下文时:

  • /compact命令:将旧上下文摘要为精简版,释放窗口空间
  • Pre-compaction Memory Flush:压缩之前先让模型将值得保存的内容写入 Workspace 持久笔记——确保压缩不丢失关键信息。这是一个非常巧妙的设计:先"存档"再"压缩",两步操作顺序不可颠倒。
Session Maintenance 六步清理流程[成本]

长期运行的 Session 数据通过 6 步自动维护,防止磁盘被历史对话填满:

  1. prune stale— 按时间淘汰过期条目
  2. cap count— 按数量上限淘汰最旧条目
  3. archive transcript— 为已移除条目归档 JSONL 转录文件(可追溯)
  4. purge archives— 清理超龄归档
  5. rotate store— sessions.json 超限时自动轮转
  6. enforce disk budget— 硬性磁盘预算约束(可配置上限)

这六步形成了一条从"软清理"到"硬约束"的梯度管线。大多数时候只需前两步就能保持 Session 规模可控;最后一步是兜底安全阀。


2.2.2 Workspace Memory 关键机制

如果说 Session Memory 是"短暂的工作台",Workspace Memory 就是"长久的书架"。它由一组 Markdown 文件组成,每次 LLM 调用时自动注入系统提示词——Agent 不需要检索就能"知道"这些内容。

四大注入文件的角色划分
文件角色典型内容
AGENTS.md行为指令与能力声明“使用 tabs 缩进”、“回复用中文”
SOUL.md人格、语气、价值观“你是一个专业但友好的助手”
TOOLS.md工具使用偏好与限制“优先使用 ripgrep 而非 grep”
USER.md用户画像与偏好“用户是全栈开发者,偏好 PostgreSQL”

这四个文件的内容不需要通过检索来获取——它们每次调用都会完整注入。这意味着写在AGENTS.md里的偏好是确定性生效的,而存在向量库里的记忆是概率性召回的。这个区别至关重要,第三章路径 B 会详细分析。

Agent 自我修改 + 热重载

这是 OpenClaw 最不寻常的特性之一:Agent 可以改写自己的指令文件

  • Agent 通过文件读写工具直接编辑上述四个文件
  • Gateway 检测文件变更 → 触发热重载 →所有会话立即生效
  • 并发安全:Gateway 作为单一写入协调者,防止多 Agent 同时改同一文件

想象一下:你在 Telegram 上告诉 Agent “以后用 tabs 不要 spaces”,Agent 自己把这条偏好写进AGENTS.md,热重载后,你在 Slack 上发起的新对话里 Agent 已经默认使用 tabs 了。不需要你重复说,不需要检索找回——它成为了 Agent 的"本能"。

记忆可观测性[可控性]

“Agent 到底记住了什么”——这个问题在大多数 AI 产品中是一个黑箱。OpenClaw 的设计哲学是让记忆完全可观测:

  • 所有 Workspace 文件是纯 Markdown,可用任何编辑器查看和编辑
  • JSONL 转录文件可直接cat/grep/jq查询
  • memory-lancedb-pro支持通过 Agent 对话查询已存储的记忆(“你记住了什么关于我的数据库偏好?”)
  • 回滚路径:Workspace 文件支持 git 版本控制(cd ~/.openclaw/workspace && git init),Agent 写错了可以git revert;向量记忆目前不支持时间点回滚,但可通过 scope + category 过滤后批量删除

2.2.3 Plugin Memory 关键机制

第三层是最"深"的记忆——向量数据库存储,通过检索召回,容量理论上无限。这也是记忆系统最复杂、最具技术含量的一层。

插件 Slot 架构

OpenClaw 的记忆层不是写死的,而是可插拔的:

  • plugins.slots.memory:记忆插槽可热插拔(→ 不需要重启 Gateway 就能切换记忆实现)
  • 生命周期钩子体系——这些钩子定义了记忆插件与 Agent 的交互时机:
    • before_prompt_build:召回记忆注入上下文(最关键的记忆钩子
    • agent_end:捕获新记忆
    • after_tool_call/message_received/before_message_write
  • api.on()vsapi.registerHook()的区别:前者是事件监听(可多个),后者是钩子注册(单一拦截点)

这种设计意味着你可以把默认的memory-lancedb替换成社区的memory-lancedb-pro,整个记忆策略就从"基础向量搜索"升级到"8 步混合检索管线"——而 Agent 代码一行不动。

多 Agent 记忆隔离[隐私]

当你运行多个 Agent 时,它们的记忆关系是怎样的?

  • Workspace 文件默认所有 Agent 共享——因为它们在同一个 workspace 目录下。这是有意的设计:所有 Agent 都应该了解同一个USER.md(你的偏好),保持行为一致。
  • Plugin Memory 通过scope字段隔离——每个 Agent 只能读写自己 scope 内的向量记忆。这也是有意的:金融 Agent 的交易记忆不该被闲聊 Agent 读到。
  • 跨 Agent 共享需要显式配置:将scope设为共享级别,或使用 Workspace 文件作为跨 Agent 通信通道。

设计取舍很清晰:Workspace 共享有利于一致性,Plugin 隔离有利于安全

社区方案生态

OpenClaw 的记忆生态不是一个方案独大,而是多方案并存、各有所长:

项目Star定位与内置方案的关键差异
memory-lancedb-pro3.6k生产级混合检索 + 衰减+Cross-Encoder +Weibull +L0/L1/L2 分层
memU13k24/7 主动式记忆+双 Agent 架构 +预测式记忆
graph-memory知识图谱记忆+实体关系建模 +多跳推理
MemOS7.8k跨任务技能记忆+技能迁移 +任务图谱
EverMemOS3.2k省 Token 的记忆 OS+Token 优化 +记忆压缩

关于 memory-lancedb vs memory-lancedb-pro:目前缺乏公开的 A/B 基准对比数据。从架构差异看,pro 版增加了 Cross-Encoder 精排、Weibull 衰减、L0/L1/L2 分层存储和两阶段去重——这些在 IR(信息检索)领域有成熟的理论支撑,但具体在 OpenClaw 记忆场景中的量化提升,社区尚未发布正式 benchmark。本文基于架构分析而非实测数据。

memory-core 演进信号

值得关注的是官方正在进行的重构:

  • memory-core extension:将社区验证的最佳实践收编为核心模块
  • memory host SDK:为第三方插件提供统一的记忆宿主接口
  • 方向很清晰——从"插件提供记忆"到"平台内置记忆"。这和 Linux 内核的演化路径一模一样:社区模块足够成熟后被收编进上游。

2.3 三个层级的所有权边界

一个容易混淆的问题:哪些能力是 OpenClaw平台提供的,哪些是内置方案,哪些是社区增强?厘清这一点对技术选型至关重要。

能力提供者能否替换
Session 管理、JSONL 存储、会话生命周期OpenClaw 平台否(核心基础设施)
Workspace 文件、热重载、Agent 自修改OpenClaw 平台否(核心基础设施)
plugins.slots.memory插槽机制OpenClaw 平台否(框架层)
memory-lancedb(基线向量记忆)内置方案是(可替换为社区插件)
memory-lancedb-pro(混合检索+衰减)社区增强(3.6k Star)是(plugin slot 热插拔)
memU(24/7 主动式记忆)社区增强(13k Star)
graph-memory/MemOS/EverMemOS社区增强

So What:OpenClaw 平台保证了记忆的底座(存储、隔离、注入、钩子),而将记忆的策略(提取什么、如何检索、怎样衰减)开放给生态。这就像操作系统提供文件系统 API,具体实现由 ext4 / ZFS / Btrfs 竞争优化。你可以从最简单的内置方案开始,随着需求增长逐步升级到社区插件——迁移成本为零,因为接口不变。[可控性]


下一章:架构讲完了"是什么",第三章将以一条具体记忆的生命旅程为叙事线,讲透"怎么运作"——从你说出一句话,到这句话变成三个月后可以被召回的永久记忆,中间那 8 步到底发生了什么。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 1:42:42

终极指南:如何免费解锁Cursor Pro完整功能并绕过API限制

终极指南:如何免费解锁Cursor Pro完整功能并绕过API限制 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your t…

作者头像 李华
网站建设 2026/5/23 1:42:48

无需安装claude code,快马平台三步开启ai编程新手之旅

最近在学编程的朋友们可能都听说过Claude Code这个AI编程助手,但很多新手在第一步安装配置上就被劝退了。今天分享一个更简单的解决方案——直接在InsCode(快马)平台上体验类似的AI编程辅助功能,完全不需要本地安装,打开浏览器就能用。 零配置…

作者头像 李华
网站建设 2026/5/23 1:42:46

实战指南|安科士100G QSFP28 30km光模块选型、部署与运维全攻略

对于技术运维人员、网络工程师而言,光模块的选型、部署与运维,直接影响网络的运行效率与稳定性。安科士100G QSFP28 30km光模块作为中长距传输场景的热门产品,其选型逻辑、部署要点与运维技巧,是从业者必须掌握的核心内容。本文结…

作者头像 李华
网站建设 2026/5/23 1:42:50

嵌入式开发实战:如何在STM32上快速移植LittleFS文件系统(附完整代码)

嵌入式开发实战:STM32移植LittleFS文件系统的完整指南 在资源受限的嵌入式系统中实现可靠的数据存储一直是开发者面临的挑战。传统文件系统往往对硬件要求较高,而简单的裸数据存储又缺乏安全性和管理能力。LittleFS作为一种轻量级、高可靠性的嵌入式文件…

作者头像 李华
网站建设 2026/5/23 1:42:46

FPGA实战:手把手教你用Verilog状态机实现一个可配置的I2C主机模块

FPGA实战:构建高可配置I2C主机控制器的九大设计要点 在嵌入式系统设计中,I2C总线因其简洁的两线制结构和灵活的多主从架构,成为连接各类传感器的首选方案。本文将深入探讨如何用Verilog状态机实现一个工业级可配置I2C主机控制器,…

作者头像 李华