abc小站

2026-10-27

Agent 的钱,大头花在翻旧账:清华 AKV 想让模型直接改自己的 KV 缓存

清华团队的 AKV 不改聊天记录,只改哪些 KV 缓存对注意力可见:论文自报对比按阈值摘要的基线,平均成本 -27.7%、分数 +1.7。

一

先说一个数字。

82.4%。

这是清华(外加一位港中文作者)的一篇论文里算出来的:在他们的成本分析里,KV 缓存读取,占了 API 总成本的 82.4%。

注意,这是论文自己的测算,而且论文里的成本,是按公开价格估算出来的 API 等效值,不是谁家真实的账单。

但哪怕打个折看,这个比例也很说明问题。

说白了就是,Agent 花的钱,大头不在“想”,在“翻旧账”。

为什么?

因为 Agent 干活,是一轮一轮来的。

每一轮,它都要把前面所有的聊天记录、工具返回、试错日志,从头到尾再过一遍。

活干得越久,旧账越厚。

旧账越厚,每一轮翻账的钱就越多。

二

那为什么不把旧账整理一下?

整理了。

业内这几年最流行的做法,叫上下文工程(context engineering):聊天记录太长了,就做个摘要,或者干脆截掉一段。

听上去很合理。

但问题是,这里面有个坑。

模型推理的时候,前面算过的东西,会存成 KV 缓存,下一轮直接复用,不用重算。

可这个缓存,认的是前缀。

你只要改了前面一个字,后面所有的缓存,全部作废,得重新 prefill,重新算,重新付钱。

所以你会看到一个很九转大肠的局面:

想省钱,就得整理记录;

一整理记录,缓存就废了,反而更费钱;

于是各家的 harness 只好憋着,憋到实在装不下了,才很晚、很粗暴地做一次摘要,中间的细节一刀切掉。

省钱靠憋,憋不住了就砍。

这哪是工程,这是硬扛。

砍掉的代价是什么?

举个假设的场景。

假设一个 Agent 在修 bug,前面试过一个方案,失败了,失败的原因写在一大段日志里。

后来上下文装不下,这段日志被摘要成一句话:“尝试过若干方案,未果。”

再往后,它很可能会把那个失败的方案,原封不动地再试一遍。

钱花了两次,坑踩了两次。

冒昧了,这种事,用过 Agent 的人大概都见过。

三

清华和港中文的这个项目叫 AKV,论文名叫《Cache Engineering for Agents》,arXiv 编号 2610.28577,代码在 GitHub 的 thu-nics/AKV,Apache-2.0 协议,基于 SGLang。

它的思路,一句话:

聊天记录一个字都不改,只改哪些 KV 条目对注意力“可见”。

站内 10-25 那篇 LangChain Deep Agents 讲的是在文本层收拾上下文,这篇是在 KV 层动手。

AKV 定义了三种操作:

Append,就是正常往后追加。

Drop,把指定的条目从后续的注意力里拿掉,但位置不动。

Repos,用 RoPE 旋转,把留下来的 key 重新排到 0 到 r-1 的位置上;value 不变,也不用重算。

打个比方。

文本层的做法,是把账本撕掉几页,再誊抄一份新的。

AKV 的做法,是账本不动,在不想看的那几页上贴张条“这页跳过”,必要的时候,再把剩下的页码重新编一遍。

账本还是那本账本,缓存也就还能用。

四

光有想法不够,服务端得接得住。

据论文和仓库说明,AKV 在服务端做了两件事:

一是扩展了 SGLang 的 radix tree,加上 drop 和 reposition 节点。这样一来,同样的 token、但操作历史不同的两段缓存,就不会被错当成一回事拿去复用。

二是用 segment-batch attention,一次 prefill 就能恢复被驱逐的状态。

对开发者来说,接口长这样:无状态,兼容 OpenAI 的格式,只多了两个可选字段,drop_message 和 reposition。官方给的例子是:

{"drop_message":{"4":[2]},"reposition":[4]}

再往上,还有两层封装。

