上下文管理与性能调优
长时间会话会消耗大量上下文窗口。以下技巧帮助你高效管理:
上下文管理技巧
| 技巧 | 说明 |
|---|---|
使用 /compact | 定期压缩对话历史,保留关键信息,释放上下文空间 |
使用 /clear | 切换任务时清除历史,避免无关上下文干扰 |
| 分拆复杂任务 | 不要在一个会话中尝试重构整个代码库 |
| 引用文件而非粘贴 | 让 Claude 直接读取文件,而不是把大段代码粘贴到对话中 |
| 利用 CLAUDE.md | 把重复出现的指令写入 CLAUDE.md,而不是每次会话都重复 |
| 非交互模式 | 用 claude -p "任务" 快速执行单一任务后退出 |
--verbose 深度调试
当你想了解 Claude Code 内部的决策逻辑时,使用 --verbose 模式:
bash
claude --verbose这会显示 Claude 的完整工具调用过程,包括:
- 每次工具调用的参数和返回值(如读取了什么文件、搜索了什么关键词)
- Claude 选择某个工具的原因(而非直接展示最终结果)
- 请求和响应的 token 数量明细
典型用途:
- Claude 反复做错同一件事 → 用 verbose 看它每次读取了什么、推断出什么结论
- Claude 没找到某个文件 → 用 verbose 看它的搜索策略是否合理
- 性能异常慢 → 用 verbose 查看是否存在不必要的重复工具调用
.claudeignore 排除无关文件
类似 .gitignore,.claudeignore 让 Claude Code 跳过不需要处理的文件和目录,减少无效的上下文消耗:
text
# 排除大型生成文件
dist/
build/
*.min.js
*.bundle.js
# 排除数据文件
*.csv
*.json.bak
data/seeds/
# 排除无关目录
docs/archive/
vendor/
node_modules/什么时候需要 .claudeignore?
- 仓库很大(超过 1000 个文件)→ 排除不相关的目录
- 有大型数据文件 → 排除以免浪费上下文窗口
- 有敏感数据文件 → 排除以免 Claude 读取
大仓库上下文优化
在大型项目中使用 Claude Code 时,以下策略帮助保持上下文质量:
| 策略 | 说明 |
|---|---|
| 目录级 CLAUDE.md | 在子目录放置 CLAUDE.md,只描述该模块的上下文,减少全局噪音 |
| 精准引用文件 | 告诉 Claude 具体文件路径,而不是让它全仓库搜索 |
| 限制搜索范围 | 描述任务时指定目录,如"在 src/api/ 下查找..." |
| 分模块会话 | 每个会话只处理一个模块,结束后 /clear 开始新模块 |
定期 /compact | 每 15-20 分钟压缩一次,防止历史膨胀 |
Prompt Caching
Prompt Caching 是 Anthropic API 的优化机制——当 Claude Code 发送的请求中包含与之前请求相同的前缀内容时,已缓存的部分可以跳过重新处理,节省 token 和降低延迟。
自动缓存的内容
Claude Code 会自动缓存以下内容,你无需手动配置:
| 内容 | 说明 |
|---|---|
| 系统提示 | Claude Code 的内置指令(工具定义、行为规范等) |
| CLAUDE.md | 项目指令文件的内容在会话开始时发送,跨会话可复用缓存 |
| Skills 文件 | alwaysApply 类型的 Skills 每次会话都注入,适合缓存 |
如何提升缓存命中率
缓存有 5 分钟的 TTL(有效期)。以下做法能提高命中率、降低成本:
| 做法 | 原因 |
|---|---|
| 保持 CLAUDE.md 稳定 | 不要频繁修改 CLAUDE.md 内容,每次改动都会破坏缓存 |
| 用 CLAUDE.md 代替重复指令 | 把每次都要重复说的规则写进 CLAUDE.md,让它被缓存 |
| 避免频繁重启会话 | 同一会话中继续工作比不断开新会话缓存命中率更高 |
| 先 /compact 再继续 | 压缩后的历史前缀更稳定,更容易命中缓存 |
缓存对成本的影响
| 状态 | 输入 token 价格 |
|---|---|
| 命中缓存 | 原价的 10%(节省 90%) |
| 缓存写入 | 原价的 125%(首次发送时略贵) |
| 未命中缓存 | 原价 |
这意味着:如果你在 5 分钟内多次使用同一会话或重新启动包含相同 CLAUDE.md 的会话,输入 token 成本大幅降低。