更新于

长上下文召回能力横评:主流模型谁在"吹牛"


厂商公布的上下文窗口数字一年比一年大——32K、128K、200K,甚至到了 100 万 token。但”能接收多长”和”能记住多少、用得对不对”是两回事。本文不重复讲 Needle-in-a-Haystack 的测试原理(这部分可参考 NIAH 实测方法与结果解读),而是聚焦一个更实际的问题:在同一套横向对比标准下,主流模型的长上下文召回能力到底差多少,衰减规律是什么样的

免责声明:本文涉及的具体分数为行业公开测试与社区评测的量级整理,不代表任何厂商官方数据,仅作横向对比参考,请以实际业务场景测试为准。

一、为什么”上下文窗口”和”召回能力”要分开看

上下文窗口是一个硬件/架构指标:模型的注意力机制和位置编码方案能否处理这么长的输入序列。召回能力是一个效果指标:在这么长的输入里,模型能不能准确定位并使用某个具体信息。

两者不是线性关系。常见的几种偏差模式:

  • 窗口够大,但中段丢失:经典的”lost in the middle”现象——文档开头和结尾的信息召回率高,中间部分显著下降
  • 单针召回好,多针召回差:只测一条孤立信息时表现很好,但如果需要同时召回并综合多条分散信息,正确率大幅下滑
  • 格式敏感:同样的信息,放在结构化表格里比放在自然语言段落里更容易被召回
  • 干扰项敏感:haystack 中如果包含与 needle 主题相近的干扰句,召回率会明显下降,这比纯随机文本背景更接近真实业务场景(比如从多份相似的合同里找一条条款)

单纯看”支持 100 万 token”这个数字,完全无法判断这些偏差模式是否存在。

二、横评设计:四个维度

为了让对比有意义,横评需要控制变量。以下是一套可复现的设计思路:

维度具体设置目的
上下文深度10% / 30% / 50% / 70% / 90% 位置插针检测位置偏差
上下文长度8K / 32K / 128K / 500K / 1M token检测长度衰减曲线
针的数量单针 / 3 针分散 / 3 针需综合回答检测多信息整合能力
干扰强度无干扰 / 同主题干扰句检测抗噪能力

真正拉开模型差距的往往不是”单针在 8K 里能不能找到”(这个几乎所有主流模型都能做到接近满分),而是长度拉到窗口上限附近、且需要多针综合的组合场景。

三、几个行业观察(基于公开评测量级)

以下结论综合自公开的评测报告和社区复现结果,具体分数会随模型版本更新变化,重点看相对差距和规律而非绝对数字:

观察一:单针召回已经不是差异化指标。 目前主流一线模型(Claude、GPT、Gemini 系列)在标准单针 NIAH 测试上普遍能做到 95% 以上,这项测试的区分度已经很低,不适合作为选型依据。

观察二:多针综合是真正的分水岭。 当需要同时召回 3 条分散信息并综合回答时,各模型的分数开始明显拉开,部分模型会出现 20–30 个百分点的下降。这更接近真实业务场景——比如”从这份 200 页的年报里,找出三次提到营收指引的地方,并判断是否前后矛盾”。

观察三:窗口上限附近的表现普遍打折扣。 不管厂商宣称支持多长的上下文,实测中,接近窗口上限(比如声称支持 100 万 token,实测在 80–100 万区间)的召回准确率往往比窗口中段(比如 30–50 万)更低。这意味着”能用”和”好用”之间有一个安全余量,实际生产场景不建议长期跑在窗口上限附近。

观察四:中文长文档的召回率普遍低于英文。 在同等 token 长度下,中文文档(尤其是包含大量专有名词、古文引用或代码混排的场景)的召回准确率通常比纯英文场景低几个百分点,这和训练语料的语言分布有关。

关于具体某个模型的 1M 上下文实测数据,可参考 Claude Opus 1M 上下文真实测试Claude 1M 上下文使用指南

四、常见的评测陷阱

做横评或者看别人的横评结果时,容易踩这几个坑:

陷阱一:不同模型用不同的 haystack

如果 A 模型测试用的干扰文本是维基百科条目,B 模型用的是小说,两者的召回难度天然不同。公平对比必须用完全相同的 haystack 文本和插针位置

陷阱二:忽略输出长度限制

有些”召回失败”其实是模型输出被截断导致的,不是真的没找到信息。测试时要确认 max_tokens 设置足够大,且检查是否命中了模型的输出长度上限。

陷阱三:把”一次性通过”当作稳定表现

长上下文任务的输出具有一定随机性,同一个 prompt 跑 5 次,分数可能波动 5–10 个百分点。可靠的横评应该多次采样取平均,单次结果不能代表真实水平。

陷阱四:忽略成本维度

100 万 token 的输入,即便召回率很高,单次调用的成本和延迟也可能高到不适合生产环境。召回能力横评应该和 长文本处理的 token 成本 一起看,脱离成本谈”哪个模型长上下文最强”意义有限。

五、自建横评的最小实现思路

如果想针对自己的业务场景(而不是通用 haystack)做横评,可以按这个思路搭一个最小版本:

1. 准备业务真实文档(脱敏后),而不是通用背景文本
2. 在文档不同位置插入 3-5 条业务相关的"针"信息
   (比如合同里的违约条款、财报里的关键数字)
3. 设计需要综合多条针才能正确回答的问题
4. 对每个候选模型,固定 prompt 模板和 temperature,跑 5 次取平均
5. 记录:准确率 + 平均延迟 + 单次调用成本
6. 按业务场景权重,给准确率/延迟/成本加权打分

这套流程比直接套用公开 benchmark 更有参考价值,因为它反映的是你的文档类型你的问题模式下的真实表现,而不是通用测试集的表现。

六、给不同场景的选型建议

  • 单据/合同关键信息提取(信息量小,位置固定):主流模型都能胜任,优先看成本和延迟
  • 长会议纪要/客服记录摘要(信息分散,需要多点综合):优先选多针召回测试中表现稳定的模型,必要时结合 RAG 方案 分段处理,不要完全依赖单次超长上下文
  • 代码库级别的问答(结构化强,但上下文极长):可以参考 向量数据库对比,用检索增强而非纯堆上下文的方式降低成本和提升准确率
  • 法规/年报等严肃文档分析:务必自建横评(第五节的方法),不要直接信任厂商宣传的窗口大小

七、相关阅读

想横向测试不同模型在长上下文场景下的真实表现,YoTradeApi 提供 Claude、GPT、Gemini 等主流模型的统一 API 中转,一套 key 即可快速搭建自己的横评脚本。