Claude Code: 上下文管理
最后更新:2026-08-31
上下文是 Claude Code 的"工作记忆"——管理好上下文,就是管理好 Claude Code 的理解能力和你的 API 账单。
💡 提示:Claude Sonnet 的上下文窗口是 200K tokens,大约相当于 15 万字。项目越大,上下文管理越重要——不是所有文件都需要同时放进"工作记忆"。
📋 前置知识:第九章 CLAUDE.md 使用指南
1. 你将学到
- 上下文窗口的工作机制
- Token 消耗分析与优化
- 大项目的上下文策略
- 手动控制上下文的方法
- 成本与效果的平衡
2. 上下文窗口机制
(1) 上下文的组成
graph LR
A[总上下文 200K] --> B[系统提示 ~5K]
A --> C[CLAUDE.md ~2K]
A --> D[项目文件 ~100K]
A --> E[对话历史 ~80K]
A --> F[代码输出 ~13K]
| 组成部分 | 典型占比 | 说明 |
|---|---|---|
| 系统提示 | 2-3% | Claude Code 内置指令 |
| CLAUDE.md | 1-2% | 项目约定 |
| 项目文件 | 40-60% | 读取的源码文件 |
| 对话历史 | 30-40% | 之前的问答记录 |
| 代码输出 | 5-10% | 生成的代码 |
(2) 上下文生命周期
TEXT
📖 仅展示
会话开始 → 加载 CLAUDE.md + 系统提示
→ 根据指令读取相关文件
→ 每轮对话累积历史
→ 上下文接近上限时,早期内容被截断
→ 长会话质量可能下降
▶ 示例 1: 查看上下文使用量
TEXT
📖 仅展示
> /cost
Token usage:
System prompt: 4,230 tokens
CLAUDE.md: 1,850 tokens
Project files: 52,400 tokens (12 files)
Conversation: 28,600 tokens (8 turns)
Code output: 8,920 tokens
─────────────────────────────────
Total: 96,000 / 200,000 tokens (48%)
Estimated cost: $1.82
3. Token 优化策略
(1) 减少不必要的文件读取
| 策略 | 效果 | 做法 |
|---|---|---|
| 精确指令 | 减少 30-50% | 指定具体文件而非"看看项目" |
| 限制范围 | 减少 20-40% | 在 CLAUDE.md 限定工作目录 |
| 及时清除 | 减少 10-30% | 长会话中用 /clear 重置 |
| 小步操作 | 减少 15-25% | 一次只做一件事 |
(2) 指令精确度对比
TEXT
📖 仅展示
# 高消耗指令(读取整个项目)
> 帮我重构这个项目
# 中消耗指令(限定范围)
> 重构 src/services/ 下的所有 service
# 低消耗指令(精确文件)
> 重构 src/services/user.service.ts,提取验证逻辑到单独文件
▶ 示例 2: Token 消耗对比
TEXT
📖 仅展示
# 场景:添加一个新 API endpoint
# 模糊指令(消耗 ~80K tokens)
> 给项目添加一个用户搜索接口
→ Claude Code 读取整个项目结构
→ 搜索所有相关文件
→ 读取路由配置、中间件、模型...
Total: 82,000 tokens, $1.64
# 精确指令(消耗 ~25K tokens)
> 在 src/routes/user.ts 添加 GET /api/users/search 接口,
> 使用 src/services/user.service.ts 的 searchUsers 方法,
> 参考 src/routes/product.ts 的搜索接口格式
→ Claude Code 只读取 3 个指定文件
Total: 24,500 tokens, $0.49
节省:70%
4. 大项目上下文策略
(1) 分区工作
MARKDOWN
<!-- CLAUDE.md 中限定工作范围 -->
## 当前工作范围
- 主要开发:src/api/ 目录
- 数据模型:src/models/ 目录
- 当前任务:用户权限模块
## 暂时不需要关注
- src/frontend/ (前端独立开发)
- src/migrations/ (数据库迁移已完成)
- docs/ (文档单独维护)
(2) 按需加载
TEXT
📖 仅展示
# 不要一次加载所有文件
> ❌ "读取所有路由文件并重构"
> ✅ "读取 src/routes/user.ts 并添加分页支持"
# 完成后继续下一步
> "现在读取 src/routes/order.ts 并添加同样的分页支持"
(3) 会话分段
TEXT
📖 仅展示
# 长任务分成多个短会话
# 会话1:模型设计
claude "设计用户权限的数据库模型,只读 prisma/schema.prisma"
# Ctrl+D 退出
# 会话2:中间件
claude "基于刚才的权限模型,实现 RBAC 中间件"
# Ctrl+D 退出
# 会话3:路由集成
claude "将 RBAC 中间件集成到所有需要权限检查的路由"
5. 手动上下文控制
(1) 会话内命令
| 命令 | 作用 | 场景 |
|---|---|---|
/clear |
清空对话历史 | 话题切换时 |
/compact |
压缩对话历史 | 长会话优化 |
/cost |
查看 Token 用量 | 成本监控 |
/files |
查看已加载文件 | 检查上下文 |
(2) 强制限定读取文件
TEXT
📖 仅展示
# 只读指定文件
> 只读取 src/auth/jwt.ts 和 src/middleware/auth.ts,
> 不要读其他文件。
> 给 JWT 认证添加 refresh token 支持。
▶ 示例 3: 大项目优化前后对比
TEXT
📖 仅展示
# 优化前:模糊指令
> 修复所有测试失败
Claude Code 读取了 47 个文件...
Token usage: 156,000 tokens ($3.12)
# 优化后:精确指令
> 运行 npm test,只修复 auth 模块的 3 个失败测试,
> 不要读 frontend 相关文件
Claude Code 读取了 8 个文件
Token usage: 32,000 tokens ($0.64)
节省:80%
6. 综合示例:大型项目上下文管理
TEXT
📖 仅展示
# Alice 管理一个 200+ 文件的大型项目
# 策略1:CLAUDE.md 限定范围
# 在 CLAUDE.md 中写明当前工作模块
# 策略2:短会话+git 检查点
claude "添加订单取消功能"
# 完成后 git commit
git add -A && git commit -m "feat: order cancellation"
# 策略3:分区处理
claude "只处理 src/api/order/ 目录下的文件"
# 策略4:定期 /compact
> /compact
# 对话历史已压缩,从 45K tokens 降到 12K tokens
# 策略5:成本监控
> /cost
# 确认每次操作在预算内
❓ 常见问题
Q 200K tokens 不够用怎么办?
A 用
/clear 重置对话,或分成多个短会话。200K 对单次任务通常够用,长会话才可能超限。Q
/compact 压缩后质量会下降吗?A 会有一点。压缩保留关键信息,丢失对话细节。建议在话题切换时用
/clear 而非 /compact。Q 如何知道 Claude Code 读了我哪些文件?
A Claude Code 会显示每个操作读取的文件路径。也可以用
/files 查看当前已加载文件。Q 能禁止 Claude Code 读某些文件吗?
A 可以在 CLAUDE.md 中写明"不要读取 xxx 目录",但 Claude Code 不一定 100% 遵守。敏感文件建议用
.claudeignore 排除。Q 上下文快满了有什么表现?
A Claude Code 可能开始遗忘早期对话内容,回答质量下降。这时应该
/clear 或开新会话。Q 每个会话的 Token 消耗差异很大正常吗?
A 正常。简单查询可能 5K tokens,复杂重构可能 100K+。指令精确度是最大影响因素。
📖 小节
- 上下文窗口 200K tokens,项目文件和对话历史是主要消耗
- 精确指令可减少 30-70% 的 Token 消耗
- 大项目用 CLAUDE.md 限定工作范围,分区处理
- 短会话 + git 检查点优于超长会话
/clear、/compact、/cost是上下文管理的三个核心命令
📝 作业
- 基础题(难度⭐):在一个项目中运行
/cost,记录一次简单任务和一次复杂任务的 Token 消耗差异。 - 进阶题(难度⭐⭐):用模糊指令和精确指令分别完成同一任务,对比 Token 消耗和结果质量。
- 挑战题(难度⭐⭐⭐):为一个 50+ 文件的项目设计上下文管理策略,实现 Token 消耗减半。