Claude Code 用得顺手以后,很多人会遇到一个很现实的问题:前几天还觉得额度够用,突然某一天 token 消耗明显变高,同样是改一个小功能,费用和额度掉得比预期快很多。
这种情况不一定是 Claude Code 变贵了,也不一定是模型出问题。更多时候,是上下文、工具调用、文件读取范围、长会话、Hooks、MCP 或任务写法共同把 token 撑大了。排查思路应该先找“最近哪里变了”,再决定是压缩上下文、缩小任务范围,还是调整工作流。
先理解 token 花在哪里
Claude Code 的 token 消耗通常来自几类内容:
- 你输入的任务说明。
- Claude Code 读取到的文件内容。
- 终端命令输出、测试日志和报错栈。
- 对话历史和中间推理上下文。
- 工具调用结果,例如搜索、读取文件、MCP 返回的数据。
- 项目规则文件,例如
CLAUDE.md、Memory、Hooks 注入的信息。 - 模型输出本身。
所以,token 消耗突然变高,不一定是你的那一句提示词变长了。更常见的是:Claude Code 为了完成任务读取了更多文件,保留了更长会话,或者工具输出里塞进了大量日志。
快速止血:先做这几步
如果你已经发现额度掉得很快,可以先按这个顺序止血:
- 开新会话,避免把旧上下文继续带进去。
- 明确告诉 Claude Code 只读取相关文件。
- 不要让它一次分析整个仓库。
- 测试失败时只贴最后 100 行关键日志。
- 临时关闭不必要的 MCP 工具。
- 检查 Hooks 是否自动附加了大量输出。
- 把任务拆成“定位问题”和“修改文件”两步。
一个更省 token 的任务写法是:
|
|
这比“帮我看看登录为什么有问题”更容易控制上下文。
原因一:长会话没有清理
最常见的原因是会话太长。你前面让 Claude Code 查过日志、读过大文件、跑过测试、讨论过方案,这些内容会逐步进入上下文。后面即使只是问一个小问题,也可能带着很重的历史包袱。
表现通常是:
- 同样的小任务,越到后面越慢。
- Claude Code 开始引用很早之前的内容。
- 明明只改一处,它却反复回顾之前的方案。
- token 消耗随着会话长度持续上升。
处理方法:
- 一个独立任务开一个新会话。
- 长任务阶段性总结后再继续。
- 把已经确定的项目规则写进
CLAUDE.md,不要靠长对话反复保存。 - 对旧讨论只保留结论,不保留完整过程。
如果你已经完成定位,只剩改代码,最好新开一轮,把结论和目标用短提示词重新交代。
原因二:Claude Code 读取了太多文件
有些任务描述太开放,Claude Code 会主动搜索和读取大量文件。例如:
|
|
它可能会读路由、组件、状态管理、测试、配置、文档,甚至历史脚本。文件越多,token 越高。
更好的写法是:
|
|
排查时可以观察 Claude Code 读了哪些文件。如果它不断打开无关文件,说明任务边界太宽,应该暂停并重新限定范围。
原因三:测试日志和构建输出太长
测试失败、类型检查失败、构建失败时,日志很容易膨胀。特别是前端项目、单元测试快照、依赖安装日志和编译错误,几百行输出很快就会吃掉上下文。
常见高消耗来源:
npm install或pnpm install的完整输出。pytest -vv的详细日志。- Playwright 失败时的大段 trace 信息。
- TypeScript 一次报几百个错误。
- Docker build 的完整层输出。
建议做法:
- 只保留关键错误段。
- 先运行更窄的测试命令。
- 让 Claude Code 先看最后一段报错。
- 对重复错误先人工归类,再交给模型判断。
例如:
|
|
通常比:
|
|
更适合排查单点问题。
原因四:CLAUDE.md 太长或规则重复
CLAUDE.md 很有用,但如果写成几千行项目百科,每次进入项目都会增加上下文负担。尤其是把 README、架构文档、部署手册和个人偏好全部塞进去,token 消耗会稳定变高。
建议 CLAUDE.md 只保留高频规则:
- 技术栈。
- 常用命令。
- 禁止修改的文件。
- 验证方式。
- 项目特有约定。
不要放这些内容:
- 过期历史。
- 大段业务背景。
- 完整 API 文档。
- 重复的编码风格提醒。
- 临时任务记录。
如果文档确实很长,可以拆到 docs/,在 CLAUDE.md 里只写“需要时再读取哪个文件”。
原因五:Memory 里积累了太多跨项目信息
Memory 适合保存长期偏好,但不适合保存某个项目的细节。比如某个仓库的路径、命令、部署脚本、临时决策,如果进入长期记忆,换项目后也可能被带出来。
这会造成两个问题:
- token 变高,因为上下文里混入了更多背景。
- 行为变差,因为 Claude Code 可能把旧项目规则套到新项目。
排查方法:
- 看最近是否频繁要求 Claude Code“记住”某些项目细节。
- 检查是否把临时路径、旧命令、一次性结论写进了长期记忆。
- 把项目规则迁回项目内文档,例如
CLAUDE.md。
长期记忆应该保存“团队偏好”,项目文件应该保存“仓库事实”。
原因六:Hooks 自动注入了大量内容
Hooks 可以让 Claude Code 更可靠,但也可能悄悄增加 token。例如每次编辑后自动打印完整 diff、完整测试日志、完整目录树,都会让上下文变重。
需要重点检查:
- Hook 是否每次都输出完整文件内容。
- Hook 是否打印完整环境变量。
- Hook 是否在失败时重复输出同一段日志。
- Hook 是否对所有文件改动都跑大测试。
- Hook 是否把报告写回对话而不是写入文件。
更省的做法是让 Hook 输出摘要:
|
|
而不是把完整日志直接塞回对话。
原因七:MCP 工具返回太多数据
MCP 很方便,但有些工具默认返回大量结果。例如文档搜索、数据库查询、网页抓取、代码索引,如果没有限制结果数量,很容易把上下文撑大。
排查时看三个点:
- 一次搜索返回了多少条。
- 每条结果是否包含全文。
- 是否重复查询同一类数据。
可以要求 Claude Code 限制结果:
|
|
如果 MCP 工具支持参数,优先设置 limit、page_size、summary_only 这类选项。
原因八:模型切换导致单次成本变化
有时候 token 数没明显增加,但消耗感觉更快,是因为模型切换了。更强模型、长上下文模型、思考能力更强的模型,单位 token 成本或使用额度折算可能不同。
需要确认:
- 当前使用的是哪个 Claude 模型。
- 是否从轻量模型切到了更强模型。
- 是否开启了更高 effort 或类似长推理模式。
- 团队配置是否最近调整过默认模型。
如果只是做简单改写、解释和小脚本,本来就不一定需要最高档模型。可以按任务风险选择模型。
原因九:失败重试太多
当 Claude Code 连续跑错命令、测试反复失败、补丁多次冲突时,token 会快速累积。每一次失败都可能产生日志、解释、修复计划和新的工具调用。
处理方法:
- 连续失败两次后暂停,不要继续让它盲改。
- 要求它先总结失败原因。
- 缩小任务到最小复现。
- 把命令和错误输出固定下来,再决定下一步。
可以这样提示:
|
|
这比让它继续“再试一次”更省,也更安全。
原因十:任务描述太抽象
抽象任务会让 Claude Code 自己探索上下文,探索越多,token 越高。
高消耗写法:
|
|
低消耗写法:
|
|
任务越像工单,Claude Code 越能少走弯路。
排障清单
如果你不知道 token 为什么突然变高,可以按这张清单排:
| 检查项 | 现象 | 处理 |
|---|---|---|
| 会话长度 | 越聊越慢、越用越贵 | 新开会话,保留结论 |
| 文件范围 | 读了大量无关文件 | 限定目录和文件 |
| 日志输出 | 测试或构建输出很长 | 只保留关键错误 |
CLAUDE.md |
项目规则文件过长 | 精简为高频规则 |
| Memory | 跨项目信息混乱 | 清理临时项目细节 |
| Hooks | 自动输出太多 | 改成摘要和日志文件 |
| MCP | 搜索结果过大 | 限制条数和摘要 |
| 模型 | 默认模型变强 | 按任务切换模型 |
| 重试 | 失败后反复尝试 | 暂停,总结再改 |
| 任务描述 | 要求太泛 | 写成小范围工单 |
推荐的省 token 工作流
一个比较稳的 Claude Code 工作流可以这样设计:
- 先描述目标和边界。
- 要求 Claude Code 只读取必要文件。
- 第一轮只分析,不修改。
- 确认方案后再让它改小范围文件。
- 运行最小相关测试。
- 测试失败只保留关键日志。
- 任务结束后新开会话处理下一件事。
示例提示词:
|
|
这种写法不花哨,但非常省。
FAQ
token 变高是不是 Claude Code 出 bug 了?
不一定。更常见的是上下文变长、文件读取变多、工具输出变大,或者默认模型发生变化。先排查最近的项目配置和工作流变化。
关掉 MCP 会省 token 吗?
如果 MCP 工具返回大量搜索结果、网页内容或数据库记录,关掉不必要的工具会省。更好的做法是限制返回数量和摘要长度,而不是完全不用。
CLAUDE.md 越详细越好吗?
不是。CLAUDE.md 应该写高频、稳定、会影响操作的规则。大段背景资料放到文档里,需要时再让 Claude Code 读取。
为什么小改动也消耗很多?
因为小改动可能发生在长会话后,也可能触发大量文件读取、测试日志或 Hooks 输出。token 消耗看的是整轮上下文,不只看改动行数。
开新会话会不会丢掉重要上下文?
会丢掉旧对话细节,但这通常是好事。你可以把必要结论用几行重新说明,避免把所有历史过程继续带进去。
怎样判断是不是测试日志太长?
看 Claude Code 最近是否接收了完整测试输出、构建日志或依赖安装日志。如果日志里有大量重复错误,先裁剪再让模型分析。
团队里怎么统一控制 token?
可以把省 token 规则写进团队 CLAUDE.md:默认先读相关文件、优先最小测试、失败日志只看关键段、改动前先说明范围。Hooks 和 MCP 也要限制输出大小。
小结
Claude Code token 消耗突然变高,通常不是单一原因。长会话、宽任务、长日志、过长 CLAUDE.md、Memory 污染、Hooks 输出、MCP 大结果、模型切换和失败重试,都可能叠加。
最有效的处理方式是先止血:新开会话、缩小范围、裁剪日志、限制工具输出。然后把稳定规则沉淀到项目文档,把重复检查交给自动化,把临时上下文留在当前任务里。这样 Claude Code 仍然能保持高效率,但不会每次小改动都变成一次昂贵的全仓库探索。