已经是最新一篇文章了!
已经是最后一篇文章了!

agent runtime lab · 2026 · 技术研究笔记

12. 上下文、摘要和长期记忆不是一回事

保存得更久不等于知道得更多,未经验证的记忆会把旧错误带进新任务

区分模型当前可见内容、会话压缩结果与跨会话存储,并分析来源、范围和过期策略

研究版 · 9 个章节 · 约 7 分钟 · 更新于 2026-07-27

版本 A · 中文 B · English
SCROLL

上下文是本次模型调用可以直接看到的内容。摘要是运行时从一段历史中压缩出的新内容。长期记忆则保存在模型调用之外,需要检索后重新进入上下文。

三者的边界如下:

类型是否直接可见生命周期主要风险
当前上下文单次调用超过窗口、成本增长
会话摘要被加入后可见当前会话或恢复期遗漏与错误归纳
长期记忆否,需检索跨会话过期、污染、越界

记忆需要来源,而不只是一段文字

“项目使用 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-上下文摘要与长期记忆/