摘要
这篇论文指出,有状态语言 agent 里的「逻辑回滚」并不是真回滚:分支被中止后,如果 serving 会话还留着 KV cache,模型仍会注意到本应被丢弃的内容。作者把缺失的保证形式化为「回滚一致性」(rollback consistency):完全中止必须还原模型实际注意到的状态,而不只是对话记录。他们用「相同 token、不同 cache」的审计方法,在 7 个开源权重模型家族(3.8B–36B)上验证了这个问题,覆盖 Hugging Face Transformers 默认的 cache 复用路径和 LangGraph time-travel,并在端到端会话应用中复现。仅靠残留 KV,63 个审计单元中就有 25 个的受保护效果被翻转,而攻击者 token 在全部 63 个实际请求中都不可见;重建 cache 后所有案例消失。修复方案是在中止时做事务局部(transaction-local)的 cache 还原,无需全局清空;作者称结果确定、可由已发布的 artifacts 复现。
为什么重要
对做 agent 分支、拒绝、重试循环的人来说——比如 LangGraph time-travel、树搜索 agent、Claude Code 式 fork——这条直接相关:只有 serving 路径真正重建注意力状态,跨会话和 subagent 分叉才是安全的。这个缺陷在应用层完全看不见,审计必须下沉到 serving 栈。它还是一条安全通道:被攻击者污染的内容在逻辑删除后仍可能留在 cache 里。缓解方法不复杂:在中止边界重建或还原 cache。
技术细节
| 核心保证 | 回滚一致性:完全中止必须恢复模型实际注意到的状态,而不只是对话记录 |
|---|---|
| 方法 | 相同 token、不同 cache 的审计(决策 token 完全一致,只有缓存前缀不同) |
| 范围 | 7 个开源权重模型家族(3.8B–36B);HF Transformers 默认 cache 复用;LangGraph time-travel;端到端会话应用;MoE cache 隔离对照 |
| 结果 | 仅残留 KV 就使 25/63 个审计单元的受保护效果被翻转;攻击者 token 在全部 63 个实际请求中均不可见;重建 cache 后所有案例消失 |
| 修复 | 中止时做事务局部(transaction-local)的 cache 还原,而非全局清空 |
| 代码 | 摘要页无直接仓库链接;作者宣称可从发布的 artifacts 复现(CC BY 4.0,提供 TeX 源码) |
| 与知识库的关系 | 与 Agentic Transaction(ev-20260817-01)互补:两者都针对 agent 的原子性与回滚语义,本文表明存储层(KV cache)会悄悄违反它们 |
标签
agentskv-cacherollbackreliabilitysecuritylanggraphtransformersarxivresearch