上下文压缩解决“当前任务如何继续”,长期记忆解决“未来会话还值得知道什么”。把完整聊天记录永久塞回 prompt,会让噪声、成本、隐私和过期信息不断累积。

.memory/*.md → MEMORY.md 目录 → 按请求召回少量正文
当前会话结束 → 提取跨会话事实 → 写入独立记忆
记忆过多 → 合并去重 → 校验成功后替换

一条记忆一个文件

每条记忆用 Markdown 正文和 YAML front matter,包含 namedescriptiontype。课程区分 userfeedbackprojectreference 四类。

MEMORY.md 是轻量目录,正文保存在独立文件中。模型先看目录,再只加载与当前请求相关的内容。

Recall 是检索,不是全量注入

课程先让轻量模型从目录选择最多五条记忆;模型或 JSON 失败时退回关键词匹配。选中正文还有总大小限制,避免召回重新填满上下文。

召回内容是背景资料,不是新命令。旧记忆与当前请求冲突时,当前用户请求优先;记忆正文中的指令性文字也不能自动获得更高权限。

Extraction 只保存跨会话信息

轮次结束后,提取器提出候选记忆。运行时校验结构,只接受明确持久范围的内容。当前任务步骤、临时错误、会话状态和重复项不应进入长期存储。

密码、token、cookie、私钥和不必要的个人数据不应写入记忆。对会变化的项目事实应记录验证日期;推断和未解决问题要明确标注。

Consolidation 必须可回滚

记忆达到阈值时,课程让模型合并相近条目。正确顺序是先生成新集合、解析和校验,再替换旧文件;失败则恢复快照。否则一次格式错误可能清空全部长期记忆。

当前文件实现没有并发写锁。若多个 Agent 或进程共享同一记忆目录,还需要串行化更新、冲突检测或真正的事务存储。

Memory、Transcript 和 Compact 的区别

机制目的内容
Transcript审计原始过程完整消息与工具记录
Context Compact当前任务继续目标、进度、关键证据摘要
Memory未来会话复用稳定、筛选后的事实与偏好

三者生命周期与可信度不同,不应只用一个历史文件代替。

建议覆盖的测试

  • 目录能从有效记忆文件重建;
  • 无效 front matter 不污染索引;
  • 召回数量和正文大小受限;
  • 检索失败安全降级;
  • 当前请求覆盖冲突旧记忆;
  • 提取拒绝临时信息、秘密和重复项;
  • 合并失败后原记忆完整恢复。

小结

长期记忆不是保存所有对话,而是有筛选、有索引、可召回且可回滚的知识生命周期。召回控制成本,提取控制质量,合并控制规模;隐私、时效性与当前用户意图始终高于旧记忆。

参考资料