JeecgBoot AI专题研究 | Claude Code 缓存机制深度剖析:7 个隐藏 Bug 叠加触发的「死亡螺旋」
你的配额去哪了?
如果你最近发现自己的 Claude Code 额度消耗得莫名其妙地快——相信我,你不是一个人。
就在这几天,一位 Claude Max 20x 订阅用户发了一篇让整个社区炸锅的帖子:仅仅 4 月 1 日这一天,他就烧掉了整整一周 43% 的 token 配额。 他没有做什么异常操作,只是正常写代码。
这不是玄学,也不是 Anthropic 在悄悄限流。他花了几天时间逆向分析 Claude Code 的压缩后源码(cli.js),找到了 7 个可以叠加触发的缓存 Bug。这些 Bug 单独来看都能让你多花点冤枉钱,但叠在一起,就会形成一个把你的订阅费整包吞掉的「死亡螺旋」。
最核心的一个 Bug:Extra Usage 会悄悄关掉你的缓存
7 个 Bug 里最致命的,是关于缓存时长的一处静默降级。
在 Claude Code 的 cli.js 里,有一个函数负责向服务器申请缓存时长——要么 1 小时,要么 5 分钟。正常情况下,你会拿到 1 小时缓存,这很合理。
但这个函数里藏了一段逻辑:一旦检测到你进入了 Extra Usage(超额付费)模式,它就会静默地把缓存申请从 1 小时降级为 5 分钟,全程零提示。
这意味着什么?只要你停下来超过 5 分钟——去趟卫生间、接个电话、开个会——回来之后就是一次完整的上下文重建,费用直接从你的 Extra Usage 余额里扣。
数字很具体:以 220K 的上下文为例:
- 1 小时缓存:每轮约 0.22 美元
- 5 分钟缓存:每轮约 0.61 美元(贵了整整 1.8 倍)
换算下来,30 美元的 Extra Usage 额度:
- 1 小时缓存模式下:大约能撑 135 轮对话
- 5 分钟缓存模式下:只能撑约 48 轮
更糟的是,这会触发「死亡螺旋」:其他缓存 Bug 先把计划内配额加速耗尽 → 一旦触发 Extra Usage → 客户端检测到后把缓存降为 5 分钟 → 每次短暂停顿都变成全额重建 → Extra Usage 迅速蒸发 → 被锁定等待 5 小时重置 → 循环重来。
作者验证过,服务器完全愿意提供 1 小时缓存,是客户端主动放弃申请的。修复方法很简单:给那个函数打一行补丁,让它始终返回 true。但每次版本更新后会被覆盖,需要重新打。
另外 6 个 Bug,每一个都在悄悄扣钱
Bug 1(原生安装包问题):官方提供的二进制安装文件内置了一个自定义 Bun 运行时,这个运行时会在每次请求时损坏缓存前缀。解决方式:改用 npm install 安装,并通过以下命令验证:
file $(which claude)
结果应该是符号链接,而不是 ELF 二进制文件。这个问题影响范围极广,且是静默发生的。
Bug 2(v2.1.69 ~ v2.1.90,已修复):长达 28 天、横跨 20 个版本的会话恢复 Bug。恢复会话时会丢失关键的附件类型,导致每次恢复都是完整的缓存未命中。v2.1.91 已修复,务必升级。
Bug 3(已修复):自动压缩功能没有熔断机制,压缩失败后会无限重试。作者从内部源码注释里发现,有 1279 个会话出现了 50 次以上的连续失败记录。v2.1.89 已修复。
Bug 4(工具结果截断):Bash 工具的输出上限是 30K 字符,Grep 工具是 20K 字符,超出部分被截断。截断后的残缺内容会破坏缓存前缀,让后续每一轮都无法命中缓存。
Bug 5(仍未修复):客户端会在大型对话记录中伪造假的限速错误,显示 model: synthetic、token 数为零——实际上根本没有发起任何 API 调用,纯属幻觉报错。
Bug 6(仍未修复,服务端):服务器的压缩机制会在会话进行中悄悄删除工具结果,不给任何通知,同样破坏缓存,且无法从客户端打补丁修复。
作者特别强调:这些 Bug 之间的关系是相乘而非相加。如果你同时触发了 Bug 1(原生安装包)、Bug 3(压缩无限重试)、Bug 5(Extra Usage 降级缓存),可能在不到两小时内就耗尽整整一周的配额。
哪些人受影响,哪些人没事?
评论区的自发对比揭示了一个很清晰的规律:
- 受影响:Claude Code CLI 原生安装包(ELF 二进制)用户
- 不受影响:VS Code 插件、桌面应用、网页版用户
一位在 WSL 环境下高强度使用 Claude Code 的用户证实,改用 npm 安装后,额度消耗速率立刻恢复正常。一直用 npm 安装的用户则表示完全没遇到这些问题。
结论很明确:这个吞额度 Bug 几乎是 CLI 原生安装包的专属灾难。
立即可以做的几件事
检查安装方式:运行
file $(which claude),确认输出是符号链接而非 ELF 二进制。如果是后者,卸载原生包,改用npm install -g @anthropic-ai/claude-code。升级版本:确保在 v2.1.91 或更高版本,修复会话恢复附件丢失和压缩无限重试两个问题。
手动打补丁(高级):如果你有能力编辑压缩后的
cli.js,可以给缓存 TTL 函数打一行补丁,让它始终申请 1 小时缓存。记住每次更新后需要重新打。
Anthropic 的回应:透明度在提升,但仍不够
背景不只是这 7 个 Bug。过去几个月里,Claude Code 已经经历了一场信任危机:有开发者发现模型的思考深度从 1 月底的约 2200 字符,到 2 月下旬骤降至 720 字符,降幅高达 67%,3 月初更进一步跌至 560 字符。
Claude Code 负责人 Boris Cherny 不得不出面解释:redact-thinking 只是 UI 层面的隐藏,不影响实际推理;真正的行为变更是 2 月引入的「自适应思考」模式和 3 月将默认 effort 级别调为 Medium。
好消息是,最新的 v2.1.92 版本在透明度上有实质性改进:
- /cost 命令现在会展示基于每个模型及缓存命中情况的详细费用分解
- Pro 用户返回会话时,底部状态栏会主动提示缓存已失效,并预估下一轮将发送多少未缓存 token
总结
每当一个工具开始在用户看不见的地方,通过缩短缓存时长、隐藏思考逻辑来平衡自己的账本时,它牺牲的不只是几美金的 Token 费,更是过去积累下来的开发者信任。
当前最重要的一步:检查你的 claude 是符号链接还是 ELF 二进制。如果是后者,换 npm 安装,这一步零风险,且可能让你的 Max 订阅续命一倍以上。
本文为 JeecgBoot AI 专题研究系列文章。