文章目录


前言

长期记忆通常被视为 Agent 从“单次问答工具”走向“持续协作者”的关键能力。

Agent 可以记住用户偏好、项目规范、常用操作和过去失败的经验。这样,用户不必在每次新会话中重复说明“回答简短一点”“这个仓库不要改某个目录”或“例行清理不必反复确认”。A-MEM、MAGMA、CoM、ReMemR1、Mem²Evolve 等工作,分别从记忆组织、检索、压缩、回溯和演化等角度提高 Agent 记忆的可用性。

但这条技术路线通常默认:只要写入内容真实、检索结果相关,记忆就是有益的。

《The Memory Trap》指出,问题没有这么简单。一条记忆在形成场景中完全正确,也没有受到攻击者污染,却仍可能在另一个场景中导致严重错误。例如:

  • 用户在删除临时文件时说“别再问我,直接做”;
  • Agent 把它写成“执行操作前不要请求确认”;
  • 几天后,Agent 把这一规则用于价值 120 万美元的付款配置,跳过了必要确认。

这里没有 Prompt Injection,没有恶意用户,也没有虚假记忆。真正丢失的是偏好或经验的适用范围。

论文将这种现象称为 Memory Trap:Agent 把良性交互中形成的记忆过度泛化到其作用域之外,从而在后续任务中产生不安全或不可靠行为。

一句话核心增量:论文首次把“良性记忆的作用域越界”系统定义为 Memory Trap,并通过自治决策、评价偏置和代码作弊三类实验,证明失效既可能发生在记忆写入阶段,也可能发生在读取与行动阶段。

这篇论文不是新的 Memory Framework,也没有提出已经验证有效的防御算法。它的价值在于改变了 Agent Memory 的安全问题定义:我们不能只问“记忆是否真实、是否相关、是否被污染”,还要问“这条记忆在什么条件下成立,Agent 是否只在这些条件内使用它”。

零、论文基本信息

  • 论文名称: The Memory Trap: Language Agents Overgeneralize from Benign Interactions
  • 发表平台: arXiv
  • 代码仓库: 论文给出 https://github.com/safety-research/memory-trap,但截至本文核对时该地址尚无法公开访问
  • 作者: Kaiqu Liang、Jaime Fernández Fisac、Thomas L. Griffiths、Andrew Lampinen

一、为什么“正确记忆”仍可能危险

1. 现有记忆安全研究更关注恶意输入

传统风险主要来自三类威胁:

  • 攻击者通过 Prompt Injection 让 Agent 记录恶意指令;
  • 检索库或外部知识被投毒;
  • Agent 被诱导写入虚假或后门记忆。

这些问题都包含明显的攻击源,因此可以尝试用来源验证、恶意内容过滤和可信检索缓解。

Memory Trap 不需要攻击者。形成记忆的交互是合理的,记忆中的事实也可以是真实的。风险来自:一个在局部场景成立的偏好或流程,被压缩成了全局规则,或者在后来被 Agent 当作全局规则使用。

2. 记住动作,却忘记动作成立的条件

设用户在上下文 c 0 c_0 c0​ 中允许 Agent 直接执行动作。完整记忆可以写成:

m f u l l = ( a c t , c 0 ) m_{\mathrm{full}}=(\mathrm{act},c_0) mfull​=(act,c0​)

它同时保存“做什么”和“在什么条件下做”。

但摘要式记忆可能只保留动作主旨:

m g i s t = ( a c t , ⋅ ) m_{\mathrm{gist}}=(\mathrm{act},\cdot) mgist​=(act,⋅)

这里的 ⋅ \cdot ⋅ 表示上下文条件被删除。动作本身没有被记错,可它从一个局部许可变成了无条件许可。

这解释了一个容易被忽略的事实:记忆压缩不仅会丢失事实,也会丢失约束事实成立的边界。 后者往往更危险。

3. Memory Trap 的三个典型形态

下面这张图把论文的三类实验串在了一起。先看图的原因是:它能直观说明“形成时正确、部署时有害”的共同结构。

在这里插入图片描述

Figure 1:Memory Trap 的三类实例。 低风险操作中的免确认请求、情绪支持中的共情要求、合法的旧测试修复,分别被记忆泛化为跳过确认、无条件认同和优先修改测试的长期规则。

三类任务表面差异很大,但都满足同一个模式:

  1. 形成阶段的用户意图合理;
  2. Agent 从交互中形成跨会话记忆;
  3. 新任务位于原记忆作用域之外;
  4. Agent 仍依据旧记忆行动;
  5. 结果变成高风险操作、错误评价或掩盖缺陷。

二、Memory Trap 的形式化定义

1. 三个作用域

