Claude Code 入门与原理
Claude Code 入门与原理
上下文窗口详解
13 分钟阅读
探索上下文窗口
一个交互式模拟,展示 Claude Code 的上下文窗口在会话期间如何填充。了解什么自动加载、每次文件读取的成本,以及规则和钩子何时触发。
Claude Code 的上下文窗口保存了 Claude 关于会话所知道的一切:你的指令、它读取的文件、它自己的回复,以及永远不会出现在你终端中的内容。下面的时间线播放一个从启动到压缩的完整会话:在你输入之前加载什么、Claude 工作时每次文件读取、规则和钩子添加什么,以及子代理如何将大型读取排除在你的上下文之外。请参阅文字分解以获取相同内容的列表形式。
Unsupported component: <ContextWindow>
时间线展示的内容
该会话走过一个具有代表性 token 计数的真实流程:
- 在你输入任何内容之前:CLAUDE.md、自动记忆、MCP 工具名称和技能描述都加载到上下文中。你自己的设置可能在这里添加更多内容,如输出样式或来自
--append-system-prompt的文本,它们都以相同方式进入系统提示。 - Claude 工作时:每次文件读取都会添加到上下文,路径作用域规则在匹配文件时自动加载,每次编辑后都会触发 PostToolUse 钩子。
- 跟进提示:子代理在自己的独立上下文窗口中处理研究,因此大型文件读取不会进入你的上下文。只有摘要和一个小型元数据尾部返回。
- 最后:
/compact用结构化摘要替换对话。大多数启动内容自动重新加载;下表显示每种机制会发生什么。
压缩后保留的内容
当长会话压缩时,Claude Code 会摘要对话历史以适应上下文窗口。从 v2.1.198 开始,摘要请求继承你会话的扩展思考配置,因此当你的会话启用时它会启用思考进行推理,否则保持关闭。思考只影响摘要的产生方式;你的会话设置在之后保持不变。你的指令会发生什么取决于它们的加载方式:
| 机制 | 压缩后 |
|---|---|
| 系统提示和输出样式 | 不变;不是消息历史的一部分 |
| 项目根目录 CLAUDE.md 和无范围规则 | 从磁盘重新注入 |
| 自动记忆 | 从磁盘重新注入 |
带有 paths: 前置元数据的规则 | 丢失,直到再次读取匹配文件 |
| 子目录中的嵌套 CLAUDE.md | 丢失,直到再次读取该子目录中的文件 |
| 调用的技能主体 | 重新注入,每个技能上限 5,000 tokens,总计上限 25,000 tokens;最早的优先丢弃 |
| 钩子 | 不适用;钩子作为代码运行,不是上下文 |
路径作用域规则和嵌套 CLAUDE.md 文件在触发文件读取时加载到消息历史中,因此压缩会将它们与所有其他内容一起摘要掉。它们会在 Claude 下次读取匹配文件时重新加载。如果规则必须在压缩中保留,请去掉 paths: 前置元数据或将其移到项目根目录的 CLAUDE.md 中。
技能主体在压缩后重新注入,但大型技能会被截断以适应每个技能的上限,并且一旦超过总预算,最早调用的技能会被丢弃。截断保留文件的开头,因此将最重要的指令放在 SKILL.md 的顶部。
当上下文填满时
Claude Code 会在接近限制时自动压缩,因此完整的上下文窗口不会结束你的会话。自动通过的工作方式与时间线中的 /compact 步骤相同。请参阅当上下文填满时了解它保留什么。
你也可以在自动通过运行之前采取行动:
- 带重点压缩:在启动一个长的新任务之前,用指令运行
/compact,如/compact focus on the auth bug fix。摘要保留你选择的内容,而不是自动通过猜测重要的内容。 - 任务之间清除:在切换到不相关的工作时运行
/clear。旧对话会排挤你接下来需要的文件,并在每条消息上花费 token。 - 委托大型读取:将研究发送给子代理,以便文件内容保留在它的上下文窗口中,而不是你的。
如果你需要更大的窗口而不是更小的对话,Fable 5、Sonnet 5、Opus 4.6 及更高版本,以及 Sonnet 4.6 支持 100 万 token 的上下文窗口。请参阅扩展上下文了解各计划的可用性及如何选择 [1m] 模型变体。Sonnet 5 在 1M 下运行,无需选择 [1m] 变体;请参阅Sonnet 5 上下文窗口了解其自动压缩阈值和 LLM 网关例外。压缩在更大的限制下工作方式相同。
检查你自己的会话
可视化使用代表性数字。要在任何时候查看你的实际上下文使用情况,请运行 /context 以获取按类别划分的实时分解及优化建议。运行 /memory 以检查启动时加载了哪些 CLAUDE.md 和自动记忆文件。
相关资源
有关时间线中展示功能的更深入介绍,请参阅这些页面:
- 扩展 Claude Code:何时使用 CLAUDE.md vs 技能 vs 规则 vs 钩子 vs MCP
- 存储指令和记忆:CLAUDE.md 层次结构和自动记忆
- 子代理:将研究委托给独立的上下文窗口
- 最佳实践:将上下文作为主要约束进行管理
- 提示缓存:哪些操作会使缓存的前缀失效
- 减少 token 使用:保持上下文使用率低的策略