跳到主要内容

长上下文推理越跑越贵?On-Demand Attention 让模型「需要时才回看历史」

长上下文和 Agent 推理贵,根因之一是全注意力每生成一个 token 都要重读不断变长的历史。arXiv 新论文 On-Demand Attention(ODA)默认用局部注意力,靠一个轻量『召回头』预测『这一步要不要回看全局』,只在有用时才触发全局读取。从接入方视角看,它是同档模型下不同供应商『每 token 成本/延迟』会拉开差距的隐性变量。

  • LoopRouter
  • 5 分钟阅读
长上下文推理越跑越贵?On-Demand Attention 让模型「需要时才回看历史」

本文基于 arXiv 论文《On-Demand Attention: Language Models Know When to Recall》(2026-09-17 提交)的公开摘要整理与二次分析,加入 LoopRouter 的接入/成本视角;原文见文末链接。文中不含摘要之外的量化数字,具体收益请以完整论文与自有负载复测为准。

一句话结论:长上下文和 Agent 推理越跑越贵,一个被忽视的根因是——全注意力(full attention)每生成一个 token 都要重读一遍不断变长的历史,哪怕这次根本用不上。arXiv 新论文提出的 On-Demand Attention(ODA)换了个思路:默认只用局部注意力,靠一个轻量的「召回头(recall head)」预测「这一步到底要不要回看全局」,只在有用时才触发全局读取。它只训练召回头、不动预训练权重、完整历史 KV 缓存照留,在 Qwen 和 Gemma 上「基本补回了纯局部注意力丢掉的效果,同时大幅减少全局读取次数」。对只做 API 接入的团队,这不是要你自己改推理,而是提醒你:同一档模型、同样的长上下文,不同供应商的「每 token 成本/延迟」会因为这类优化而拉开差距。

长上下文为什么是成本黑洞:每一步都在重读整段历史

大模型逐个生成 token 时,标准的全注意力解码会在每一步都把已经生成的全部历史(KV 缓存)重新读一遍,再决定下一个 token。上下文越长,这份历史越大,单步读取的开销就越重——而且它随生成步数持续累加。

问题在于:这份「每步都重读全局」的开销,很多时候并没有换来更好的预测。 论文的出发点正是这一点——推理和 Agent 类负载天生就是长上下文(长文档、长链推理、多轮工具调用),于是「无差别重读历史」成了长上下文推理最直接的成本来源之一。

一句话:贵的不只是模型本身,还有在长历史上反复做的、边际收益递减的全局读取。

ODA 的核心:默认局部,按需召回全局

ODA(On-Demand Attention)是一种「局部优先(local-first)」的解码方法,思路可以拆成三步:

  1. 默认只看局部。 大部分解码步不去读整段历史,只用局部注意力,先把最便宜的路径走通。
  2. 用『召回头』预测要不要回看。 论文的关键发现是:模型在做全局读取之前,它的解码状态里就已经藏着「这次回看历史值不值」的信息。ODA 训练一个轻量的召回头(recall head)来读出这个信号。
  3. 只在有用时触发全局读取。 当召回头预测「这一步回看全局收益高」时,才真正调用全局注意力;收益低就跳过。触发与否随生成过程动态变化。

最省事的一点是它的「加装」姿态:ODA 只训练召回头,预训练权重保持不变,完整的历史 KV 缓存也全部保留。也就是说,它不是重训一个新模型,而是给现成模型加了一层「要不要回看」的决策开关。

它和「砍历史」的稀疏注意力,不是一回事

一提到「减少全局读取」,很容易联想到局部/稀疏注意力或 KV 缓存驱逐(cache eviction)——但那些方法通常是永久性地丢掉一部分历史:砍掉了、删掉了,后面就算需要也回不来。

ODA 的差别在于「可回收」:

维度纯局部 / 缓存驱逐On-Demand Attention
历史处理直接裁剪或删除远处历史完整 KV 缓存始终保留
全局读取要么全读、要么读不到按需触发,可随时召回
决策依据固定规则(窗口/位置)召回头对「本步收益」的预测
代价丢信息换速度,精度可能掉用轻量预测头换「少读又不丢」

正因为历史没被丢,ODA 才能「基本补回纯局部注意力丢掉的效果」——它省的是没必要的重复读取,而不是省掉信息本身。

落地信号:在 vLLM 里做 GPU 端条件执行

一个技术方法能不能真省钱,关键看「少算」能不能变成「真快」。ODA 在这点上给了具体落地证据:

  • 工程实现:作者在 vLLM 里实现了 GPU 端的条件执行(conditional execution),把「少做几次全局读取」在长上下文下转成真实的解码加速,而不只是理论上的 FLOPs 下降。
  • 验证范围:在 Qwen 和 Gemma 系列上测试,包括混合注意力(hybrid-attention)骨干。
  • 效果结论(定性):选择性召回「基本补回了纯局部注意力损失的效果,同时大幅减少全局读取次数」。

需要诚实说明的是:论文摘要没有给出统一的加速倍数、省钱百分比或具体基准分数(完整论文 28 页、5 张图,细节在正文里)。所以别把它当成「一开就省 X%」的通用结论——收益取决于上下文长度、负载类型和召回触发频率,真实数字要看完整论文,并在自己的负载上复测。

对做 API 接入的团队意味着什么

如果你不自建推理、只通过 API 用模型,ODA 这类工作不需要你亲自实现,但它改变了一件事的判断方式:长上下文场景下,「同一档模型」在不同供应商那里的性价比可能并不一样。

给接入 / 路由层的三点实操建议:

  • 把长上下文单独看待。 短提示和长上下文(长文档问答、长链推理、Agent 多轮)的成本曲线完全不同。真正拉开供应商差距的,往往是后者——因为长上下文正是这类推理优化收益最大的地方。
  • 把「长上下文优化」当成比价维度。 选型时除了看标价,还值得关注:谁在长上下文推理上做了 ODA 这类优化、在长输入下的实际延迟和吞吐如何。同一模型不同后端,长上下文的「每 token 成本/延迟」可能差出一截。
  • 让路由按上下文长度分流。 短请求走成本最优的通道,长上下文请求走「长历史更省、更稳」的通道——把这种差异变成路由规则,而不是全都发给同一个后端。这正是 LoopRouter 这类统一接入层应该替你抹平的复杂度:你写一次调用,由接入层根据请求特征选到当下最划算、最稳的那条路。

落地一句话:ODA 提醒我们,长上下文推理的成本不是一个固定标价,而是随「历史读了多少次」浮动的变量;对接入方来说,与其自己折腾推理,不如把「长上下文场景下谁更省、更稳」纳入路由与比价的常规维度。


原文:On-Demand Attention: Language Models Know When to Recall(arXiv,2026-09-17)。本文为基于公开摘要的原创整理与分析,非原文翻译。

常见问题

On-Demand Attention 和普通的稀疏/局部注意力有什么区别?
关键差别是:它不永久丢历史。传统局部注意力或 KV 缓存驱逐会把远处的历史直接砍掉或删掉,信息一去不返;ODA 默认只用局部注意力,但完整的历史 KV 缓存始终保留着,由一个轻量『召回头(recall head)』判断某一步是否值得回看全局,需要时随时召回。所以它是『按需、可回收』的全局读取,而不是一次性裁剪。
它到底能省多少推理成本?
论文摘要给出的是定性结论——在 Qwen 和 Gemma 系列上,选择性召回『基本补回了纯局部注意力丢掉的效果,同时大幅减少全局读取次数』,并在 vLLM 里通过 GPU 端条件执行把『少读』转成真实加速。但摘要没有给统一的加速倍数或省钱百分比;收益强依赖上下文长度、负载类型和触发频率,具体数字要看完整论文并在自己的负载上实测,不能当通用值引用。
用 ODA 需要重新训练整个模型吗?
不需要。论文明确 ODA『只训练召回头,预训练权重保持不变』,完整历史 KV 缓存也照常保留供后续召回。这意味着它是加在已有模型上的一层轻量决策组件,而不是重训一个新模型。
我只做 API 接入、不自建推理,了解这个有什么用?
因为它是供应商压低『长上下文每 token 成本/延迟』的手段之一,直接影响你在长上下文场景下买到的价格和速度。你不必自己实现,但选型和路由时可以把『谁在长上下文推理上做了这类优化』当成一个比价维度——这正是接入层该替你比较的东西。
这套方法对短提示也有用吗?
收益主要集中在长上下文。短提示本身历史就短,全注意力每步重读的开销有限,能省的空间不大;上下文越长、生成越久(比如长文档问答、长链推理、Agent 多轮),『默认局部 + 按需召回』省下的重复全局读取才越可观。

相关推荐

DeepSeek V4.1-Flash 参数翻倍却更省:一文看懂 KV Cache 重构如何压低长上下文推理成本

DeepSeek V4.1-Flash 参数翻倍却更省:一文看懂 KV Cache 重构如何压低长上下文推理成本

DeepSeek V4.1-Flash 主干参数从 284B 涨到 552B,推理成本却不升反降。关键在于对 KV Cache 的系统级重构:CED 架构、跨层共享 KV、FP4 量化,把百万 Token 场景下的显存降到上一代的 1/4 到 1/8。本文拆解方法与数据,并从模型选型角度分析:为什么长上下文 Agent 的真实成本不能只看每 Token 单价。

Agent 时代的模型选型:为什么只看 token 单价会算错账

Agent 时代的模型选型:为什么只看 token 单价会算错账

Gemini 3.8 Flash 单价没涨,单任务成本却涨了 40%。Agent 模型的真实开销 ≈ 单任务累计生成 token 数 × 单价,速度只决定端到端耗时;只盯单价会选错。从企业接入与路由治理视角拆解。