Claude Code token 消耗突然变高原因:教程、排障和 FAQ

整理 Claude Code token 消耗突然变高的常见原因和排查方法,覆盖长会话、上下文膨胀、文件读取、Hooks、MCP、模型切换、重复失败重试和团队协作场景。

Claude Code 用得顺手以后,很多人会遇到一个很现实的问题:前几天还觉得额度够用,突然某一天 token 消耗明显变高,同样是改一个小功能,费用和额度掉得比预期快很多。

这种情况不一定是 Claude Code 变贵了,也不一定是模型出问题。更多时候,是上下文、工具调用、文件读取范围、长会话、Hooks、MCP 或任务写法共同把 token 撑大了。排查思路应该先找“最近哪里变了”,再决定是压缩上下文、缩小任务范围,还是调整工作流。

先理解 token 花在哪里

Claude Code 的 token 消耗通常来自几类内容:

  • 你输入的任务说明。
  • Claude Code 读取到的文件内容。
  • 终端命令输出、测试日志和报错栈。
  • 对话历史和中间推理上下文。
  • 工具调用结果,例如搜索、读取文件、MCP 返回的数据。
  • 项目规则文件,例如 CLAUDE.md、Memory、Hooks 注入的信息。
  • 模型输出本身。

所以,token 消耗突然变高,不一定是你的那一句提示词变长了。更常见的是:Claude Code 为了完成任务读取了更多文件,保留了更长会话,或者工具输出里塞进了大量日志。

快速止血:先做这几步

如果你已经发现额度掉得很快,可以先按这个顺序止血:

  1. 开新会话,避免把旧上下文继续带进去。
  2. 明确告诉 Claude Code 只读取相关文件。
  3. 不要让它一次分析整个仓库。
  4. 测试失败时只贴最后 100 行关键日志。
  5. 临时关闭不必要的 MCP 工具。
  6. 检查 Hooks 是否自动附加了大量输出。
  7. 把任务拆成“定位问题”和“修改文件”两步。

一个更省 token 的任务写法是:

1
2
3
请只查看 src/auth/session.ts 和 tests/auth/session.test.ts。
目标:找出登录态丢失的原因。
不要扫描整个仓库,不要修改文件,先给出排查结论。

这比“帮我看看登录为什么有问题”更容易控制上下文。

原因一:长会话没有清理

最常见的原因是会话太长。你前面让 Claude Code 查过日志、读过大文件、跑过测试、讨论过方案,这些内容会逐步进入上下文。后面即使只是问一个小问题,也可能带着很重的历史包袱。

表现通常是:

  • 同样的小任务,越到后面越慢。
  • Claude Code 开始引用很早之前的内容。
  • 明明只改一处,它却反复回顾之前的方案。
  • token 消耗随着会话长度持续上升。

处理方法:

  • 一个独立任务开一个新会话。
  • 长任务阶段性总结后再继续。
  • 把已经确定的项目规则写进 CLAUDE.md,不要靠长对话反复保存。
  • 对旧讨论只保留结论,不保留完整过程。

如果你已经完成定位,只剩改代码,最好新开一轮,把结论和目标用短提示词重新交代。

原因二:Claude Code 读取了太多文件

有些任务描述太开放,Claude Code 会主动搜索和读取大量文件。例如:

1
帮我优化这个项目的登录逻辑。

它可能会读路由、组件、状态管理、测试、配置、文档,甚至历史脚本。文件越多,token 越高。

更好的写法是:

1
2
请只分析登录态刷新流程,优先查看 src/auth 和 tests/auth。
如果需要读取其他目录,先说明原因。

排查时可以观察 Claude Code 读了哪些文件。如果它不断打开无关文件,说明任务边界太宽,应该暂停并重新限定范围。

原因三:测试日志和构建输出太长

测试失败、类型检查失败、构建失败时,日志很容易膨胀。特别是前端项目、单元测试快照、依赖安装日志和编译错误,几百行输出很快就会吃掉上下文。

常见高消耗来源:

  • npm installpnpm install 的完整输出。
  • pytest -vv 的详细日志。
  • Playwright 失败时的大段 trace 信息。
  • TypeScript 一次报几百个错误。
  • Docker build 的完整层输出。

