长上下文不可强求:从 Gemini 到 Opus,1M context 为什么还没体现出应有价值

0 阅读9分钟

长上下文不可强求:从 Gemini 到 Opus,1M context 为什么还没体现出应有价值

摘要

过去一年,long context 一直是大模型产品最容易被拿来宣传的能力之一。32K 不够,就上 128K;128K 还不够,就上 1M。看起来,只要上下文窗口足够大,agent 就能记住更多历史、读取更多代码、处理更长文档,最终自然变得更强。

但真实使用里,事情并没有这么简单。

无论是 Gemini 系列的超长上下文承诺,还是最近围绕 Opus / Claude Code / 1M context 的讨论,用户反复遇到的都不是“窗口不够大”,而是另一类问题:上下文越来越长,但收益并没有按比例增长;有时甚至更贵、更慢、更不稳定。

这背后的核心判断其实很朴素:long context 是 capacity,不是 intelligence;是容器,不是方法。 如果 context packing、summarization、memory selection、tool filtering 和 harness 设计没有跟上,1M context 很可能只是把更多噪音、更多旧状态、更多无关轨迹一起装进去。

所以我越来越倾向于一个结论:长上下文可以有,但不可强求。 从 Gemini 到 Opus,1M context 目前并没有稳定体现出它“应有”的工程价值。问题往往不在数字不够大,而在系统不会节制地使用这份容量。


一、1M context 听起来很强,为什么实际体感经常没有预期那么强

从产品叙事上看,1M context 很有吸引力。它给人的想象空间太大了:

  • 一次塞下整本书
  • 一次看完整个 repo
  • 一次带着所有历史会话继续工作
  • 不用频繁摘要,也不用担心“模型忘了”

但这套叙事默认了一个前提:模型和系统知道该把什么放进去,也知道什么不该继续带着跑。 现实往往不是这样。

在真实 agent workflow 里,context 的组成通常非常复杂:

  • 用户原始需求
  • system / policy / safety instructions
  • 历史计划
  • 工具调用记录
  • shell 输出
  • 文件 diff
  • 错误日志
  • 旧的总结
  • memory recall 结果
  • 当前阶段的中间结论

只要其中任意几层没有裁剪好,长上下文就会从“能力增强器”变成“噪音放大器”。

这也是为什么不少开发者在用 Claude Code、Gemini 类长上下文模型或者其他 coding agent 时,会有一种很相似的感受:模型看起来知道得更多了,但任务不一定做得更好。


二、长上下文最常见的误区:把“能装下”误认为“该装进去”

这是我觉得最核心的误区。

模型支持 1M tokens,意味着系统可以把非常多内容塞进去;但这不等于系统应该这么做。工程上,这两者差别极大。

1. 容量不是价值

一个 1M window 的真正价值,不是“终于能把所有东西原样保留”,而是允许系统在必要时:

  • 保留更完整的问题背景
  • 处理更大的代码或文档切片
  • 延缓上下文裁剪带来的信息丢失

但如果系统缺乏良好的选择机制,它往往会退化成另一种行为:

  • 旧计划不清理
  • 旧错误不折叠
  • 工具输出整段回灌
  • 重复文件片段继续累积
  • 过期 memory 继续占位

这时 1M window 不再是 buffer,而是垃圾场。

2. 大窗口会纵容坏习惯

小窗口时代,系统被迫做 compression:摘要、提炼、裁剪、分层。
大窗口来了之后,很多产品会不自觉地偷懒:既然还能塞,那就继续塞。

结果就是,short context 阶段必须正视的问题,在 long context 阶段被推迟了,但没有被解决。等到问题积累到一定程度,用户看到的就是:

  • 单任务 token 消耗飙升
  • latency 增加
  • rate limit 更频繁
  • provider capacity 更紧张
  • agent 更容易 drift

所以,大窗口有时不是解决方案,而是把设计缺陷延后暴露。


三、为什么从 Gemini 到 Opus,1M context 都还没有兑现“应有价值”

这里我不想把问题简单归因到单一模型,因为现象跨产品都存在。

Gemini 早就把 long context 作为核心卖点之一;Opus / Claude Code 近期围绕 1M context 也引发了很多讨论。用户的共同反馈大致集中在几件事上:

  • 更长上下文不自动等于更高质量输出
  • 长任务里 token 烧得更快
  • 任务越长,越容易累积无关历史
  • 稳定性和速度未必变得更好
  • 当 provider capacity 紧张时,long context 反而更像成本放大器

这些现象并不意味着 1M context 没有价值,而是说明:现在的大多数 agent harness 还没有把这项能力用好。

换句话说,不是 window 本身失败了,而是“围绕 window 的工程系统”还不成熟。


四、真正的问题,不是 long context,而是 weak context compression

最近有人提出一个很有意思的判断:用户觉得 Claude Code 的 limit 变紧,可能不是平台真的“突然变小气”,而是因为 1M context model 上线后,系统每个请求携带的上下文变胖了,结果同样一个 task 更快烧掉 token 与 capacity。

这个说法是否完全准确,我没有官方证据,不会把它当成既成事实。
但从工程角度看,这个推理非常合理。

