上下文腐烂:把材料塞满窗口之后发生了什么

Chroma 测了 18 个模型。结论:模型不是均匀地处理上下文的。最反直觉的一条——把材料打乱顺序,模型反而表现更好。

2026/08/06约 9 分钟HiBridge 编译
译文本文是英文原文的中文翻译,原作者与原文链接如下。
原作者
Chroma Research
原文标题
Context Rot: How Increasing Input Tokens Impacts LLM Performance
原发布平台
Chroma Research
原发布日期
2025/07/14

译者说明:本文译自 Chroma 的技术报告,原文发表于 2025 年 7 月 14 日。 测试用的是当时的模型(Claude Opus 4、GPT-4.1、Gemini 2.5 等)。具体模型的排名会变, 但「模型不均匀处理上下文」这个结构性结论没有变——站里上下文工程那篇讲的是机制,这篇给的是数据。

什么是「上下文腐烂」

人们普遍假设:模型对上下文的处理是均匀的——第 100 个 token 和第 10,000 个 token 被同等对待。

这个假设不成立。

我们观察到:即使在很简单的任务上,模型表现也会随输入长度显著变化。 我们把这个现象称为上下文腐烂(Context Rot)

我们测试了 18 个模型,涵盖 Anthropic(Claude Opus 4、Sonnet 4、Sonnet 3.7/3.5、Haiku 3.5)、OpenAI(o3、GPT-4.1 系列、GPT-4o、GPT-4 Turbo、GPT-3.5 Turbo)、Google(Gemini 2.5 Pro/Flash、2.0 Flash)和阿里(Qwen3 系列)。

下面是六组实验。

一、问题和答案越不像,越容易漏

「大海捞针」(Needle in a Haystack)是最常用的长上下文测试:在一大段无关文本里藏一句话,然后提问。

但标准测试用的是词面高度重合的针和问题,这掩盖了真实情况。我们构造了语义相似度不同的针-问题对(用五个嵌入模型算余弦相似度)来测。

结果:相似度越低的组合,随长度增长而衰减得越快。

在短输入下,所有相似度层级的表现都不错。但输入一长,低相似度的那些失败率明显上升。

这一条的现实含义:如果你问的问题和材料里的原话用词接近,它能找到; 如果你用自己的话问,而材料里是另一套说法——比如你问「价格敏感」, 受访者说的是「太贵了买不起」——材料越长,它越可能漏掉。

二、干扰项:一个就够,四个更糟

从高相似度的针-问题对开始,我们往材料里加入 0 个、1 个、4 个主题相关的干扰项——看起来像答案但不是答案的内容。

结果:

  • 加一个干扰项,表现就低于基线
  • 加四个,衰减进一步叠加
  • 干扰项的影响不均匀——有些干扰项造成的失败率明显高于其他

模型之间的差异也很明显:

模型家族 遇到干扰项时的行为
Claude 幻觉率最低。Opus 4 和 Sonnet 4 在不确定时会弃答
GPT 幻觉率最高,会生成自信的错误答案

这一条对做研究的人特别重要。 你的材料天然充满干扰项—— 十份访谈里有八份提到了价格,只有一份说的是你要的那种价格问题。 这正是干扰项实验的现实版本。

三、反直觉的一条:针和材料越像,越难找

我们测了两种情况:针的主题与材料一致(比如在论文堆里藏一句论文风格的话),和针与材料无关。

结果出人意料:当针不与材料在语义上混为一体时,模型表现更好。

在 Paul Graham 的散文集里,藏一句 arXiv 论文风格的针,表现优于藏一句散文风格的针。

含义:一句和周围文字风格一致的关键陈述,比一句突兀的陈述更容易被漏掉。 这解释了为什么访谈稿里那句真正重要的话常常被跳过——它和周围三百句话长得一模一样。

四、最反直觉的一条:把材料打乱,反而更准

我们对比了两种材料:原始的连贯版本(保留逻辑流),和打乱版本(句子随机重排,主题不变)。

「模型在材料保持逻辑流时表现更差。打乱材料、破坏局部连贯性,会持续地提升表现。」

这说明结构本身会在长输入下影响注意力机制

