Workflow
会话修剪
icon
搜索文档
Meta 删邮件事故背后,OpenClaw 为什么会“失忆”?代码库维护者拆解记忆架构
AI前线· 2026-03-16 18:42
OpenClaw代理记忆系统核心机制 - 文章核心观点:OpenClaw代理的记忆由四个独立层构成,理解并正确配置这些层是避免代理“遗忘”指令、确保其长期可靠运行的关键[8][9][10] - 代理“遗忘”主要源于三种失败模式:指令仅存在于对话中未被写入文件(模式A)、上下文压缩导致信息损耗(模式B)、会话修剪工具结果(模式C)[12][14] - 确保记忆持久性的根本原则是:任何未写入文件的内容都不被视为存在[32] 记忆的四层结构与诊断 - 记忆系统分为四层:引导文件(永久)、会话记录(半永久,可压缩)、LLM上下文窗口(临时,固定200K令牌)、检索索引(永久)[9][11] - 快速诊断代理“遗忘”原因:运行 `/context list` 命令检查文件是否加载及是否被截断[22][23][24] - 引导文件(如`SOUL.md`, `AGENTS.md`, `MEMORY.md`)在每个会话开始时从磁盘加载,不受压缩影响,是最持久的记忆层[11] - 当LLM上下文窗口(200K令牌)填满时,会触发压缩操作,用摘要替换详细历史,此过程有信息损耗[11][20] 压缩与修剪机制 - 压缩与修剪是完全不同的系统:压缩会总结并永久改变整个对话历史;修剪仅在内存中临时移除旧工具结果,不影响磁盘记录[16][20] - 压缩是危险的,因为它会改变模型看到的内容;修剪是朋友,能减少令牌占用且无损[21] - 压缩操作会丢失嵌入对话的指令、图像、工具结果及其上下文,但会保留所有工作区文件及代理在压缩前写入磁盘的内容[31][37] - 为避免最坏情况的“溢出恢复”,应通过配置使系统保持在“好路径”,即在压缩前能自动触发记忆刷新[28][29] 确保记忆可靠性的三层防御策略 - 第一层(压缩前记忆刷新):调整配置(如`reserveTokensFloor: 40000`, `memoryFlush.enabled: true`),在上下文接近填满时自动触发代理将重要内容保存到磁盘[34][35][39] - 第二层(手动记忆保存):在切换任务或给出重要指令前,主动命令代理将当前上下文保存到记忆文件,并可使用 `/compact` 进行手动压缩[42][43][44] - 第三层(文件架构):合理利用工作区文件结构,将持久性规则写入`MEMORY.md`等引导文件,并通过`memory_search`工具强制代理在行动前检索记忆[33][47][52][59] 关键配置与最佳实践 - 在`AGENTS.md`中添加“记忆协议”和“检索协议”,强制代理在行动前搜索记忆文件,而非依赖可能丢失的上下文[7][52][59] - 为缓解工具结果膨胀并节省成本,建议启用会话修剪(如`contextPruning.mode: "cache-ttl"`)[21][76] - 记忆搜索有两种主要路径:A路径使用内置的本地混合搜索(关键词+语义);B路径使用QMD后端,适合搜索外部大型文档库[62][66][69] - 定期进行“记忆卫生”维护,如每周将每日日志中的持久规则整合到`MEMORY.md`,并保持`MEMORY.md`文件简短(建议不超过100行)[53][55]