CachePolicy,可以按轮次、按 token、按模型来触发清理。

CacheTool,更有意思,它让模型自己调用 drop_context,自己决定忘掉什么。

讲道理,让模型自己决定“哪些旧账可以不看了”,这个权力交出去,是一件需要想清楚的事。好处是它最懂自己在干什么,风险是它也可能把后面要用的东西提前扔了。

五

好,算账时间。

以下全部是论文自报的数字。

实验是 3 个模型(GPT-OSS-120B、MiniMax-M2.7、MiroThinker-1.7-Mini)乘 4 个基准(BrowseComp-Plus、GAIA-Text、SWE-bench Verified、xbench-DeepSearch-2510)。

对比的基线叫 Standard,也就是上下文涨到阈值才做摘要(GPT-OSS-120B 和 MiniMax-M2.7 是 96K,MiroThinker 是 192K)。和它比,AKV 平均成本 -27.7%,分数 +1.7。

还有一条基线叫 Text Engineering,把摘要阈值压到 48K,勤快地在文本层整理。和它比,AKV 平均成本 -21.9%。

AKV 在 BrowseComp-Plus 上的单任务成本拆分
来源:AKV 官方项目页。BrowseComp-Plus 单任务成本拆分(美元,API 等效估算),作者自报

举一组:GPT-OSS-120B 在 SWE-bench Verified 上,和 Standard 比,单任务成本从 20.0 美分降到 9.7 美分,分数从 40.0 到 43.2。

输的一组也写出来了:MiniMax-M2.7 在 BrowseComp-Plus 上是 58.9,比 Text Engineering 的 62.3 低 3.4。

延迟方面,论文给的并发 16 那一档,P95 延迟从 Standard 的 229.90s 降到 30.63s。

单看 Repos 这一招(消融实验,只跑了前 100 道题),GPT-OSS-120B 在 BrowseComp-Plus 上从 55% 到 62%。

我比较欣赏的一点是,论文把输的那一组也摆出来了。

这年头,敢把自己最难看的成绩放进正文的论文,不多。

但也要冷静:这些成本都是按 Groq、MiniMax 等公开价格算出来的 API 等效估算,不是生产环境里跑出来的真金白银;分数也都是作者自己测的,还没看到第三方复现。

六

最后,问一个按计算器按到冒烟的问题:

这钱,省给谁了?

先看门槛。据仓库说明,AKV 目前只支持 Qwen、GPT-OSS、MiniMax-M2 这几类文本模型。论文实验用的是 8×A800-80GB,quick start 用 2 张卡跑 GPT-OSS-120B。

也就是说,这是给自己部署推理服务的人准备的。

你要是只调闭源模型的 API,KV 缓存在人家机房里,你够不着。

当然,闭源厂商以后会不会在自己的服务里用上类似的思路,那是另一回事。论文里没说,我也不替人家说。

能确定的只有一点:开源、能自己部署,这件事的价值,又多了一条理由。

所以我的看法是(这是我的推断,不是论文的说法):

短期内,能直接吃到这口肉的,是自己跑开源模型的团队,以及做推理服务的厂商。

对前者,省下来的是自己的算力和电费。

对后者,省下来的成本,最后是让利给用户,还是留在自己的毛利里,就看竞争够不够激烈了。

而对普通开发者来说,这件事最大的意义,也许是换了一个问题的问法:

过去大家问的是,聊天记录太长了,怎么删?

AKV 问的是,聊天记录可以不删,模型能不能学会不看?

删,是要付钱重算的。

不看,可以不用。

省钱的尽头,原来是学会忘记。

来源:arXiv 2610.28577 论文;GitHub 仓库(Apache-2.0);官方项目页。82.4%、-27.7%、-21.9%、P95 延迟等均为论文作者自报;成本是按 Groq、MiniMax 等公开价格算的 API 等效估算,不是真实账单;Repos 的 55%→62% 来自只跑前 100 题的消融实验;支持模型与部署要求据仓库 README;“这钱省给谁了”为作者推断。