Skip to content

上下文窗口

Claude Code 的上下文窗口是你和 Claude 之间所有信息的容器。理解它如何工作,是高效使用 Claude Code 的关键。

目录

  1. 概览
  2. 上下文窗口里有什么
  3. 启动时自动加载的内容
  4. 会话过程中增长的内容
  5. Subagent 的独立上下文
  6. 压缩(Compaction)
  7. 上下文窗口管理策略
  8. 100 万 token 窗口
  9. 交互式模拟器
  10. 最佳实践

概览

一般模型的上下文窗口大小是 200,000 token(较先进的模型时可扩展到 100 万 token)。上下文里的内容包含:

  • 系统指令和你的 CLAUDE.md 配置
  • 你读取的文件内容
  • Claude 的回复
  • 工具输出(命令结果、搜索结果等)
  • 你在终端看不到的内容(自动加载的规则、MCP 工具定义等)

关键概念:你在终端看到的只是冰山一角。大量内容在后台自动加载,占据上下文但不显示在屏幕上。


上下文窗口里有什么

可以通过这里看下交互的上下文变化过程:交互式模拟器

按类型分类

类型 说明 占用
系统提示 Claude 的行为指令、工具使用规则 ~4,200 tokens
CLAUDE.md 文件 项目规则、个人偏好 取决于文件大小
Auto Memory Claude 之前会话的学习笔记 前 200 行 / 25KB
MCP 工具 工具名称和 schema 取决于 MCP 服务器数量
Skills 可用技能的描述 每个技能约 50-100 tokens
规则文件 .claude/rules/ 中的路径特定规则 按需加载
文件内容 你让 Claude 读取的文件 每个文件不同
对话历史 你的提示词和 Claude 的回复 持续增长

终端可见性

不是所有上下文内容都会在终端显示:

可见性 说明 示例
隐藏 完全不在终端显示 系统提示、MCP 工具定义、规则文件内容
简短 只显示一行摘要 “Reading auth.ts”、“Loaded rules/api-conventions.md”
完整 完整显示在终端 你的提示词、Claude 的回复、文件 diff

启动时自动加载的内容

在你输入第一个提示词之前,以下内容已经加载到上下文中:

1. 系统提示(~4,200 tokens)

核心行为指令,包括:

  • 如何使用工具
  • 响应格式规则
  • 安全准则

你永远看不到这部分内容,但它始终存在。

2. Auto Memory(~680 tokens)

Claude 从之前会话中自动记录的笔记:

  • 它学到的构建命令
  • 它发现的代码模式
  • 它犯过的错误和避免方法

加载前 200 行或 25KB(以先到者为准)。

3. 环境信息(~280 tokens)

  • 工作目录
  • 操作系统和平台
  • Git 分支、状态和最近提交

4. MCP 工具(~120 tokens)

MCP 服务器提供的工具名称。默认情况下,完整的 schema 会延迟加载,Claude 只在需要时通过工具搜索加载。

5. Skill 描述(~450 tokens)

每个可用技能的一行描述。只有当 Claude 实际调用技能时,完整内容才会加载。

6. 用户级 CLAUDE.md(~320 tokens)

~/.claude/CLAUDE.md 中的个人偏好,适用于所有项目。

7. 项目级 CLAUDE.md(~1,800 tokens)

项目根目录下的 CLAUDE.md,包含:

  • 项目约定
  • 构建命令
  • 架构说明
  • 编码标准

提示:CLAUDE.md文件尽量保持在 200 行以内。将参考内容移到 skills 或路径特定规则中,只在需要时加载。


会话过程中增长的内容

文件读取

每次 Claude 读取文件,文件内容就进入上下文:

你:"修复 auth.ts 中的 bug"
Claude:读取 src/api/auth.ts(+2,400 tokens)
Claude:读取 src/lib/tokens.ts(+1,100 tokens)

提示:文件读取是上下文增长的主要来源。在提示词中明确指定文件(“修复 auth.ts 中的 bug”),可以减少 Claude 需要读取的文件数量。

规则自动加载

当 Claude 读取匹配规则 paths: 模式的文件时,规则自动加载:

Claude:读取 src/api/auth.ts
→ 自动加载 .claude/rules/api-conventions.md(+380 tokens)

规则内容不在终端显示,只显示一行"Loaded"通知。

Hook 输出

PostToolUse hook 的 additionalContext 输出会进入上下文:

{
  "hookSpecificOutput": {
    "additionalContext": "Prettier 格式化完成,无更改"
  }
}

普通 stdout(退出码 0)不会进入上下文,只写入调试日志。

搜索结果

