上下文工程 · 17 · 超大 Context 的边际成本

2 阅读8分钟

系列第 17 篇。主文档见 智能体上下文工程实现.md

Anthropic 推出了 1M token 上下文(Opus 4.7 [1m] 模式)。但"窗口更大"不等于"问题消失"。这一篇讲超大 context 下被忽视的成本曲线、退化现象,以及该不该用 1M 模式的决策依据。


0. 1M context 不是免费午餐

很多人误以为:窗口从 200k 涨到 1M,就可以"什么都塞进去"。实际不是。

超大 context 带来三个新问题:

  1. 价格非线性:1M 模式单 token 成本通常显著高于 200k 模式
  2. 延迟非线性:处理 800k token 的请求比处理 100k 慢得多(不是 8 倍,是 12-20 倍)
  3. 质量非线性:context 越长,"中间内容遗忘"现象越明显

把这三条放一起看,超大 context 不是默认选择,是特殊场景的工具


1. 价格曲线

Anthropic 1M context 模式(截至 2026/05)的定价大致:

区间价格倍数
0-200k token基准价
200k-1M token基准价 × 2(input)

意思:超过 200k 的部分单价翻倍。所以塞到 800k 的请求,比塞 200k 贵 7 倍(不是 4 倍)。

cache 在 1M 模式下仍生效,但 cache 写入成本也按新价计。一次 cache miss 在 1M 模式下的损失是 200k 模式的几倍。

1.1 实际成本计算

def estimate_cost(input_tokens, output_tokens, cached_tokens, mode):
    if mode == "200k":
        in_price, cache_price, out_price = 0.015, 0.0015, 0.075  # per 1k
    elif mode == "1m":
        in_price = 0.015 if input_tokens <= 200_000 else 0.030
        cache_price = in_price / 10
        out_price = 0.075 if input_tokens <= 200_000 else 0.150

    uncached = input_tokens - cached_tokens
    cost = (uncached * in_price + cached_tokens * cache_price + output_tokens * out_price) / 1000
    return cost

数字是示意,实际以 Anthropic 价目表为准。但结论稳定:超过 200k 的部分单价跳档。

1.2 一个直观对比

任务:读取整个 100 文件的项目并回答一个问题。

策略tokens成本(示意)
1M 模式:全读800k$$$$$
200k 模式 + 多轮 grep + read50k × 5 轮 = 250k$$
200k 模式 + 子 agent 探索30k 主 + 子 agent 几次$$$

第一种最省事(一次性塞进去),但贵 5-10 倍。第二种最省钱但要更精细的 prompt 工程。第三种平衡。


2. 延迟曲线

延迟增长比成本更陡峭。

实测(基于 Opus 4.7):

input tokenstypical latency
10k2-4 秒
50k4-8 秒
200k15-25 秒
500k60-90 秒
800k120-180 秒
1M180-300 秒

1M 输入的请求可能要等 5 分钟才出第一个 token。这不是"用户能等"的体验。

2.1 延迟的根因

  • attention 复杂度:理论 O(n²),实际经过 flash attention 等优化降到准线性,但仍比短 context 慢得多
  • KV cache 大小:占 GPU 内存,更大 → 调度更难
  • prefill 阶段:在生成第一个 token 前要"读完"整个输入

2.2 streaming 也救不了 prefill

streaming 让 output 边生成边显示。但 prefill 阶段(处理输入)没法 streaming —— 必须读完整个输入才能生成第一个 token。

所以即使你看到"output 流畅出",前面已经等了几十秒到几分钟。1M 模式下这个等待是不可避免的。


3. "lost in the middle" 现象

这是超大 context 最隐蔽的问题:模型对中间位置的内容关注度降低

实验验证(多模型、多任务一致):

内容位置                  注意力强度
──────────────────────────────────
开头(前 10%)            高
开头-中间                 中
中间(30-70%)            低     ← 容易被忽略
中间-结尾                 中
结尾(后 10%)            高

放在中间的关键事实,模型可能"看到了但没用上"。

3.1 在 200k context 里也存在

不是 1M 才有的问题。在 200k context 里"lost in the middle"已经出现。但 1M 时严重得多 —— 中间区域占比更大,被忽视的内容也更多。

3.2 工程后果

如果你把 800k 的项目代码塞进 1M context 让模型回答问题:

  • 关键文件在中间 → 模型可能没真正理解
  • 输出看起来合理 → 你以为它读懂了
  • 实际是基于开头和结尾的内容 + 模型先验 hallucinate 出来的

这是最危险的失败模式:看起来对、实际错


4. 1M 模式何时值得用

不是所有任务都不该用 1M。值得用的场景:

4.1 单文件超大但密集相关

  • 一个 800k 的合同 PDF,每段都可能相关
  • 一个超长的 log 文件需要找跨段关联
  • 一份完整的代码库做整体安全审计

这些任务没法切(切了就丢了关联),且每段都重要(不是只看开头结尾)。

