跳到内容
AI Coding Guideline
Esc
导航打开⌘J预览
本页内容

上下文窗口与 1M 的区别

说明编程智能体的上下文窗口由系统提示、工具定义和对话历史构成,介绍查看占用的方法,并比较默认窗口与超长模式在容量、价格与质量上的差异

上下文窗口是什么

上下文窗口(context window)是模型单次请求能“看到”的全部内容的上限,按 token 计算。对编程 Agent 来说,窗口里装的远不止你的提问:

┌───────────────────────────────┐
│ 系统提示(Claude Code 自身)     │  ~1-2 万 token
│ 工具定义(内置 + MCP)          │  数千 ~ 数万 token ⚠️
│ CLAUDE.md / AGENTS.md / 记忆   │  数百 ~ 数千 token
│ 对话历史(你的每条消息)         │
│ 工具调用与结果(读文件、命令输出)│  ← 占大头,持续增长
│ 模型的思考与回复               │
└───────────────────────────────┘

一次任务中 Agent 每读一个文件、每跑一条命令,结果都追加进窗口。窗口是只增不减的,直到触发压缩(compact)——Claude Code 会在接近上限时自动把早期历史总结成摘要,细节随之丢失。

用 /context 查看当前占用

上面的结构不用凭空想象——在 Claude Code 里随时输入 /context,就能看到当前会话的窗口被什么占着、还剩多少:

Claude Code 中 /context 命令的输出

左边的方块图是整个窗口的可视化(实心 = 已用,空心 = 剩余),右边按类别列出占用:

  • System prompt / System tools Code 自身的系统提示和内置工具定义,会话一开始就固定占着;
  • Skills——装得越多,开场预算被吃得越多;
  • Messages + 工具调用结果,干活时真正持续增长的部分;
  • Free space,决定还能跑多久才触发自动 compact。

建议养成习惯:长任务中途、感觉模型“变笨”时、开新任务前,先 /context 看一眼。如果 Messages 占比很高,考虑 /compact/clear;如果还没开始干活开销就不小,该去查查工具爆炸和多余的 MCP/Skills 了。

200K vs 1M

Claude 模型默认 200K token 上下文;Sonnet 4 起提供 1M token 的长上下文模式(约 5 倍)。直观感受 ≈ 15 万英文单词或数千页代码摘录;1M 可以装下一个中型仓库的大部分源码。

但两者的区别不只是“更大”:

维度 200K(默认) 1M(长上下文)
容量 中型任务足够,长任务依赖 compact 超长会话、大仓库分析、多文档对照
价格 标准价 超过 200K 的部分按约 2 倍输入价、1.5 倍输出价计费
延迟 较低 上下文越大,首 token 延迟越高
质量 并非无代价“迷失在中间”(lost in the middle)、指令遵循变弱的现象
缓存 重要 更重要——1M 的前缀全量重建一次非常昂贵(见缓存篇)

在 Claude Code 中开启 1M

在会话中用 /model 命令,在模型 ID 后加 [1m] 后缀:

/model claude-opus-5[1m]

也可以在启动时指定,或写进配置:

# 启动参数
claude --model claude-opus-5[1m]

# 环境变量
export ANTHROPIC_MODEL='claude-opus-5[1m]'
// .claude/settings.json
{
  "model": "claude-opus-5[1m]"
}

支持 1M 的模型都可以用同样的后缀,例如 claude-sonnet-5[1m]。切换后用 /context 查看,窗口上限会显示为 1M,自动压缩的触发点也随之推后。

直接调 API 时开启 1M

如果你在自己的程序里用 Anthropic API,长上下文通过 beta header 开启:

import anthropic

client = anthropic.Anthropic()
resp = client.beta.messages.create(
    model="claude-sonnet-4-5",
    max_tokens=4096,
    betas=["context-1m-2025-08-07"],   # 开启 1M 上下文
    messages=[{"role": "user", "content": "..."}],
)

大窗口 ≠ 不需要上下文管理

即使开了 1M,这些实践依然成立:

  1. 能压缩就压缩 /compact 主动收拢,或在阶段性任务完成后 /clear 重开;
  2. 别让工具定义吃掉开场预算(/guide/tool-explosion);
  3. 让探索发生在子代理里,只把结论带回主窗口;
  4. 前缀稳定,缓存才有效,缓存策略的收益越大。

最后更新于 2026年8月31日

这个页面有帮助吗?