上下文窗口
Claude Code 的上下文窗口是你和 Claude 之间所有信息的容器。理解它如何工作,是高效使用 Claude Code 的关键。
目录
- 概览
- 上下文窗口里有什么
- 启动时自动加载的内容
- 会话过程中增长的内容
- Subagent 的独立上下文
- 压缩(Compaction)
- 上下文窗口管理策略
- 100 万 token 窗口
- 交互式模拟器
- 最佳实践
概览
一般模型的上下文窗口大小是 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)不会进入上下文,只写入调试日志。
搜索结果
grep、glob 等工具的输出进入上下文,但通常以摘要形式显示。
Subagent 的独立上下文
Subagent 在自己的独立上下文窗口中工作,不会占用你的主上下文:
工作方式
- 主会话中的 Claude 委派任务给 subagent
- Subagent 获得独立的系统提示、CLAUDE.md 和 MCP 工具
- Subagent 读取文件、执行分析——这些都在它的上下文中
- 只有最终摘要返回主会话
上下文节省示例
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 会自动压缩对话历史。
压缩过程
- 系统分析整个对话
- 生成结构化摘要,保留关键信息
- 用摘要替换原始对话
压缩后保留的内容
| 内容 | 压缩后 |
|---|---|
| 系统提示 | 保留(不在消息历史中) |
| 项目 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:
/clear4. 提示词中指定文件
明确告诉 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 自己探索:明确指定文件路径
- 不要忽略路径特定规则:它们只在匹配文件被读取时加载
相关资源
- Memory 指南 - CLAUDE.md 和 Auto Memory 的详细说明
- Skills 指南 - 如何使用技能而不占用上下文
- Subagents 指南 - 委派任务以节省上下文
- Hooks 指南 - 自动化工作流
- 官方上下文窗口文档
最后更新:2026 年 7 月 Claude Code 版本:2.1.138 来源: