Claude 1M 上下文实战:何时开启与最佳实践
Anthropic 在 2025 年把 Claude 的上下文窗口从 200k 扩到 1M(部分场景)。这是一个大新闻但用法上有几个细节常被忽略。本文讲清楚怎么开、什么场景值得开、与 Gemini 2.5 Pro 的对比。
一、200k vs 1M:两套机制
Claude 默认 200k 上下文。1M 是通过 beta 标签开启:
POST /v1/messages
anthropic-beta: context-1m-2025-08-07
或在 SDK:
client.messages.create(
model="claude-sonnet-4-6",
max_tokens=8000,
messages=[...],
extra_headers={"anthropic-beta": "context-1m-2025-08-07"},
)
二、定价差异
1M 上下文模式的输入 token 价格比 200k 模式贵约 2 倍。具体:
| 模式 | 输入价(相对) | 输出价 |
|---|---|---|
| 200k 标准 | 100 | 100 |
| 1M beta | 200 | 100 |
关键:
- 1M 模式即使你只输入了 5k tokens,也按 1M 模式的高价
- 一旦开 beta 头,整个请求按高价
- prompt caching 仍可用,能部分抵消
结论:除非确实需要超长输入,不要默认开 1M。
三、什么场景值得开
| 场景 | 输入预估 | 1M 模式必要? |
|---|---|---|
| 日常对话 | < 10k | 不必 |
| 代码 review 单 PR | 20–50k | 不必 |
| 长文档摘要 | 50–150k | 边界 |
| 整个代码仓库分析 | 200k–800k | 是 |
| 多文档综合查询 | 200k–800k | 是 |
| 长视频转录分析 | 100k–500k | 看长度 |
最适合 1M 的场景:
- 一次性给整个中型代码仓库(< 800k tokens)让模型理解架构
- 把多个法律 / 学术文献合并问综合性问题
- 长会议记录、长访谈转录综合分析
四、与 Gemini 2.5 Pro 的对比
| 维度 | Claude 1M | Gemini 2.5 Pro |
|---|---|---|
| 上下文 | 1M | 2M |
| 价格 | 高(200k 价 × 2) | 中等 |
| 召回准确率(500k 输入) | 88% | 92% |
| 推理质量 | 强 | 强 |
| 编程能力 | 极强 | 中等 |
| 中文 | 极强 | 中等 |
结论:
- 纯长上下文召回:Gemini 优势(更便宜、上下文更大)
- 长上下文 + 编程 / 中文:Claude 优势
五、长上下文的性能特征
输入大小 vs 首 token 延迟:
| 输入 | Claude 1M TTFB |
|---|---|
| 10k | 4s |
| 100k | 12s |
| 500k | 35s |
| 800k | 55s |
实战:> 200k 输入的请求 TTFB 上升明显。如果你的产品对响应时间敏感,谨慎用 1M 模式。
六、长上下文 + 缓存
长上下文 + caching 是最佳组合:
- 大文档作为 system prompt 写一次,开 cache_control
- 同一文档反复提问,每次只付缓存命中价(1/10)
- 单次输入大也接受,因为后续都便宜
client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2000,
extra_headers={"anthropic-beta": "context-1m-2025-08-07"},
system=[{
"type": "text",
"text": huge_document, # 800k tokens
"cache_control": {"type": "ephemeral"},
}],
messages=[{"role": "user", "content": "..."}],
)
首次请求 ~$10,后续每次 ~$1。
七、走中转时的注意点
中转必须透传 anthropic-beta 头才能开 1M:
curl -i https://yotradeapi.com/v1/messages \
-H "x-api-key: $KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: context-1m-2025-08-07" \
-H "content-type: application/json" \
-d '{...}'
如果中转不透传 beta 头,发了 500k tokens 会被截断或报错。接入前用一个 250k+ 输入的请求测一下。
八、典型用法:代码仓库分析
import pathlib, json
from openai import OpenAI
def collect_repo(root, max_chars=2_000_000):
parts = []
total = 0
for p in pathlib.Path(root).rglob("*"):
if p.is_file() and p.suffix in (".py", ".ts", ".md", ".json"):
content = p.read_text(errors="ignore")
if total + len(content) > max_chars:
break
parts.append(f"=== {p} ===\n{content}\n")
total += len(content)
return "\n".join(parts)
repo = collect_repo("./my-project")
print(f"chars: {len(repo)}")
client = OpenAI(api_key="sk-yo-...", base_url="https://yotradeapi.com/v1")
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
max_tokens=4000,
messages=[
{"role": "system", "content": f"项目代码:\n{repo}"},
{"role": "user", "content": "找出可能的性能瓶颈,按严重度排序。给出 3 个最值得优化的地方。"},
],
extra_headers={"anthropic-beta": "context-1m-2025-08-07"},
)
print(resp.choices[0].message.content)
九、什么时候反而不要用长上下文
- 任务和上下文相关性弱:模型会被无关信息干扰
- 响应时间敏感:TTFB 太久
- RAG 是更好选择:检索 + 重点放进上下文比”全塞进去”更准确
- 预算紧:1M 模式贵
十、与 RAG 的取舍
| 场景 | 1M 上下文 | RAG |
|---|---|---|
| 文档库 < 1M tokens | 直接塞 | 不必 |
| 文档库 > 1M tokens | 必须 RAG | RAG |
| 一次性深度分析 | 上下文 | 不适合 |
| 高频提问 | 不划算 | RAG |
| 关联召回质量要求高 | 上下文 | 看效果 |
| 中文表现 | Claude > Gemini | 看 embedding |
简单决策:一次性深度任务用长上下文,反复提问用 RAG。
十一、相关阅读
需要透传 anthropic-beta 头、支持 1M 上下文的中转?YoTradeApi 完整透传 beta headers,按上面代码直接发请求即可。