更新于

LLM 上下文窗口实用指南:选型与成本控制


上下文窗口(Context Window)是 LLM 应用开发中影响最大却最容易被低估的技术参数。选错了,要么花冤枉钱,要么影响效果。本文从选型角度出发,给出可操作的决策框架。

关于”如何工程化地管理上下文”,可参考LLM 上下文工程方法论;关于 Claude 1M 的具体使用,参见Claude 1M 上下文实战。本文聚焦选哪个模型、何时用长上下文、成本怎么算

一、2026 年主流模型上下文窗口横评

模型上下文窗口特点
Claude Opus 4.8200k(1M beta)长文档处理能力强,信息检索准确
Claude Sonnet 4.6200k(1M beta)性价比高,推荐日常开发
Gemini 2.5 Pro1M(2M preview)目前正式版最大窗口
Gemini 2.0 Flash1M速度快,适合高频调用
GPT-4o128k稳定成熟,生态完善
GPT-4.11MOpenAI 最新旗舰
Grok-4256k实时搜索+长上下文
Grok-3128k标准配置
Qwen3-235B128k开源最强选手
DeepSeek-R264k推理强,上下文相对小

关键观察:百万级上下文已成为头部模型的标配,但”支持 1M”和”在 1M 时表现好”是两回事。

二、上下文窗口的实际能力边界

大窗口不等于全程注意力均匀

研究显示,大多数模型在长上下文中存在”中间遗忘”(Lost in the Middle)现象:文档开头和结尾的内容被记住的概率明显高于中间部分。

实际测试中(近似数据,仅作参考):

  • 文档前 10%:信息召回率约 92%
  • 文档中间 80%:信息召回率约 65–75%
  • 文档后 10%:信息召回率约 88%

影响:把关键信息放在长文档的中间部分,模型很可能”看漏”。

不同模型的长上下文能力差异明显

同样是 1M 上下文,Gemini 2.5 Pro 在多个长文档检索基准上表现领先,而部分模型在超过 200k 后准确率显著下降。选型时要看针对长上下文的 benchmark,而不只看支持的最大长度。

推理速度随上下文线性下降

输入 Token 越多,prefill 阶段越长,首 Token 延迟(TTFT)越高。经验值:

  • 10k Token 输入:TTFT 约 1–3 秒
  • 100k Token 输入:TTFT 约 8–20 秒
  • 500k Token 输入:TTFT 可能超过 60 秒

对实时交互场景,超长上下文体验较差。

三、长上下文 vs RAG:何时用哪个

这是实际项目中最常见的选择题。

优先考虑长上下文的场景

  • 文档总量可控:总文档在 500k Token 以内,全部塞进去更省事
  • 需要跨文档推理:RAG 每次只检索相关片段,无法做”对比 A 和 B 文档中的差异”类问题
  • 信息密度高:技术规格书、合同、代码库——每一句都可能被问到
  • 一次性任务:写一篇分析报告,文档只用一次,不值得建 RAG 索引

优先考虑 RAG 的场景

  • 知识库超大:几百份文档,几千万 Token,长上下文装不下也不划算
  • 内容更新频繁:RAG 可以增量更新索引,长上下文方案每次都要重新处理全量
  • 延迟敏感:RAG 只取相关片段,TTFT 更低
  • 成本控制:按量计费时,RAG 极大减少每次请求的 Token 消耗
维度长上下文RAG
跨文档推理✅ 强❌ 弱
大规模知识库❌ 受限✅ 支持
实时性❌ 需重发全文✅ 增量更新
成本(大文档量)❌ 高✅ 低
实现复杂度✅ 简单❌ 需要工程投入

决策口诀:文档少而深,用长上下文;文档多而散,用 RAG。

四、上下文成本计算

长上下文最容易被忽略的是费用

基本公式

总费用 = (输入 Token 数 × 输入单价) + (输出 Token 数 × 输出单价)

以 Claude Sonnet 4.6 为例(价格仅作参考,以实际计费为准):

场景输入 Token输出 Token估算费用
普通对话2k500约 $0.003
分析 10 页 PDF15k1k约 $0.02
分析整个代码仓库200k3k约 $0.3
1M Token 长上下文1M5k约 $1.5+

关键认知:一次 1M Token 的调用费用相当于几百次普通对话。高频调用时,上下文优化直接影响预算。

缓存技巧:Prompt Cache 节省重复成本

对于系统 Prompt 固定、上下文反复使用的场景,可以启用 Prompt Cache(Claude / GPT-4.1 均支持):

# Claude Prompt Cache 示例
response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": "你是一位金融分析专家...",
            "cache_control": {"type": "ephemeral"}  # 缓存系统提示
        },
        {
            "type": "text", 
            "text": long_document_content,           # 大文档也缓存
            "cache_control": {"type": "ephemeral"}
        }
    ],
    messages=[{"role": "user", "content": user_question}]
)

缓存命中时,输入 Token 价格下降约 90%(Claude)或 75%(GPT-4.1)。对于分析固定文档、多轮问答的场景,Prompt Cache 是最直接的降本手段。

五、实用的上下文管理技巧

5.1 精简上下文,不塞无关内容

很多开发者把所有相关文档都塞进上下文,但无关内容会:

  1. 增加费用
  2. 分散模型注意力,降低相关内容的权重

做法:预处理时过滤明显不相关的段落,只保留与当前问题相关的部分。

5.2 关键信息放首尾

受”中间遗忘”影响,重要指令、关键约束放在 System Prompt(开头)或最后一条 User Message(结尾)。

messages = [
    {"role": "user", "content": long_document},
    {"role": "user", "content": "【重要约束】只用文档中的数据,不要补充外部知识。\n问题:..."}
    # 最后一条 user 消息包含重要约束,模型更容易记住
]

5.3 用结构化标签分隔不同来源

<document source="annual_report_2025">
...内容...
</document>

<document source="q1_report_2026">
...内容...
</document>

现在请对比两份报告中的营收数据。

结构化标签帮助模型区分不同来源,减少信息混淆。

5.4 对话历史滚动裁剪

多轮对话中,不需要保留全部历史。常用策略:

  • 保留最近 N 轮(滑动窗口)
  • 对早期对话做摘要压缩后替换
  • 只保留 user/assistant 各自的”结论”消息,删掉中间过程
def trim_messages(messages, max_tokens=50000):
    """保留最近消息,直到不超过 max_tokens"""
    total = 0
    trimmed = []
    for msg in reversed(messages):
        token_count = estimate_tokens(msg["content"])
        if total + token_count > max_tokens:
            break
        trimmed.insert(0, msg)
        total += token_count
    return trimmed

六、各模型长上下文使用建议

场景推荐模型理由
长文档问答(< 200k)Claude Sonnet 4.6精准度高,成本合理
超长文档(> 200k)Gemini 2.5 Pro1M 窗口成熟稳定
代码仓库分析Claude Opus 4.8代码理解最强
高频短上下文Gemini 2.0 Flash / Grok-3速度快,成本低
实时搜索+长上下文Grok-4独有实时搜索能力

七、相关阅读

想在国内稳定调用支持长上下文的主流模型,YoTradeApi 支持 Claude / Gemini / GPT / Grok 全系列,统一接口,按量计费。