建议做法:

  • 只保留关键错误段。
  • 先运行更窄的测试命令。
  • 让 Claude Code 先看最后一段报错。
  • 对重复错误先人工归类,再交给模型判断。

例如:

1
pnpm test -- auth

通常比:

1
pnpm test

更适合排查单点问题。

原因四: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 输出摘要:

1
2
lint failed: 3 errors in src/auth/session.ts
full log saved to .tmp/lint.log

而不是把完整日志直接塞回对话。

原因七:MCP 工具返回太多数据

MCP 很方便,但有些工具默认返回大量结果。例如文档搜索、数据库查询、网页抓取、代码索引,如果没有限制结果数量,很容易把上下文撑大。

排查时看三个点:

  • 一次搜索返回了多少条。
  • 每条结果是否包含全文。
  • 是否重复查询同一类数据。

可以要求 Claude Code 限制结果:

1
只取最相关的 5 条结果,不要展开全文。先告诉我每条结果为什么相关。

如果 MCP 工具支持参数,优先设置 limitpage_sizesummary_only 这类选项。

原因八:模型切换导致单次成本变化

有时候 token 数没明显增加,但消耗感觉更快,是因为模型切换了。更强模型、长上下文模型、思考能力更强的模型,单位 token 成本或使用额度折算可能不同。

需要确认:

  • 当前使用的是哪个 Claude 模型。
  • 是否从轻量模型切到了更强模型。
  • 是否开启了更高 effort 或类似长推理模式。
  • 团队配置是否最近调整过默认模型。

如果只是做简单改写、解释和小脚本,本来就不一定需要最高档模型。可以按任务风险选择模型。

原因九:失败重试太多

当 Claude Code 连续跑错命令、测试反复失败、补丁多次冲突时,token 会快速累积。每一次失败都可能产生日志、解释、修复计划和新的工具调用。

处理方法:

  • 连续失败两次后暂停,不要继续让它盲改。
  • 要求它先总结失败原因。
  • 缩小任务到最小复现。
  • 把命令和错误输出固定下来,再决定下一步。

可以这样提示:

1
先停止修改。请只总结刚才两次失败的共同原因,并给出一个最小验证命令。

这比让它继续“再试一次”更省,也更安全。

原因十:任务描述太抽象

抽象任务会让 Claude Code 自己探索上下文,探索越多,token 越高。

高消耗写法:

1
帮我把这个模块优化一下。

低消耗写法:

1
2
3
请只优化 src/cache/store.ts 的过期清理逻辑。
不要改公开 API。
修改后运行 tests/cache/store.test.ts。

任务越像工单,Claude Code 越能少走弯路。

排障清单

如果你不知道 token 为什么突然变高,可以按这张清单排:

检查项 现象 处理
会话长度 越聊越慢、越用越贵 新开会话,保留结论
文件范围 读了大量无关文件 限定目录和文件
日志输出 测试或构建输出很长 只保留关键错误
CLAUDE.md 项目规则文件过长 精简为高频规则
Memory 跨项目信息混乱 清理临时项目细节
Hooks 自动输出太多 改成摘要和日志文件
MCP 搜索结果过大 限制条数和摘要
模型 默认模型变强 按任务切换模型
重试 失败后反复尝试 暂停,总结再改
任务描述 要求太泛 写成小范围工单

推荐的省 token 工作流

一个比较稳的 Claude Code 工作流可以这样设计:

  1. 先描述目标和边界。
  2. 要求 Claude Code 只读取必要文件。
  3. 第一轮只分析,不修改。
  4. 确认方案后再让它改小范围文件。
  5. 运行最小相关测试。
  6. 测试失败只保留关键日志。
  7. 任务结束后新开会话处理下一件事。

示例提示词:

1
2
3
4
目标:修复登录态刷新失败。
范围:优先查看 src/auth/session.ts 和 tests/auth/session.test.ts。
限制:第一轮不要修改文件,不要扫描整个仓库。
输出:只给出最可能的 3 个原因和验证方法。

这种写法不花哨,但非常省。

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 仍然能保持高效率,但不会每次小改动都变成一次昂贵的全仓库探索。

记录并分享
使用 Hugo 构建
主题 StackJimmy 设计