第 5 期:上下文窗口深度解析

⏱ 预计阅读 7 分钟 更新于 2026/5/7
💡 进群学习加 wx: agentupdate
(申请发送: agentupdate)

本期核心:上下文窗口是 Claude Code 的生命线。理解它的构成,才能精准管理。


5.1 什么是上下文窗口

每次 Claude Code 对话,所有信息都塞进一个固定大小的"窗口"。窗口大小取决于模型:

模型 上下文窗口
Claude Opus 4 / Sonnet 4 200K tokens
Claude Haiku 4 200K tokens
部分 1M context session 1,000K tokens

5.2 上下文窗口里到底有什么

上下文窗口分为固定部分(每轮都一样)和动态部分(随对话增长):

┌─────────────────── 上下文窗口(200K tokens)─────────────────────┐
│                                                                  │
│ ▼ 固定部分 — 每轮请求都带,大小不变                                │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ System Prompt          ~3,000 tokens                        │ │
│ │ CLAUDE.md              ~2,000-8,000 tokens                  │ │
│ │ Hooks 注入              ~500-2,000 tokens                   │ │
│ └──────────────────────────────────────────────────────────────┘ │
│                                                                  │
│ ▼ 动态部分 — 随对话轮次增长                                       │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ 对话历史(用户消息 + AI 回复)                                │ │
│ │ 工具调用 + 工具返回结果(最大增长源!)                        │ │
│ │ 当前用户消息                                                 │ │
│ └──────────────────────────────────────────────────────────────┘ │
│                                                                  │
│                     ← 剩余空间(Claude 生成回复的空间)            │
└──────────────────────────────────────────────────────────────────┘

5.3 固定部分详解

固定部分大约 6K-15K tokens

固定内容 大小 能否精简
System Prompt ~3K 不能(Claude Code 内置)
CLAUDE.md 1K-8K 能。/caveman:compress 压缩
caveman hook 注入 ~200-500 能。/caveman lite 减量
claude-mem SessionStart 500-3K 能。控制 observations 数量

关键点:固定部分虽然每轮都一样,但因为 Prompt Cache,只算一次费用。


5.4 什么操作让上下文暴涨

操作 上下文增量 原因
Read 大文件 +2K-10K 文件全部内容进入上下文
Bash npm test +1K-5K 测试输出可能很长
Agent subagent +500-5K subagent 返回结果进入主会话
Grep 搜索 +200-2K 取决于匹配结果数
Edit 文件 +100-300 只发 diff,很小
普通对话 +100-500 用户消息 + AI 回复

5.5 实战:一次"读取项目"操作的上下文变化

操作前:
Context ██░░░░░░░░ 18% (36K/200K)

Read 6 个文件后:
Context ███████░░░ 60% (120K/200K)
  ↑ 从 18% → 60%,一次"读取项目"吃了 42% 的上下文

教训:一次读取 6 个文件,上下文直接从 18% 飙到 60%。之后只剩 40% 可用空间。


5.6 窗口满了会怎样 — 自动压缩

Claude Code 在上下文达到 95% 时触发自动压缩(硬编码,不可配置)。

压缩的后果

  • 缓存全部失效:压缩改变了消息前缀
  • 信息不可恢复:被压缩的文件内容、工具结果永久丢失
  • 费用增加:缓存失效后,每轮请求的固定部分要重新处理

如何避免

  • 保持上下文 < 85%(在黄色警告时就开始控制)
  • 主动 /clear 比被迫压缩好
  • 避免一次读取太多大文件

5.7 HUD 如何帮你管理上下文

Context ████████░░ 78%  ← 黄色警告,注意控制
  • < 60% 绿色:放心工作
  • 60-85% 黄色:避免大文件读取、长排错循环
  • > 85% 红色:考虑 /clear 重置

5.8 省上下文的实用技巧

  1. 定期 /clear:长会话中间 clear 一次,重置动态部分
  2. 避免排错循环:超过 3-4 轮没进展就 clear 重开
  3. 用 Grep 替代 Read 全文件:只看相关行,不读全文件
  4. 精简 CLAUDE.md:用 /caveman:compress 压缩
  5. 指定行号读取Read file.ts:offset:limit 而非读整个文件

下期预告:第 6 期深入 Token 机制——输入/输出/缓存三类 Token 的详细构成与实战费用计算。