记忆系统 Memory
记忆系统 Memory:分离工作记忆与长期记忆,设计带来源、租户、保留期和删除语义的写入检索流程,以架构、轨迹与故障重放完成工程验收。
学习目标
- 能解释“记忆系统 Memory”如何分离工作记忆与长期记忆,设计带来源、租户、保留期和删除语义的写入检索流程
- 能区分工作记忆、长期记忆、语义检索、记忆写入策略、遗忘,并标出控制权、状态和副作用边界
- 能冻结输入与版本,沿以下证据定位首个分叉:memory_id、租户、来源、写入理由、向量版本、检索分数、过期时间与删除日志
- 能注入“全局向量库未按租户过滤,把另一用户的偏好和历史写进当前回答”,完成阻断、恢复、复位和同输入重放
来源、课程身份与适用边界
“记忆系统 Memory”以Anthropic 公开全文《Building effective agents》建立工程总纲,并用Anthropic《Effective context engineering for AI agents》核对本章机制。
这不是一本名为《AI Agent 开发实战》的官方出版物,也不存在官方十四章目录。平台把公开工程文章、官方开发文档和原始论文重组为 14 个工程单元;下列 112 个节点是站内课程地图。正文、代码、图表、实验与练习均为独立教学重写,模型、API、协议或安全边界变化时必须重新验证。
本单元的八个工程坐标
- 记忆系统 Memory:这是“分离工作记忆与长期记忆,设计带来源、租户、保留期和删除语义的写入检索流程”的第 1 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- 小特聊久了会忘事,得有个本子记下来:这是“分离工作记忆与长期记忆,设计带来源、租户、保留期和删除语义的写入检索流程”的第 2 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- 两种记忆:脑子里的当下,本子里的长期:这是“分离工作记忆与长期记忆,设计带来源、租户、保留期和删除语义的写入检索流程”的第 3 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- 记忆怎么用起来:写入、检索、遗忘三个操作:这是“分离工作记忆与长期记忆,设计带来源、租户、保留期和删除语义的写入检索流程”的第 4 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- 检索的灵魂:按「意思」找回,不是按关键词:这是“分离工作记忆与长期记忆,设计带来源、租户、保留期和删除语义的写入检索流程”的第 5 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- 记忆里都装些啥:情景、语义、程序三类:这是“分离工作记忆与长期记忆,设计带来源、租户、保留期和删除语义的写入检索流程”的第 6 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- 动手一:换个查询,看它按「意思」捞回哪条:这是“分离工作记忆与长期记忆,设计带来源、租户、保留期和删除语义的写入检索流程”的第 7 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
- 动手二:三类记忆,分别该装什么:这是“分离工作记忆与长期记忆,设计带来源、租户、保留期和删除语义的写入检索流程”的第 8 个工程坐标;必须进入机制解释、运行轨迹或故障证据,不能只停在目录。
术语与运行合同
↡工作记忆:当前任务上下文中的短期状态;在“记忆系统 Memory”中按以下证据核对:memory_id、租户、来源、写入理由、向量版本、检索分数、过期时间与删除日志。、↡长期记忆:跨轮次或会话保存在外部存储的状态;在“记忆系统 Memory”中按以下证据核对:memory_id、租户、来源、写入理由、向量版本、检索分数、过期时间与删除日志。、↡语义检索:按向量相似度寻找含义接近的记录;在“记忆系统 Memory”中按以下证据核对:memory_id、租户、来源、写入理由、向量版本、检索分数、过期时间与删除日志。、↡记忆写入策略:决定哪些信息值得保存以及保存多久的规则;在“记忆系统 Memory”中按以下证据核对:memory_id、租户、来源、写入理由、向量版本、检索分数、过期时间与删除日志。、↡遗忘:按过期、用户删除或低价值规则移除记忆;在“记忆系统 Memory”中按以下证据核对:memory_id、租户、来源、写入理由、向量版本、检索分数、过期时间与删除日志。。
本页不变量是:记忆只能在正确主体、权限和生命周期内读写,检索结果进入上下文前再次核验。任何“成功”结论都要保存memory_id、租户、来源、写入理由、向量版本、检索分数、过期时间与删除日志;模型自评、最终措辞和单次 demo 都不能替代环境事实。
工程机制与反证实验
不是所有对话都该记
把临时请求、敏感值和错误结论长期保存会污染后续任务。
动手验证:对候选记忆执行保存/不保存分类并审查误写。
语义相似不代表有权读取
向量分数只衡量含义接近,租户、ACL 和时效要先做确定性过滤。
动手验证:用两个租户的相似记录验证零串读。
来源让记忆可纠正
没有创建时间和事实来源的记忆无法判断过期,也难以撤销。
动手验证:更新来源事实后找到并失效所有派生记忆。
遗忘是系统能力
用户删除、保留期和低价值淘汰必须真正影响索引与备份。
动手验证:执行删除后从主库、索引和读取路径逐层验证。
从架构到故障重放
1. 架构复杂度实验
在“记忆系统 Memory”中切换简单基线、受控工作流和自主循环,先判断“分离工作记忆与长期记忆,设计带来源、租户、保留期和删除语义的写入检索流程”是否真的需要更高自主性,再比较延迟、成本、可观测性与风险。
Architecture decision laboratory
记忆系统 Memory
分离工作记忆与长期记忆,设计带来源、租户、保留期和删除语义的写入检索流程
不变量:记忆只能在正确主体、权限和生命周期内读写,检索结果进入上下文前再次核验
最小可运行切片
async function retrieveMemory(query: Query, actor: Actor) {
const candidates = await vectorIndex.search(embed(query.text));
return candidates
.filter((item) => item.tenantId === actor.tenantId)
.filter((item) => !isExpired(item) && policy.canRead(actor, item))
.slice(0, 5)
.map(withProvenance);
}切片只表达“分离工作记忆与长期记忆,设计带来源、租户、保留期和删除语义的写入检索流程”的核心合同。生产实现还要补齐持久化、超时、密钥隔离、结构化日志、幂等和批量评测;如果不能重新取得memory_id、租户、来源、写入理由、向量版本、检索分数、过期时间与删除日志,代码跑通也不能证明机制正确。
练习与答案
练习
问题 1:最小证明。 怎样用正常、边界和单故障三类样本证明“记忆只能在正确主体、权限和生命周期内读写,检索结果进入上下文前再次核验”?
问题 2:节点覆盖。 记忆系统 Memory、小特聊久了会忘事,得有个本子记下来、两种记忆:脑子里的当下,本子里的长期、记忆怎么用起来:写入、检索、遗忘三个操作、检索的灵魂:按「意思」找回,不是按关键词、记忆里都装些啥:情景、语义、程序三类、动手一:换个查询,看它按「意思」捞回哪条、动手二:三类记忆,分别该装什么如何从目录词变成工程证据?
问题 3:恢复验收。 怎样证明“全局向量库未按租户过滤,把另一用户的偏好和历史写进当前回答”已经修复?
本章回顾
- “记忆系统 Memory”解决的是分离工作记忆与长期记忆,设计带来源、租户、保留期和删除语义的写入检索流程。
- 核心不变量是记忆只能在正确主体、权限和生命周期内读写,检索结果进入上下文前再次核验。
- 首要反例是全局向量库未按租户过滤,把另一用户的偏好和历史写进当前回答。
- 最小证据包包含memory_id、租户、来源、写入理由、向量版本、检索分数、过期时间与删除日志。
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 工作记忆
当前任务上下文中的短期状态。在“记忆系统 Memory”中必须能按以下证据重新定位:memory_id、租户、来源、写入理由、向量版本、检索分数、过期时间与删除日志。
- 长期记忆
跨轮次或会话保存在外部存储的状态。在“记忆系统 Memory”中必须能按以下证据重新定位:memory_id、租户、来源、写入理由、向量版本、检索分数、过期时间与删除日志。
- 语义检索
按向量相似度寻找含义接近的记录。在“记忆系统 Memory”中必须能按以下证据重新定位:memory_id、租户、来源、写入理由、向量版本、检索分数、过期时间与删除日志。
- 记忆写入策略
决定哪些信息值得保存以及保存多久的规则。在“记忆系统 Memory”中必须能按以下证据重新定位:memory_id、租户、来源、写入理由、向量版本、检索分数、过期时间与删除日志。
- 遗忘
按过期、用户删除或低价值规则移除记忆。在“记忆系统 Memory”中必须能按以下证据重新定位:memory_id、租户、来源、写入理由、向量版本、检索分数、过期时间与删除日志。