grepglob 等工具的输出进入上下文,但通常以摘要形式显示。


Subagent 的独立上下文

Subagent 在自己的独立上下文窗口中工作,不会占用你的主上下文:

工作方式

  1. 主会话中的 Claude 委派任务给 subagent
  2. Subagent 获得独立的系统提示、CLAUDE.md 和 MCP 工具
  3. Subagent 读取文件、执行分析——这些都在它的上下文中
  4. 只有最终摘要返回主会话

上下文节省示例

Subagent 读取:session.ts(2,200 tokens)
Subagent 读取:timeouts.ts(800 tokens)
Subagent 读取:config/*.ts(3,100 tokens)
─────────────────────────────
Subagent 总计:6,100 tokens

返回主会话:420 tokens
─────────────────────────────
节省:5,680 tokens(93%)

何时使用 Subagent

  • 需要读取多个文件进行研究
  • 任务与当前对话无关
  • 需要探索代码库但不想污染主上下文

压缩(Compaction)

当上下文接近限制时,Claude Code 会自动压缩对话历史。

压缩过程

  1. 系统分析整个对话
  2. 生成结构化摘要,保留关键信息
  3. 用摘要替换原始对话

压缩后保留的内容

内容 压缩后
系统提示 保留(不在消息历史中)
项目 CLAUDE.md 从磁盘重新加载
Auto Memory 从磁盘重新加载
路径特定规则 丢失,直到再次读取匹配文件
子目录 CLAUDE.md 丢失,直到再次读取该目录的文件
已调用的 Skill 内容 重新注入,每个 skill 上限 5,000 tokens,总计 25,000 tokens
Hook 不适用(hook 作为代码运行,不是上下文)

手动压缩

# 基本压缩
/compact

# 带焦点的压缩
/compact focus on the auth bug fix

# 清除对话(切换到不相关工作时)
/clear

上下文窗口管理策略

1. 使用 /context 查看状态

随时运行 /context 查看当前上下文使用情况:

/system prompt    ████░░░░░░  4,200 tokens (14%)
/CLAUDE.md        ██░░░░░░░░  2,120 tokens (7%)
/files            ████████░░  6,900 tokens (23%)
/conversation     ██████████  16,780 tokens (56%)
─────────────────────────────────────────────
Total                          30,000 tokens (60%)

2. 使用 Subagent 委派研究

让 subagent 处理文件读取密集型任务:

你:"用 subagent 研究 session timeout 处理,然后修复它"

3. 在任务间清除上下文

切换到不相关工作时运行 /clear

/clear

4. 提示词中指定文件

明确告诉 Claude 要读取哪个文件:

好:"修复 auth.ts 中的 bug"
差:"这里有个 bug"

5. 使用路径特定规则

将规则限制在需要的路径上,避免全局加载:

---
paths: src/api/**/*.ts
---
# API 开发规则

100 万 token 窗口

部分模型支持 100 万 token 的扩展上下文窗口:

模型 窗口大小 说明
Fable 5 1M 原生支持
Sonnet 5 1M 自动压缩阈值不同
Opus 4.6+ 1M 需要 [1m] 变体
Sonnet 4.6 1M 需要 [1m] 变体

选择扩展上下文模型

# 使用 1M 窗口的模型
claude --model claude-opus-4-6-20250610[1m]

# 或在 REPL 中切换
/model

压缩在更大的窗口限制下以相同方式工作。


交互式模拟器

我们提供了一个交互式模拟器,可以可视化地观察上下文窗口如何在会话中填充:

上下文窗口模拟器

模拟器展示了:

  • 启动时自动加载的内容
  • 每次文件读取的 token 成本
  • 规则和 hook 的自动触发
  • Subagent 如何节省上下文
  • 压缩如何释放空间

最佳实践

应该做的

  • 保持 CLAUDE.md 精简:控制在 200 行以内
  • 使用路径特定规则:避免全局加载不需要的规则
  • 使用 Subagent:研究任务委派给 subagent
  • 在提示词中指定文件:减少 Claude 的探索范围
  • 定期运行 /context:监控上下文使用情况
  • 任务间运行 /clear:避免无关内容占用空间
  • 使用 disable-model-invocation: true:对有副作用的 skill 设置此选项,它们不会出现在启动索引中

不应该做的

  • 不要在 CLAUDE.md 中放太多内容:每次会话都会加载
  • 不要忘记压缩:长对话会耗尽上下文
  • 不要让 Claude 自己探索:明确指定文件路径
  • 不要忽略路径特定规则:它们只在匹配文件被读取时加载

相关资源


最后更新:2026 年 7 月 Claude Code 版本:2.1.138 来源