因为在 agent 场景里,真正危险的不是 context 太小,而是:

  • compression 不够 aggressive
  • summarization 不够可靠
  • selection 不够精确
  • tool output 过滤不够严格

一旦这些环节做得弱,1M context 就很容易变成 token sink。

也就是说,问题并不是:

为什么我们没有更大的窗口?

而更像是:

为什么我们还在把不该保留的东西继续带着跑?

这个区别很关键。因为前者的解决方案是继续追更大的数字,后者的解决方案则是更好的 context engineering


五、在 coding agent 里,长上下文尤其容易失控

在普通聊天产品中,长上下文的问题还没有那么尖锐。
但一旦进入 coding agent / DevOps copilot / tool-using agent 场景,context 膨胀速度会快很多。

原因很简单:这里的上下文不仅是自然语言,还包括大量“工作轨迹”。

例如一个真实 coding task 里,上下文可能不断加入:

  • 文件树与源码片段
  • grep/search 结果
  • 编译错误
  • 测试失败日志
  • shell command 输出
  • patch / diff
  • 中间计划与自我修正
  • 历史失败尝试

如果 harness 不做强约束,模型每轮都在背着越来越重的背包继续工作。
到后面,系统不是在解决当前问题,而是在努力消化自己的历史残留。

这也是为什么不少关于 harness engineering 的讨论都在强调:真正拉开差距的,不是模型本身,而是 orchestration、context packing、tool loop、validation 和 cache。

从这个角度看,1M context 不是 agent 成功的充分条件,甚至连必要条件都未必是。很多时候,一个 context 更克制、压缩更强、loop 更干净的系统,反而比“大窗口全塞型”系统表现更好。


六、memory 也在放大这个问题:记得太多,不一定等于记得更好

长上下文的另一个常见误解是:既然窗口变大了,那 memory 问题是不是就自动解决了?

恰恰相反,window 变大,可能让坏 memory governance 更难被察觉。

最近一些关于 OpenClaw memory plugins 的讨论,已经把这个问题讲得很清楚:

  • memory 不是单一功能,而是写入、检索、遗忘、维护和治理的组合
  • markdown 或自然语言记忆如果不做分层,很容易变成沉积层
  • 长期运行后,旧偏好、旧计划、旧日志会污染当前决策
  • 真正重要的不是“记住最多”,而是“retrieves narrowly, forgets safely”

这和 long context 的问题本质上是同一个问题:信息容量扩大,不会自动提升信息质量。

如果 memory recall 没有 selection,1M context 只会把更多过时记忆重新注入模型。
所以从系统设计上看,long context 与 memory 不是互补的捷径,而是需要共同治理的两个风险面。


七、长上下文真正需要的,不是更多 token,而是更强 harness

这也是我现在越来越认同的观点:讨论 1M context 值不值得,不能只盯着模型参数表,而要看它所在的 harness。

一个成熟的 harness 至少应该回答这些问题:

1. Context packing

  • 哪些信息必须进当前轮
  • 哪些可以只留摘要
  • 哪些应该直接丢弃

2. Compression

  • 历史轨迹什么时候折叠
  • tool output 如何去噪
  • 长日志是否转成结构化状态

3. Memory governance

  • stable preferences、project state、archive logs 是否分层
  • 过时信息是否有显式废弃标记
  • recall 是否 narrow 而不是粗暴回灌

4. Tool interface hygiene

  • 工具返回是否短、准、结构化
  • 是否把冗长自然语言元数据原样塞回上下文
  • 是否防止 tool metadata 成为 prompt injection surface

5. Budget awareness

  • 单轮 token 预算如何控制
  • 长任务如何避免上下文越跑越胖
  • 什么时候该摘要、什么时候该重启阶段

这些事情做不好,再大的 context window 都只是看起来很强。


八、为什么“长上下文不可强求”反而是更成熟的工程态度

这里的“不可强求”,不是说 long context 没用,也不是说 1M context 不值得追。
我的意思更接近:不要把它当成万能解法,更不要把它当成产品成熟度的替代品。

工程上更成熟的态度应该是:

  • 需要时使用长上下文,但不迷信长上下文
  • 优先提升 context quality,而不是盲目放大 context size
  • 先解决 compression、selection、memory governance,再追更大窗口
  • 把 long context 当作 buffer,而不是兜底垃圾桶

这其实和系统设计里的很多原则一致:

  • 更大的磁盘不等于更好的数据管理
  • 更大的 cache 不等于更高的命中效率
  • 更大的日志保留不等于更强的可观测性

同理,更大的 context window 也不等于更好的 agent intelligence。


结论

从 Gemini 到 Opus,1M context 至少到今天为止,还没有稳定兑现它“应有”的工程价值。
它提供了更大的空间,但空间本身不会自动变成判断力、不会自动变成更优的检索、也不会自动变成更稳的 agent workflow。

真正决定 long context 能不能发挥价值的,不是数字,而是系统:

  • context packing 是否克制
  • compression 是否足够强
  • memory governance 是否分层
  • tool output 是否被严格过滤
  • harness 是否能控制 token、噪音与 drift

所以如果要用一句话总结我的看法,那就是:

长上下文可以有,但不可强求;真正值得强求的,不是 1M,而是更好的 harness。