4.2 超长会话不切的场景

  • 用户在做长篇创作,之前的所有上下文都重要
  • 某些角色扮演场景需要完整对话史

但即使这些,也建议主动压缩(参见 07 篇)而不是裸 1M。

4.3 不值得用 1M 的场景

  • 代码库探索(用 grep + Read 更省)
  • 多文档问答(用 RAG 或 sub-agent 更省)
  • 通用编程任务(200k 模式 + 多轮足够)

5. 替代方案:把"大输入"变"小请求"

大多数 1M 想解决的问题,可以用其他方式解决:

5.1 RAG(检索增强)

用户问题 → embed → 检索相关段 → 只把相关段塞进 context

适用:

  • 文档库
  • FAQ
  • 大型知识库

200k context + 5k 检索结果 = 比 1M 全塞便宜十倍。

5.2 子 agent 隔离

参见 03 篇。子 agent 用自己的 context 读 800k,主 agent 只收摘要。

5.3 多轮 grep + read

参见前几篇。代码库不要全读,定位 + 精读。

5.4 切分 + 接力

参见 14 篇。长任务跨多个会话,每个会话上下文可控。


6. cache 在 1M 模式的特殊性

cache 仍然工作,但有几点要注意:

6.1 cache 写入更贵

cache 写入价格 ≈ input 价格 × 1.25。1M 模式下 input 单价已翻倍,cache 写入也翻倍。

第一次建立 cache 的成本特别高。所以1M 模式下尽量复用 cache,避免反复建立

6.2 cache 命中收益更大

成本翻倍的同时,cache 命中折扣仍是 1/10。所以命中一次省的钱比 200k 模式多。

但前提是真的命中。1M 模式下 cache miss 的惩罚比 200k 严重得多。

6.3 cache breakpoint 选位置更难

200k 模式下 4 个 breakpoint 比较奢侈,1M 模式下更稀缺。每个 breakpoint 该放在哪里需要更精细的设计。


7. 如何决定用不用 1M

决策树:

任务最大输入预计多大?
├─ < 100k → 200k 模式
├─ 100k-200k → 200k 模式
├─ 200k-500k
│   ├─ 内容可切分?→ 200k + 分批
│   └─ 不可切分 → 1M
└─ > 500k
    ├─ 内容可切分?→ 强烈建议切分
    └─ 不可切分 → 1M(接受高成本和延迟)

关键判断:内容可切分性。如果可切分(多文档、可独立段落),就别上 1M。

7.1 用户感知

如果是交互式 agent(用户实时等回复):

  • 1M 模式延迟 60s+ 的请求是 UX 灾难
  • 200k 模式 + 多轮即使总时间相近,也比一次长等待好

如果是批处理(异步):

  • 1M 模式可接受更长延迟
  • 但要权衡成本

8. 监控 1M 模式的指标

如果用 1M 模式,13 篇讲的指标外还要监控:

指标阈值行动
平均 input tokens>300k检查是否真需要这么多
prefill 延迟>60s用户体验告警
中间内容利用率难直接测通过 eval 测试
1M vs 200k 成本比>5x评估 ROI

8.1 中间内容 eval

设计 eval 验证模型确实读了中间内容:

test_input = preamble(50k) + "FACT_X = 42" + middle(500k) + question("What is FACT_X?")
expected_output = "42"

如果模型答错或编一个值,说明中间内容没真正进入推理。这种 eval 应该作为 1M 模式上线前的必测。


9. 从设计哲学看 1M

主文档反复说"信噪比比容量重要"。1M context 让人误以为容量解决了问题,但实际上:

  • 容量越大,信噪比越难维持
  • 模型越关注开头结尾,中间噪音越大
  • 越大的窗口,越需要精细的拼接策略

所以 1M context 是升级版的考验而不是免死金牌。它让懒人方案("全塞进去")短期可行,但长期看仍要回到上下文工程的基本原则:让模型在每一刻看到正好的那部分


10. 给 Agent 设计者的可迁移规则

  1. 默认 200k 模式:不要无脑用 1M
  2. 测算成本曲线:200k vs 1M vs 替代方案的端到端成本
  3. 测算延迟曲线:1M 模式的 prefill 延迟可能毁 UX
  4. eval 中间内容:验证模型真的读了,不是 hallucinate
  5. cache 在 1M 下更关键:miss 惩罚翻倍
  6. 可切分就切分:RAG / sub-agent / 多轮 / 多会话
  7. 1M 用于真正不可切的密集任务:合同、log、整体审计
  8. 交互场景慎用 1M:用户等不了 60 秒
  9. 批处理可考虑 1M:异步场景延迟容忍度高
  10. 监控 input token 分布:长尾要警惕

11. 一句话总结

1M context 不是"上下文工程的解药",是"特殊场景的工具"。容量增大反而让信噪比挑战更严峻 —— 把它当作能力补充而非默认选项,agent 系统才不会被超大 context 的成本和延迟拖垮。

下一篇:18 · Agent 蒸馏与上下文蒸馏