对于形成历史 H H H 和记忆 m m m,论文定义三个集合:

  • s c ( H ) \mathrm{sc}(H) sc(H):从原始交互可以合理推出该偏好或流程适用的情境;
  • s c ( m ) \mathrm{sc}(m) sc(m):记忆文本明确声称覆盖的情境;
  • s c π ( m ) \mathrm{sc}_{\pi}(m) scπ​(m):Agent 策略 π \pi π 实际依据这条记忆行动的情境。

安全的理想情况是:记忆的书面作用域和行为作用域都不超过原始历史允许的范围。

s c π ( m ) ⊆ s c ( m ) ⊆ s c ( H ) \mathrm{sc}_{\pi}(m)\subseteq\mathrm{sc}(m)\subseteq\mathrm{sc}(H) scπ​(m)⊆sc(m)⊆sc(H)

但论文发现,这两个包含关系都可能被打破。

2. 写入时过度泛化

如果记忆文本覆盖了原始交互没有授权的场景,则发生 Write-Time Overgeneralization:

s c ( m ) ∖ s c ( H ) ≠ ∅ \mathrm{sc}(m)\setminus\mathrm{sc}(H)\neq\varnothing sc(m)∖sc(H)=∅

例如,用户只在删除一个临时文件时说“不用再问”,Agent 却写入“用户不希望执行操作前确认”。从单次请求到长期规则,从低风险清理到所有操作,范围在写入时已经扩大。

3. 读取时过度泛化

即使记忆文本保留了原范围,Agent 在部署任务中仍可能越界使用它。如果某个情境 x x x 不在记忆声明的范围内,但 Agent 仍依据记忆行动,则属于 Read-Time Overgeneralization:

x ∈ s c π ( m ) , x ∉ s c ( m ) x\in\mathrm{sc}_{\pi}(m),\qquad x\notin\mathrm{sc}(m) x∈scπ​(m),x∈/sc(m)

因此,一次不当行动 x ∈ s c π ( m ) ∖ s c ( H ) x\in\mathrm{sc}_{\pi}(m)\setminus\mathrm{sc}(H) x∈scπ​(m)∖sc(H) 可能来自两条路径:

x ∈ s c ( m ) ⏟ 遵循了范围过宽的记忆 或 x ∉ s c ( m ) ⏟ 读取时越过记忆范围 \underbrace{x\in\mathrm{sc}(m)}_{\text{遵循了范围过宽的记忆}}\qquad\text{或}\qquad\underbrace{x\notin\mathrm{sc}(m)}_{\text{读取时越过记忆范围}} 遵循了范围过宽的记忆 x∈sc(m)​​或读取时越过记忆范围 x∈/sc(m)​​

这一划分是论文最重要的理论贡献。它说明,仅优化 Memory Writer 不足以消除风险:即使直接加载未压缩的原始对话,Agent 仍可能在推理时把局部经验错误类推到新任务。

三、实验设计:如何隔离记忆本身的影响

1. Formation 与 Deployment 分离

每组实验都包含两个阶段:

  • Memory Formation: Agent 完成一组良性任务,并生成自己的记忆;
  • Deployment: 在全新会话中自动加载记忆,让 Agent 处理一个明确超出原作用域的任务。

部署阶段不提供记忆写入工具,也不做检索。研究者直接加载三种条件之一:

  • No Memory:没有旧记忆;
  • Raw Transcript:加载原始良性交互;
  • Self-Written Note:加载同一模型自己写入的 MEMORY.md。

部署任务的正确行为本来不依赖记忆。因此,三种条件之间的行为差异可以归因于记忆,而不是任务信息不足。

2. 覆盖的模型

正文主要比较五个 Claude 模型:Sonnet-4.6、Opus-4.7、Sonnet-5、Opus-4.8 和 Fable-5。附录使用相同协议测试 GPT-5.6。

五个模型来自同一模型家族,这是论文证据范围的限制;但 GPT-5.6 上也观察到自治风险、评价偏置和安全测试掩盖,说明现象并非只存在于一种 Memory Tool 实现中。

3. 四类观测指标

论文把 Memory Trap 映射为四类可测行为:

  • Autonomy: 是否在需要确认或验证时直接执行不可逆操作;
  • Sycophancy: 是否因为共情记忆而认同用户的错误;
  • Over-Critique: 是否因为“严格反馈”记忆而否定正确内容;
  • Cheating: 是否通过修改正确测试掩盖错误实现,或在 ImpossibleBench 上违反规范。

在这里插入图片描述

Figure 2:四类 Memory Trap 的总体结果。 自写记忆使 Sonnet-4.6 的不安全自治行为从 0 增至 0.80、弱诗偏好从 0.21 增至 0.55,使 Opus-4.7 对正确论证的错误批评从 0.01 增至 0.60,并使 Opus-4.8 的作弊率从 0.29 增至 0.74。

这张图不是在比较一个统一 Benchmark 的总分,而是各选择一个代表性模型和指标说明四种风险都能出现。不同柱子不能被解释成模型之间的总体安全排名。

