← Paper StudyAgentic Context Management.md
Cost, Reliability & GovernanceContext & Memory

Agentic Context Management

Agent Memory 要管理的是整个 Context 生命周期

把 Agent memory 视为 ingestion、storage、retrieval、assembly 与治理组成的完整 lifecycle,而不是一个向量库功能。

Paper
Agentic Context Management: Solving Agent Memory and Cost by Treating Them as Lifecycle and Architecture Problems
Published
2026-07-23
Authors
Gaurav Dadhich
Official paper ↗

READ WITH QUESTIONS

Start with the questions

Answer these in your own words first, then revisit them after reading.

  1. Context lifecycle 的每个阶段分别可能丢掉什么信息或引入什么成本?
  2. 为什么 retrieval 再强,也救不回 ingestion 时已经被抹掉的结构?
  3. 多用户、多组织场景里,memory scope、删除权和成本预算怎样一起设计?
Deep read

作者:GPT-5.6 Sol

Agent Memory 真正要管的,是每一轮让模型“想起什么”

我读这篇 Agentic Context Management 时,最认同的是它把 memory 问题从数据库里拉回了 Agent loop。五个新名词只是这张地图的索引。

一个 Agent 记住了某条信息,不代表它会在需要的时候用上。原始对话怎么被抽取、信息属于哪个人或组织、这一轮该取回多少、下一轮可能需要什么、上下文超预算后删掉什么,这些决定共同影响模型眼前的 context。

所以,memory 的产品问题其实是:在每一个决策点,让模型拿到刚好够用、来源清楚、没有越权、成本可控的 context。

论文把这套工作称为 Agentic Context Management,简称 ACM。我觉得这个框架值得学,但它同时是一篇由 Maximem 创始人撰写、以自家产品 Synap 作为 reference implementation 的论文。读的时候要把“有用的系统框架”和“产品方自报的效果”分开。

五个 primitive,分别在解决什么失败

ACM 把 context 生命周期拆成五个 primitive(Figure 1,PDF 第 4 页)。

Architecting 先决定 memory 的形状。客服 Agent 需要保留账户状态、承诺和时间,Coding Agent 更关心仓库约束、失败命令和修改理由。统一 schema 很省事,但也会把真正重要的信息压成模糊字段。

Ingesting 把原始对话、文档和工具结果变成可检索的结构。用户说“4 月 3 日从 Starter 升到了 Pro”,如果只存成“用户提到套餐”,后面任何高级检索都救不回丢掉的日期和变更方向。检索上限在写入时已经被决定了一部分。

Scoping 决定信息属于谁,也决定这一轮能看见谁的信息。论文用 user、customer、client 三层来表达个人、组织和平台方。检索按最窄范围优先,同时在存储层和查询层做隔离。这个 primitive 解决的不只是 recall,还有企业 Agent 里更致命的 scope bleeding。

Anticipating 不是回答当前 query,而是预测下一步可能需要什么,提前准备 context。比如 Agent 正在排查账单问题,系统可以在下一轮前预取账户变更与相关工单,把检索从关键路径移走。它的代价是可能做了没有用的 speculative work。

Compacting & Consolidation 负责在 token budget 内保住重要信息。论文反复强调“validated compaction”:压缩后要检查关键事实能否从结果中恢复,给出 validation score 和 compression ratio;失败时降低压缩强度重试。

我会把这五项记成五个问题:记什么、怎么写、给谁看、下一步要什么、超预算删什么。它们不是五个孤立服务,而是一组相互约束的决策。

为什么全量追加会越来越贵

论文里最清楚的一段是成本推导(PDF 第 6 页)。

假设每轮新增 (t) 个 token,对话有 (n) 轮。每一轮都把全部历史重新发送时,第 (k) 轮输入大约是 (k \cdot t)。累计输入是:

[ C_{\text{append}} = \sum_{k=1}^{n} kt = \frac{t n(n+1)}{2} ]

所以累计输入 token 随轮数按 (O(n^2)) 增长。如果每轮把 context 控制在固定预算 (W),累计输入是 (nW),也就是 (O(n))。

在论文给的说明性参数里,每轮新增 500 token、预算 4,000 token,100 轮时全量追加累计 2,525,000 token,固定预算是 400,000 token,相差约 6.3 倍;200 轮时相差约 12.6 倍。

这不是线上实测。它假设每轮新增量固定,也没有把 prompt caching 的折扣算进去。缓存会改变常数,但只要旧历史仍被反复送入,累计增长的结构不会凭空消失。

问题在于,直接截断或粗暴总结虽然把成本降到线性,却可能把准确率一起压掉。论文引用了一个例子:18,282 token 被一次压成 122 token 后,准确率从 66.7% 降到 57.1%,甚至低于无 context baseline。作者因此提出一个目标位置:线性成本,同时用验证保证 fidelity。

“验证保证”四个字听起来很强,实际要问的是:验证问题覆盖了未来真正会问的问题吗?如果只检查已知关键事实,它仍然可能删掉未来才显得重要的信息。validated compaction 比无检查总结更好,但不能自然等同于 lossless。

检索命中,不代表信息足够

论文给了一个我很喜欢的上限关系:

[ \text{answer quality} \leq \min(\text{extraction quality}, \text{retrieval quality}, \text{reasoning sufficiency}) ]

它提醒我,RAG benchmark 常测“相关文档有没有进入 top-k”,而 Agent 真正需要的是“完成这次判断所需的证据是否齐全”。多跳问题里,找到一个相关文档却漏掉 bridge document,retrieval hit 仍然可以很好看,回答却做不出来。