五、重复词任务:连抄写都会出错

这个任务简单到近乎荒谬:给模型一串重复的词,中间插一个不同的词,让它原样复述。

我们在 25 到 10,000 token 的长度区间上,对每种词组合测了 1,090 种变体。

发现:

  • 长度越长,准确率持续下降
  • 那个唯一的词放在越靠前,准确率越高
  • 模型经常少输出或多输出
  • 位置错误随长度增加
  • 超过某个长度之后开始出现输入里根本没有的词——Gemini 大约在 500 token 之后,Claude Opus 4 大约在 2,500 token 之后

具体的失败样貌:

  • GPT-4.1 mini 生成了输入里不存在的 “Golden Golden”
  • Gemini 2.5 Pro 输出高度不稳定,出现乱码
  • Qwen3-8B 在 5,000 词之后开始答非所问
  • Claude Opus 4 有 2.89% 的拒答率,有时以版权为由拒绝

记住这一条:这是一个完全不需要理解、只需要抄写的任务。 连它都会随长度崩坏,那么「从八万字访谈里归纳主题」会崩成什么样,可以自己推。

六、真实对话测试:聚焦 vs 全量

最后一组用 LongMemEval:306 个多轮对话问题,每段对话约 11.3 万 token。两种条件:

条件 输入 内容
聚焦 约 300 token 只给相关的那几段对话
全量 约 11.3 万 token 整段对话历史,含大量无关内容

结果:所有模型家族在两种条件下都出现了显著的表现差距。

Claude Opus 4 和 Sonnet 4 的差距最大——这两个模型在含糊时倾向于弃答。一个具体例子:问 Claude Sonnet 4「过了多少天?」,它回答说历史记录里没有提供日期——而日期就在历史记录里

开启思考模式能改善表现,但没有消除差距。

结论

我们的研究表明,包括 GPT-4.1、Claude 4 和 Gemini 2.5 在内的最先进模型,并不均匀地处理上下文

要点:

  1. 所有被测模型都随输入长度增加而衰减
  2. 任务结构很重要:针的位置、材料的连贯性、干扰项的相关度都会影响结果
  3. 现有的「大海捞针」类基准低估了真实世界的长上下文挑战
  4. 上下文工程——仔细管理信息在提示词里如何呈现——对可靠性至关重要
  5. 即使是最小化的任务,也会在规模上暴露出非均匀的、因模型而异的失败模式

真实应用通常远比这些实验复杂,这意味着这些问题在生产环境里只会被放大。


译后附记:所以该怎么办

这篇的实用价值不在于让你放弃长上下文,而在于告诉你长上下文什么时候会骗你。四条可以直接照做:

① 别一次问一个跨越全部材料的大问题。 第六组实验的结论就是这个:同样的材料,聚焦输入的表现远好于全量输入。 与其把五十份访谈一次性丢进去问「主要痛点有哪些」,不如先分批过一遍每份的要点,再把要点合起来问。多一步,但结果可靠得多。

② 用材料里的原话来问,不要用你的行话。 第一组实验说明:你的问法和材料的说法越不像,越容易漏。所以先扫一眼受访者实际是怎么说的,用他们的词去问

③ 干扰项越多,越要指定范围。 第二组说明一个干扰项就能拉低表现。所以「在第 3、7、12 份访谈里找」远好过「在这五十份里找」。

④ 关键结论不要只问一次。 第五组那个抄写任务的崩坏说明,长输入下的失败是概率性的,不是确定性的。重要的东西换个问法再问一遍,两次结果不一致就是信号。

还有一条给 Claude 用户的好消息:第二组实验里 Claude 的幻觉率最低,不确定时倾向于弃答而不是编。但这也意味着它可能明明有答案却说「没提供」——第六组那个日期的例子就是。所以它说「材料里没有」的时候,值得再确认一次

配套阅读:上下文工程:为什么塞得越多,效果反而越差为什么它在几百页材料里找错了地方从超长文档里提取关键信息


出处

本文译自 Chroma Research,原文 Context Rot: How Increasing Input Tokens Impacts LLM Performance, 发表于 2025 年 7 月 14 日。译文与译后附记由 HiBridge 撰写。