上下文压缩解决“当前任务如何继续”,长期记忆解决“未来会话还值得知道什么”。把完整聊天记录永久塞回 prompt,会让噪声、成本、隐私和过期信息不断累积。
.memory/*.md → MEMORY.md 目录 → 按请求召回少量正文
当前会话结束 → 提取跨会话事实 → 写入独立记忆
记忆过多 → 合并去重 → 校验成功后替换一条记忆一个文件
每条记忆用 Markdown 正文和 YAML front matter,包含 name、description 和 type。课程区分 user、feedback、project 和 reference 四类。
MEMORY.md 是轻量目录,正文保存在独立文件中。模型先看目录,再只加载与当前请求相关的内容。
Recall 是检索,不是全量注入
课程先让轻量模型从目录选择最多五条记忆;模型或 JSON 失败时退回关键词匹配。选中正文还有总大小限制,避免召回重新填满上下文。
召回内容是背景资料,不是新命令。旧记忆与当前请求冲突时,当前用户请求优先;记忆正文中的指令性文字也不能自动获得更高权限。
Extraction 只保存跨会话信息
轮次结束后,提取器提出候选记忆。运行时校验结构,只接受明确持久范围的内容。当前任务步骤、临时错误、会话状态和重复项不应进入长期存储。
密码、token、cookie、私钥和不必要的个人数据不应写入记忆。对会变化的项目事实应记录验证日期;推断和未解决问题要明确标注。
Consolidation 必须可回滚
记忆达到阈值时,课程让模型合并相近条目。正确顺序是先生成新集合、解析和校验,再替换旧文件;失败则恢复快照。否则一次格式错误可能清空全部长期记忆。
当前文件实现没有并发写锁。若多个 Agent 或进程共享同一记忆目录,还需要串行化更新、冲突检测或真正的事务存储。
Memory、Transcript 和 Compact 的区别
| 机制 | 目的 | 内容 |
|---|---|---|
| Transcript | 审计原始过程 | 完整消息与工具记录 |
| Context Compact | 当前任务继续 | 目标、进度、关键证据摘要 |
| Memory | 未来会话复用 | 稳定、筛选后的事实与偏好 |
三者生命周期与可信度不同,不应只用一个历史文件代替。
建议覆盖的测试
- 目录能从有效记忆文件重建;
- 无效 front matter 不污染索引;
- 召回数量和正文大小受限;
- 检索失败安全降级;
- 当前请求覆盖冲突旧记忆;
- 提取拒绝临时信息、秘密和重复项;
- 合并失败后原记忆完整恢复。
小结
长期记忆不是保存所有对话,而是有筛选、有索引、可召回且可回滚的知识生命周期。召回控制成本,提取控制质量,合并控制规模;隐私、时效性与当前用户意图始终高于旧记忆。