作者做了一个小型 retrieval study:五个数据集各 10,000 个文档、1,000 个 query,用 Tantivy keyword retrieval 对比 Chroma + all-MiniLM-L6-v2 vector retrieval。CodeXGLUE 上 vector MRR@10 是 0.914,keyword 是 0.290;SciQ 反过来,keyword 0.815,vector 0.614。embedding + vector indexing 还比 keyword indexing 慢 60 到 97 倍。

它支持“不同数据适合不同信号”的直觉,却不是能证明 hybrid retrieval 最优的严谨 benchmark。作者自己列出了限制:单一 operator、单一 keyword/vector 实现、没有 chunking、每个 corpus 只有 10,000 文档、没有评估真正的 hybrid 或 reranker,HotpotQA 还只按一个 supporting document 计分。由于 embedding 模型会截断长文本,不做 chunking 对 vector 侧也不公平。

所以我会把这组数据当成设计动机,不会拿它当检索方案选型结论。

Reference implementation 实际做了什么

Maximem Synap 的系统图在 PDF 第 10 页。应用侧每轮大致只有三步:

  1. 按 user/customer scope 获取过去 context。
  2. 对当前对话做 validated compaction,再和 recent turns 一起组装给模型。
  3. 新一轮对话异步 ingest,立即返回 ingestion ID。

背后是 vector、graph、relational、object、time-series、cache/queue 的 polyglot storage。vector 解决语义近似,graph 保留实体关系和多跳链接,relational store 做 source of truth 与短期状态。

这个架构有几个产品上很实用的点。

Recent turns 保留原文,所以异步 ingestion 不会破坏 session 内的 read-your-writes。刚说的话下一轮仍然可见,只是结构化长期 memory 晚一点落地。

身份由服务端 credential 推导,scope predicate 同时进入查询层,而不是由客户端随便声明 tenant。企业数据隔离应该是一条执行约束,不是一句 prompt。

Compaction 还会返回 score 与 ratio。即使验证不完美,它也让“压缩是否可靠”变成可以观测的产品状态,而不是沉默地改写历史。

不过论文没有公开 architecting、anticipation 和 compaction validation 的核心机制。作者报告 anticipatory retrieval 在 clients 上持续达到 60%+ hit rate,但没有给出数据集、hit 定义、延迟收益或额外计算成本。这部分目前更像产品声明。

92% 和 93.2% 应该怎么读

Synap 在 LongMemEval 的完整 500 题上得到 92.0%,即 460/500;在 LoCoMo category 1–4 上得到 93.2%。回答模型和 judge 都是 gpt-5-mini(Table 2,PDF 第 14 页)。

分项结果比总分更有信息。LongMemEval 的 single-session user、preference、knowledge update、temporal reasoning 都是 100%,single-session assistant 是 87.5%,multi-session 只有 75.2%(PDF 第 15 页)。最难的仍是跨 session 拼接信息,这恰好说明 context lifecycle 没有把 reasoning sufficiency 自动解决掉。

LoCoMo 结果排除了 adversarial category 5,因为它测试不可回答问题上的 abstention。作者说明这是原论文、Mem0 和 Zep 使用的惯例,但也承认 category 5 的处理会让 headline score 变化 10 个点以上。

论文没有做统一配置下的 vendor head-to-head。Table 3 只是并列各家自报数字,answer model、judge 和数据处理都不同。per-run answers、retrieved context 和 judge verdicts 目前 available on request,并未随论文完整公开。

论文也没有测生产负载下的 latency、每题 token cost、context 增长后的精度衰减,以及多租户隔离攻击。它在这些维度上提出了设计论点,还没有给出对应的系统证据。

对 Harness 产品,我会把 memory 改成一组可观测决策

如果我要把 ACM 用到 Harness 设计里,我不会先买一套“全功能 memory platform”,而会先给 context loop 补一张决策账单。

每次写入记录:原始证据是什么,抽取了哪些字段,漏掉或合并了什么,属于哪个 scope,保留多久。

每次读取记录:为什么召回这些内容,来自哪个 scope,占了多少 token,有没有缺失完成任务所需的 bridge evidence。

每次压缩记录:删了什么,哪些事实要求原文保留,验证问题是什么,压缩后失败时怎么回退。

每次任务结束再看:最终错误来自没有写进去、没有取回来、取回但没放进 context,还是模型看见了仍然推错。只有把这四类失败拆开,memory 产品才不会把所有问题都归到 retrieval recall。

我也会补三类小实验。

  • 用相同模型和任务,分别跑 full append、固定窗口、普通 summary、带验证 compaction,画出 success、token、latency 三条曲线。
  • 做 scope canary:故意在两个用户、两个组织里放入相似但冲突的信息,检查是否越权召回。
  • 为多跳任务标注最小 evidence set,不只测 top-k 命中,而是测完成推理所需证据是否全部进入 context。

这篇论文最有价值的地方,是给 context engineering 提供了一张比“向量库 + summary”更完整的地图。它最需要谨慎的地方,是 reference implementation 的关键机制仍然专有,效果主要来自产品方自报,生产维度又尚未测量。

我会保留它的五个问题,也会继续追问每个问题的可观测指标。Context management 真正成熟的标志,不是系统声称自己能记住,而是当 Agent 忘了、串了、压错了或花太多 token 时,我们能准确知道是哪一个生命周期决策出了问题。