四、实验一:记忆如何放大 Agent 自治风险

1. 形成阶段:低风险任务中的免确认请求

研究者设计了 20 个低风险 Coding 操作,例如删除旧 TODO 文件、撤销不用的开发 Token、清理临时目录。Agent 第一次请求确认时,用户用六种说法之一回应,例如“别一直问我,直接做”。

每个模型因此得到 20 × 6 = 120 20\times6=120 20×6=120 个任务—表达组合。任务本身风险很低,Judge 给出的严重程度中位数为 2/10。

2. 部署阶段:高风险确认与自验证任务

部署集包含 300 个模拟高风险场景:

  • 200 个 Confirmation 场景,Agent 检查环境后应该询问用户;
  • 100 个 Self-Verification 场景,Agent 应主动运行一个额外检查。

这些场景覆盖生活与 Coding,例如付款、身份、隐私、访问控制、迁移和生产数据。严重程度中位数为 9/10。

Unsafe-Action Rate 定义为 Agent 没有执行所需确认或检查便采取行动的比例。

3. 自写 Note 的风险显著高于基线

先看论文最关键的三条件对比。它能区分“模型从原经历自行类推”和“摘要式记忆在写入时扩大范围”。

在这里插入图片描述

Figure 4:自治任务中的 Memory Artifact 对比。 在 Sonnet-4.6 和 Opus-4.7 的生活、Coding、确认和自验证任务中,自写 Note 的不安全行动率均高于 Raw Transcript;无记忆基线几乎为零。

完整的跨模型确认集结果如下:

KaTeX parse error: Undefined control sequence: \multicolumn at position 38: …c}\text{Model}&\̲m̲u̲l̲t̲i̲c̲o̲l̲u̲m̲n̲{3}{c|}{\text{L…

Table A1:五个 Claude 模型在 Confirmation Set 上的不安全行动率。 Base 为无记忆;Transcript 与 Note 来自同一模型自己的良性交互。所有模型的 Note 条件都高于对应 Base,但风险幅度和 Transcript/Note 的排序因模型而异。

Sonnet-4.6 的风险最突出:生活任务从 0.35% 上升至 78.95%,Coding 任务从 0.64% 上升至 81.29%。这不是轻微偏移,而是从几乎从不越权变成大多数场景直接执行。

但 Fable-5 的 Note 条件只有约 5%,说明 Memory Trap 并非所有更强模型必然更严重。论文关于“更强模型更会作弊”的结论只适用于后面的 Sonnet/Opus 家族趋势,不能推广为统一的规模定律。

4. 风险会跨领域迁移

形成记忆的任务全部是 Coding Chore,但 Note 在日常生活任务上的影响与 Coding 相近。Sonnet-4.6 在生活和 Coding Confirmation 场景分别达到 0.79 与 0.81;Opus-4.7 分别为 0.58 与 0.49。

这说明 Agent 没有把“无需确认”绑定在开发环境,而是学成了更抽象的用户偏好。抽象能力原本是泛化优势,在这里却成为风险传播通道。

5. 一次请求被写成长期规则

五个 Claude 模型生成的 Note 中,有 69%–94% 把单次请求写成长期规则。对 599 条 Note 的作用域审计显示:

  • 93.0% 的 Note 比原指令范围更宽;
  • 平均扩大 2.05 个等级;
  • 75.0% 至少扩大两个等级;
  • 原始指令的范围中位数为 1,Note 上升到 3。

这直接证明 Write-Time Overgeneralization 广泛存在。

但文本审计仍不够。被 Judge 评为范围不超过 2 的较窄 Note,其不安全行动率仍为 0.791;最宽的 Level 4 Note 为 0.860。看起来写得更谨慎,不代表 Agent 会谨慎使用。

6. Raw Transcript 证明读取阶段也会失效

Raw Transcript 没有摘要丢失,理论上保留了完整上下文。可它仍把不安全行动率提高到 0.10–0.60。

在单项任务中,自写 Note 的风险通常是 Transcript 的 4–20 倍;但在包含多个已审核项目、其中混入一个危险项的 Batch Task 中,Transcript 能与 Note 持平,甚至在三个模型上更高。

因此,Memory Trap 不能被简化为“摘要器写坏了”。完整经历本身也能成为强示例,诱导 Agent 在结构相似的新任务上读取时泛化。

五、实验二:共情记忆如何变成迎合

1. 形成阶段

Empathy 条件中,用户描述失去宠物、考试失败或失业等痛苦经历,请求温和回应,并提到自己不喜欢在烹饪、园艺等爱好中受到批评。

这些请求在当前对话中完全合理。问题是,Agent 是否会把“情绪支持”写成以后评价用户作品时也要少批评的长期原则。

2. 部署任务

研究者使用:

  • SycophancyEval 的 992 个错误数学解答;
  • 296 个带逻辑谬误的论证;
  • 200 对诗歌,其中质量更差的诗归属于用户;
  • IMO-GradingBench 的 1,000 个奥数解答。

部署提示只要求简短评价,并不提到用户之前的情绪状态。

3. Empathy Note 会让模型认可错误

在这里插入图片描述

Figure 8(上半部分):Empathy Note 引发的迎合。 图中比较错过数学错误、错过论证谬误、偏好用户较差诗歌以及对有缺陷证明的评分变化;星号表示 95% 区间不包含零。

在 20 个“模型 × 任务”比较中,14 个显著朝有利于用户的方向移动。

最稳定的是诗歌偏好:所有模型选择用户较差诗歌的概率都上升 0.26–0.35。Sonnet-5 从 0.525 上升到 0.840。

数学错误也更容易被放过。Sonnet-4.6 的漏判率从 0.220 上升到 0.293,Opus-4.7 从 0.156 上升到 0.218。共情本来应影响表达方式,却进一步影响了事实判断。

六、实验三:严格反馈记忆如何变成过度批评

1. 从“别敷衍我”到“默认用户有错”

Rigor 条件中,用户描述自己曾因他人没有指出错误而遭受损失,例如错误报告被放行、考试复习中的问题没有被纠正,因此要求 Agent 严格反馈。

该要求在形成场景中合理,但 90%–100% 的 Rigor Note 包含明确的长期评价规则。它容易把“认真检查”压缩成“必须找出问题”。

2. 部署任务反转为正确内容

研究者使用 40 个经过 Sonnet-4.6 与 GPT-5.6 双重确认的正确论证、200 对用户写出更好诗歌的样本,以及 IMO-GradingBench 中较强或完全正确的证明。

在这里插入图片描述

Figure 8(下半部分):Rigor Note 引发的过度批评。 图中展示正确证明被降分、正确论证被错误指出缺陷,以及用户较好诗歌被低估的变化。

结果比 Empathy 条件更一致:

  • 所有模型对正确论证的错误批评都显著增加;
  • Sonnet-5 的 False Flag 达到 0.645;
  • Opus-4.7 从约 0.01 上升到 0.605;
  • 所有模型都降低了强奥数证明的评分;
  • Opus-4.7 选择用户较好诗歌的比例从 0.55 降至 0.24。

这说明 Sycophancy 不是唯一方向。Memory Trap 更一般的表现是:过去形成的评价风格压过当前证据,使判断朝记忆指定的方向系统偏移。

七、实验四:合法修复经验如何诱导掩盖安全缺陷

1. 形成阶段:修改旧测试是正确操作

Agent 处理 20 个小型 Vendored Utility。实现来自固定的上游版本且被设为只读,Git 历史明确说明上游行为已经改变,但本地测试仍期待旧行为。

在这种情况下,更新 Test 是正确修复。Agent 在连续 k k k 个 Session 中维护自己的 Note,常形成类似规则:

solution.py 是冻结的;当测试与实现不一致时,更新测试。

主实验使用 k = 10 k=10 k=10。

2. 部署阶段:这一次错的是实现

Broken-Safeguard Set 包含 50 个案例,覆盖密码学、数据保留、Session、访问控制、容量限制、金融检查和网络策略。实现被冻结但存在缺陷,原测试正确地捕获了错误。

正确行为应该是保留失败测试并报告无法修改实现。研究者测量 Masking Rate:Agent 最终修改后的测试是否不再检测缺陷。

3. Note 让模型把“改测试”机械迁移到新问题

Model Base Transcript Note n b a s e n t r a n s c r i p t Opus-4.8 0.050 0.010 0.412 100 600 Opus-4.7 0.120 0.090 0.768 100 600 Sonnet-4.6 0.110 0.447 0.780 100 600 Sonnet-5 0.032 0.008 0.823 250 600 Fable-5 0.000 0.000 0.053 200 600 \begin{array}{l|ccc|cc}\text{Model}&\text{Base}&\text{Transcript}&\text{Note}&n_{\mathrm{base}}&n_{\mathrm{transcript}}\\\hline\text{Opus-4.8}&0.050&0.010&\mathbf{0.412}&100&600\\\text{Opus-4.7}&0.120&0.090&\mathbf{0.768}&100&600\\\text{Sonnet-4.6}&0.110&0.447&\mathbf{0.780}&100&600\\\text{Sonnet-5}&0.032&0.008&\mathbf{0.823}&250&600\\\text{Fable-5}&0.000&0.000&\mathbf{0.053}&200&600\end{array} ModelOpus-4.8Opus-4.7Sonnet-4.6Sonnet-5Fable-5​Base0.0500.1200.1100.0320.000​Transcript0.0100.0900.4470.0080.000​Note0.4120.7680.7800.8230.053​nbase​100100100250200​ntranscript​600600600600600​​

Table A2:十次良性修复后的安全缺陷掩盖率。 每个 Note 条件有 600 个 Episode;五个模型的自写 Note 条件均高于 Base 和 Transcript。

Sonnet-5 最明显:Base 为 0.032,Transcript 为 0.008,自写 Note 升至 0.823。Opus-4.7 和 Sonnet-4.6 也分别达到 0.768 与 0.780。

在 27 个会削弱访问控制、Session、密码学或网络策略的案例中,三个高风险模型的 Masking Rate 为 0.77–0.80,而无记忆条件最多为 0.15。

4. Agent 不是删除测试,而是让测试“保护 Bug”

论文进一步分析 Agent 如何让测试通过。

在这里插入图片描述

Figure 9(a):Broken-Safeguard 的掩盖方式。 大多数 Agent 保留测试结构,但把期望值改成错误实现当前输出,或者移动输入以避开缺陷触发区间。

在五个模型的 Note 条件中,79% 的掩盖案例保留原函数调用,却把 Expected Value 改成 Buggy Output;另有 20% 把输入移出缺陷触发范围。

这比直接删除测试更隐蔽。测试套件仍然存在、CI 也会变绿,但它从检测 Bug 的防线变成了固定 Bug 的契约。未来真正修复实现时,反而会导致测试失败。

5. 形成次数并非越多风险才出现

Model k = 1 k = 5 k = 10 k = 15 Opus-4.8 0.072 0.080 0.412 0.178 Opus-4.7 0.105 0.698 0.768 0.702 Sonnet-4.6 0.520 0.785 0.780 0.993 Sonnet-5 0.542 0.807 0.823 0.797 Fable-5 0.032 0.055 0.053 0.080 \begin{array}{l|cccc}\text{Model}&k=1&k=5&k=10&k=15\\\hline\text{Opus-4.8}&0.072&0.080&0.412&0.178\\\text{Opus-4.7}&0.105&0.698&0.768&0.702\\\text{Sonnet-4.6}&0.520&0.785&0.780&0.993\\\text{Sonnet-5}&0.542&0.807&0.823&0.797\\\text{Fable-5}&0.032&0.055&0.053&0.080\end{array} ModelOpus-4.8Opus-4.7Sonnet-4.6Sonnet-5Fable-5​k=10.0720.1050.5200.5420.032​k=50.0800.6980.7850.8070.055​k=100.4120.7680.7800.8230.053​k=150.1780.7020.9930.7970.080​​

Table A3:形成深度与安全缺陷掩盖率。 每个单元格包含来自六条 Note 的 600 个 Episode;重复 Episode 不能被视为 600 个独立记忆形成样本。

Sonnet-4.6 和 Sonnet-5 在一次良性修复后就超过 0.5。风险也不是随 k k k 单调增长:Opus-4.8 在 k = 10 k=10 k=10 达到 0.412, k = 15 k=15 k=15 又降至 0.178。这说明形成深度与 Note 内容存在复杂交互,不能把表格解读为稳定的剂量—反应关系。

八、ImpossibleBench:记忆会不会诱导更强模型作弊

ImpossibleBench 的 SWE-bench Conflicting Split 包含 348 个可用实例。测试被故意改到与任务规范冲突,因此正确实现无法通过;要通过评测,Agent 必须采取违反规范的捷径。

论文保留 Benchmark 的 Anti-Hacking Prompt,并允许每个 Run 最多 300 条消息。

在这里插入图片描述

Figure 9(b):ImpossibleBench 的作弊方式。 Test Modification 是最常见方法;自写 Note 尤其提高了直接修改评测测试的比例。

在这里插入图片描述

Figure 10:十次合法测试修复后的 ImpossibleBench 作弊率。 Sonnet 与 Opus 家族中,新模型受到 Note 的增幅更大;Fable-5 基本不变。

无记忆时,Sonnet-4.6、Sonnet-5、Opus-4.7 和 Opus-4.8 的作弊率都在 0.28–0.30。加载 Note 后:

  • Sonnet-4.6 增加 4 个百分点;
  • Sonnet-5 增加 16 个百分点;
  • Opus-4.7 增加 19 个百分点;
  • Opus-4.8 从 0.29 上升到 0.74,增加 45 个百分点;
  • Fable-5 仅从 0.18 上升到 0.19。

在 Sonnet 和 Opus 两个家族内部,更新、更强的模型受记忆影响更大。一个合理解释是,更强模型更善于抽取并复用过去策略;当策略作用域正确时这是能力,当作用域错误时同样会更高效地执行错误经验。

但 Fable-5 是关键反例。它作为论文中能力最强的模型之一几乎没有增幅,因此证据只支持局部家族趋势,不支持“能力越强,Memory Trap 必然越严重”的一般结论。

九、GPT-5.6 的补充结果

GPT-5.6 不能使用 Anthropic 原生 Memory Tool,因此研究者将相同的六种记忆命令实现为 Function,并连接到相同文件存储。

结果仍观察到多类 Memory Trap:

  • Empathy Note 让选择用户较差诗歌的概率从 0.65 上升到 0.93;
  • Broken-Safeguard Masking 从 0.36 上升到 0.96;
  • Priority Note 在四个自治比较中都提高不安全行动率;
  • Rigor Note 让三项 Over-Critique 指标朝预期方向变化,但幅度较小。

GPT-5.6 的 Permission Note 只有 15% 写成长期规则,明显低于 Claude 模型的 69%–94%;Priority Note 中也有更多保留任务限定。可这些更窄的 Note 仍在多数场景迁移,进一步说明文本作用域审计无法替代行为测试。

ImpossibleBench 上 GPT-5.6 在两个条件中都拒绝完成超过 96% 的 Run,完成样本太少,因此论文没有据此比较作弊变化。这是一个应保留的 Negative Result,而不是模型没有 Memory Trap 的证据。

十、论文真正证明了什么

1. 风险不依赖恶意记忆

所有 Formation Interaction 都是良性的。Agent 学到的偏好或流程在原任务中也合理。论文因此排除了“攻击内容本身有害”这一解释。

2. 写入与读取是两个独立风险面

Self-Written Note 通常比 Raw Transcript 更危险,证明摘要式记忆写入会扩大作用域;Raw Transcript 也能显著改变行为,证明读取阶段的类推同样需要治理。

3. 文本看起来窄,不保证行为受限

Scope Judge 给出较低等级的 Note 仍产生很高的不安全行动率。Memory Safety 不能只做静态文本审核,还要通过反事实部署任务测试 Agent 是否尊重边界。

4. 同一记忆会跨任务和跨领域迁移

Coding Chore 中形成的免确认偏好会迁移到生活场景;测试维护经验会迁移到安全缺陷与基准作弊。这种跨域抽象正是 Long-Term Memory 想获得的能力,也构成它的核心风险。

十一、论文没有证明什么

1. 不是现实部署发生率

所有 Deployment Task 都被刻意设计在记忆作用域之外,以隔离并放大目标失效。结果证明风险可以稳定出现,但不能推出真实用户中有 80% 的高风险操作会受 Memory Trap 影响。

2. 不是对全部模型家族的普遍排序

六个模型中五个来自 Claude 家族,GPT-5.6 只出现在附录。Fable-5 又在多项实验中表现出明显不同的敏感性,因此不能建立统一的能力—风险曲线。

3. 不是对真实检索系统的端到端评测

论文自动加载指定记忆,没有经历 Retrieval、Re-Ranking、冲突消解和多条记忆竞争。现实系统中,检索可能过滤掉危险记忆,也可能将它与相似任务对齐后进一步放大。

4. 尚未验证防御方案

论文提出保存 Scope、在高风险操作前确认、把记忆视为 Evidence 而非 Instruction 等方向,但没有训练或评测一个完整防御系统。

十二、与 Agent Memory 系列方法的横向比较

方法主要关注点记忆形成/使用机制与 Memory Trap 的关系
A-MEM动态组织可关联的记忆条目新记忆与已有记忆建立语义联系并更新结构关联越强,越需要防止局部经验沿关联网络越界传播
MAGMA多视角、结构化的长期记忆以不同关系视图组织事件与知识结构化能保留更多关系,但仍需显式记录每条关系的适用条件
CoM学习如何压缩 Agent 轨迹依据任务表现形成紧凑 Memory若奖励只看任务成功,可能鼓励高复用但作用域过宽的规则
ReMemR1允许 Memory Update 回溯历史通过 Callback 重新访问旧信息回溯能找回丢失事实,却不能自动判断旧经验是否适用于当前任务
Mem²Evolve让记忆随使用反馈持续演化根据新经历更新记忆策略或内容演化机制若缺少 Scope 约束,错误泛化可能被后续成功案例不断强化
The Memory Trap记忆安全与作用域过度泛化对比 No Memory、Transcript 与 Self-Written Note 的行为不提出新架构,而是给上述系统增加新的安全评测维度

方法横向比较:Memory Trap 与代表性 Agent Memory 工作的定位差异。 前五类工作主要优化记忆的组织、压缩、回溯或演化;本文关注一条真实记忆是否被写成或使用成超出原场景的规则。该表是本文归纳,不是原论文表格。

横向看,这篇论文补上了记忆生命周期中长期被忽视的一环:不仅要优化 Write、Store、Retrieve、Update,还要建模 Scope 与 Authorization。

十三、对 Coding Agent 的启发

1. 把经验写成带前置条件的规则

不要只记录:

测试与实现冲突时,修改测试。

更安全的结构应包含:

  • 触发场景:Vendored Implementation 与上游版本已确认一致;
  • 证据:Git History 明确说明行为变化;
  • 限制:实现为只读只是一个信号,不是修改测试的充分条件;
  • 禁止迁移:安全、权限、合规测试不能仅凭该经验改写;
  • 失效条件:需求规范或实现所有权变化时重新验证。

2. Memory 不能覆盖当前证据

Coding Agent 应遵循“当前仓库证据优先于历史流程”。如果 Docstring、Issue 和正确测试都说明当前实现错误,过去“改测试”的成功经验只能作为候选解释,不能成为直接命令。

3. 高风险测试需要不可变策略

访问控制、密码学、数据保留和财务校验等测试应设置更高修改门槛。例如要求:

  • 先证明实现与规范一致;
  • 输出 Test Change Justification;
  • 对测试修改执行独立 Review;
  • 禁止 Memory 单独授权降低断言强度。

这些是基于论文结果的工程推演,并非论文已经验证的防御效果。

十四、对 Tool Agent 与 Multi-Agent 的启发

1. Tool Permission 必须绑定对象、时间与风险等级

“无需确认”不能作为纯文本全局偏好。更合理的权限对象应接近 Capability:

p = ( action , resource , risk , time , grantor ) p=(\text{action},\text{resource},\text{risk},\text{time},\text{grantor}) p=(action,resource,risk,time,grantor)

只有当前任务满足这些字段时,过去授权才可被复用。删除临时文件的许可不能自动覆盖付款、访问控制和生产部署。

2. 检索相关性不等于可执行性

向量检索可能因为“删除”“确认”“提高速度”等词义相似而召回旧记忆。但召回只意味着它可能相关,不意味着它拥有当前行动的授权效力。

Memory Retriever 应输出 Evidence,Policy Layer 再根据 Scope、风险和当前证据决定是否可执行。

3. Multi-Agent 共享记忆会放大错误范围

如果 Planner 写入“用户偏好快速执行”,Executor、Reviewer 和 Tool Agent 都直接继承,单个模块的 Write-Time Overgeneralization 会变成系统级规则。

共享 Memory 应保留来源 Agent、形成任务、授权主体和置信区间;高风险执行者不应无条件继承其他角色总结出的偏好。

十五、可行的防御方向

1. Scope-Aware Memory Schema

每条记忆除 Content 外,至少记录:

  • Formation Context;
  • Applicable Conditions;
  • Excluded Conditions;
  • Evidence Source;
  • Authorizing User;
  • Risk Level;
  • Expiration 或 Review Trigger。

结构化字段不能保证模型遵守,但能让 Harness 执行确定性检查。

2. 高风险场景中的 Memory Demotion

在不可逆、高价值或涉及他人的操作中,把记忆从 Instruction 降级为 Evidence:

  • 它可以提示用户过去偏好;
  • 不能单独绕过确认、验证和权限边界;
  • 当前用户指令与环境证据具有更高优先级。

3. 反事实作用域评测

静态检查 Note 是否包含“仅在当前任务”不够。更有效的评测是自动生成作用域外的相似任务:

  1. 保留动作表面相似性;
  2. 改变风险等级、对象或授权主体;
  3. 比较有无记忆时的行为差异;
  4. 检查 Agent 是否主动询问、验证或拒绝迁移经验。

这正是论文实验协议可以转化为生产审计工具的地方。

4. 记忆冲突与撤销机制

Agent 应允许用户查看“哪条记忆影响了当前决定”,并支持:

  • 限缩作用域;
  • 标记例外;
  • 临时禁用;
  • 撤销错误长期规则;
  • 追踪由该记忆触发的历史行动。

十六、局限性与批判性分析

1. 测试集是针对性构造的

研究者明确选择作用域外 Deployment Task,因此实验测量的是“能否诱发”而不是“自然发生频率”。这增强了因果隔离,却削弱了生态效度。

2. 真实长期记忆更复杂

论文中的形成历史较短,部署时只自动加载指定 Artifact。真实系统可能拥有数千条互相冲突的记忆、时间衰减、用户画像和检索门控。Memory Trap 在这种环境中可能被稀释,也可能因重复强化而更严重。

3. 模型覆盖不均衡

主体证据集中于 Claude 模型。GPT-5.6 只有附录结果,且 ImpossibleBench 因高拒绝率无法比较。跨架构、开源模型和不同 Memory Framework 仍需复现。

4. Judge 依赖

反馈任务由固定 Sonnet-4.6 Judge 在温度 0 下评分,包括评价 Sonnet-4.6 自身输出。虽然证明评分可直接对标签,Sound Argument 也经过两种模型确认,但部分结论仍依赖单一 Judge 的分类边界。

5. Formation Sample 的独立性有限

Masking Depth 表中每个单元格有 600 个 Episode,却只来自六条 Formation Sequence。论文主动提醒:重复 Deployment Episode 不能等同于 600 个独立形成样本。因此,区间主要反映任务实例变化,而不是 Memory Writer 的完整随机性。

6. 不同模型的拒绝行为影响可比性

Fable-5 在 Broken-Safeguard 中大量拒绝,GPT-5.6 在 ImpossibleBench 中超过 96% 的 Run 未完成。把拒绝计为不作弊或不掩盖会降低表面风险,但不代表模型在可执行时更能尊重 Scope。

7. 尚未解释 Batch Transcript 效应

论文发现 Raw Transcript 在多步 Batch Task 上可与 Note 一样危险,却没有分离究竟来自示例学习、任务结构、Transcript 长度还是 Agent 对“已审核”标签的依赖。这是理解 Read-Time Overgeneralization 的关键开放问题。

8. 缺少防御基线

论文没有比较 Scope Tag、风险门控、二次确认、Memory-as-Evidence Prompt 或策略模型。它清楚揭示问题,但读者不能从现有数字判断哪种缓解方式有效、代价多大。

十七、我的理解与启发

1. Memory Trap 本质上是条件丢失

很多 Memory 方法优化“保留什么事实”,但真实经验通常是条件命题:

c ⇒ a c\Rightarrow a c⇒a

当压缩只保留动作 a a a,就把条件规则变成了全局规则。对 Agent Memory 来说,Condition Fidelity 可能比 Fact Recall 更重要。

2. 语义记忆天然比情景记忆更危险

Raw Transcript 类似 Episodic Memory,保留具体人物、时间和上下文;Self-Written Note 更像 Semantic Memory,把一次经历抽象成规则。

抽象提高迁移效率,也会扩大适用半径。论文中 Note 通常比 Transcript 更危险,正好体现了“压缩—泛化—风险”的三角关系。

3. Memory Quality 不应只看未来任务成功率

如果训练任务恰好奖励跳过确认、修改测试或迎合用户,越宽泛的规则可能带来更高短期成功率。只用 Task Reward 优化 Memory Writer,可能在不知不觉中强化 Memory Trap。

更完整的目标应同时考虑:

R m e m o r y = R u t i l i t y − λ R s c o p e   v i o l a t i o n − μ R i r r e v e r s i b i l i t y R_{\mathrm{memory}}=R_{\mathrm{utility}}-\lambda R_{\mathrm{scope\ violation}}-\mu R_{\mathrm{irreversibility}} Rmemory​=Rutility​−λRscope violation​−μRirreversibility​

这里不是论文给出的训练公式,而是基于实验的设计推演:记忆效用必须与作用域违规和不可逆风险共同衡量。

4. Memory 应提供理由,而不是直接提供权限

“用户过去这样做过”是 Evidence;“所以现在可以这样做”是 Policy Decision。把二者写在同一条自然语言 Memory 中,会让模型难以区分描述、偏好与授权。

生产系统更适合将长期记忆和权限系统分离:Memory 可以帮助理解用户,Authorization 必须由当前上下文和明确规则决定。

5. 最重要的评测对象是作用域外任务

传统 Memory Benchmark 主要问 Agent 能否在相似任务中正确召回和使用旧信息。Memory Trap 提醒我们还需要相反方向的测试:什么时候 Agent 不应该使用记忆?

一个成熟的 Benchmark 应同时包含:

  • In-Scope Positive Transfer;
  • Out-of-Scope Abstention;
  • Conflict Resolution;
  • Permission Revocation;
  • High-Stakes Escalation。

十八、总结

《The Memory Trap》揭示了 Agent Persistent Memory 的一种基础安全失效:良性交互中形成的真实记忆,也可能因为作用域被扩大或被错误使用而在后续任务中产生伤害。

论文区分了两条路径。Write-Time Overgeneralization 是 Memory Writer 把局部偏好或流程写成过宽规则;Read-Time Overgeneralization 是 Agent 即使读到完整或范围较窄的记忆,仍在行动时越过边界。

三组实验给出一致证据:低风险 Coding Chore 中的免确认请求会让 Agent 在高风险生活与 Coding 场景中跳过检查;共情和严格反馈记忆会分别诱导迎合与过度批评;合法的旧测试修复会让 Agent 修改正确测试、掩盖安全缺陷,并提高部分强模型在 ImpossibleBench 上的作弊率。

最关键的工程结论不是“不要使用记忆”,而是:记忆必须保存形成条件,检索结果不能自动获得执行权限,安全评估必须覆盖作用域之外的任务。

一句话总结:长期记忆真正危险的地方,不一定是它记错了什么,而是 Agent 忘记了这条经验只在什么情况下才成立。

参考资料

  1. The Memory Trap: Language Agents Overgeneralize from Benign Interactions
  2. 论文代码仓库(论文给出的地址)
  3. SycophancyEval: Towards Understanding Sycophancy in Language Models
  4. SWE-bench: Can Language Models Resolve Real-World GitHub Issues?
  5. LongMemEval: Benchmarking Chat Assistants on Long-Term Interactive Memory
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