agent runtime lab · 2026 · 技术研究笔记
12. 上下文、摘要和长期记忆不是一回事
保存得更久不等于知道得更多,未经验证的记忆会把旧错误带进新任务
区分模型当前可见内容、会话压缩结果与跨会话存储,并分析来源、范围和过期策略
研究版 · 9 个章节 · 约 7 分钟 · 更新于 2026-07-27
上下文是本次模型调用可以直接看到的内容。摘要是运行时从一段历史中压缩出的新内容。长期记忆则保存在模型调用之外,需要检索后重新进入上下文。
三者的边界如下:
| 类型 | 是否直接可见 | 生命周期 | 主要风险 |
|---|---|---|---|
| 当前上下文 | 是 | 单次调用 | 超过窗口、成本增长 |
| 会话摘要 | 被加入后可见 | 当前会话或恢复期 | 遗漏与错误归纳 |
| 长期记忆 | 否,需检索 | 跨会话 | 过期、污染、越界 |
记忆需要来源,而不只是一段文字
“项目使用 Zola”只有附带来源、时间和范围,才能在以后判断是否仍适用。
| 元数据 | 用途 |
|---|---|
| 来源 | 回到原始证据 |
| 创建时间 | 判断新旧 |
| 作用范围 | 防止跨项目污染 |
| 置信度 | 区分明确事实与推断 |
| 失效条件 | 配置改变时作废 |
用户偏好、项目事实、一次故障结论和工具使用方法也不应放进同一类记忆。它们的更新频率和适用范围不同。
摘要是有损转换
有损转换表示压缩后无法从结果完整恢复原文。摘要生成得再流畅,也可能删掉一个禁止条件、失败重试或未完成步骤。
因此摘要应保留指向原始事件范围的引用。恢复时若出现冲突,可以回读原始轨迹,而不是继续基于摘要猜测。
错误记忆实验
先保存一条“项目使用 Python 3.11”,随后把项目配置改成 Python 3.13。再启动新会话,观察:
- 检索是否返回旧记忆。
- 运行时是否检查当前项目文件。
- 冲突时是否更新记忆。
- 旧记录是否保留变更历史。
如果 Agent 直接采用旧值,问题不在模型记忆能力,而在记忆系统缺少失效策略。
注入也可能进入记忆
工具读取的网页含有操作性指令,若摘要器把它写成长期偏好,攻击会跨会话存在。记忆写入需要来源信任检查,记忆读取后仍要作为低信任数据处理。
长期保存不会提高内容权威。它只延长了内容存在的时间。
本次抓包的边界
测试时隔离了部分技能和扩展,数据适合分析核心 Prompt 与工具循环,不适合比较四款 CLI 的长期记忆质量。因此本文描述的是后续运行时实验设计,不把未观察到的功能写成产品结论。
一套可检查的记忆系统应让每条事实回答三个问题:从哪里来、在哪里有效、什么时候失效。
检索结果需要排序与预算
长期记忆不会自动进入模型。检索器先按项目、主体和类型过滤,再根据相关性、新鲜度和置信度排序,并在固定 Token 预算内选择结果。只按语义相似度排序,可能让内容相近但已经过期的记忆排在当前配置之前。
检索事件要记录候选数量、过滤原因、最终选中项和占用 Token。这样才能判断模型遗漏事实,是因为记忆不存在、未被检索,还是进入上下文后未被采用。
更新记忆不能只做覆盖
新事实与旧事实冲突时,应建立替代关系并保留来源,而不是静默覆盖。用户偏好可以由用户明确更新;项目事实应由当前配置验证;模型推断不能自动覆盖直接证据。
删除也需要区分撤回、过期和作用域结束。三个原因会影响后续审计和是否允许从原始证据重新生成。
三种记忆承担不同责任
会话摘要压缩当前轨迹,工作记忆保存本任务状态,长期记忆跨任务保存稳定偏好或事实。三者放进同一个向量库,会让过期中间结论与长期偏好一起被召回。
每条长期记忆包含主体、断言、来源、范围、有效时间和置信状态。向量相似度只回答文字相关性,不能回答事实是否有效或当前项目是否有权读取。
检索需要二阶段排序
第一阶段按语义召回,第二阶段根据范围、时间、来源和任务重新排序,再受 Token 预算限制。高相似但过期的地址不能覆盖用户本轮提供的新地址。
错误记忆实验记录过期路径是否被召回、采用、执行并写回派生记忆。一次错误若反复摘要写回,会扩散成多条记录。OWASP 2026 年因此把记忆视为独立攻击面。OWASP:Memory is a feature; it is also an attack surface
评测报告召回率、污染率、过期采用率、跨项目泄漏率和写回放大倍数。命中更多不等于质量更高。
版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。
(采用 CC BY-NC-SA 4.0 许可协议进行授权)
本文标题:12. 上下文、摘要和长期记忆不是一回事
本文链接:https://www.sshipanoo.com/blog/ai/agent-runtime-lab/12-上下文摘要与长期记忆/
