一个开发者的真实经历
上周,我收到一位朋友的微信:
“我用 Claude Code 接 DeepSeek API,明明代码没怎么变,token 消耗却突然涨了好几倍,一天就把额度用完了。”
这个情况不是个例。在 GitHub 上,至少有 80 多个相关 issue,核心问题都指向同一个点——Claude CLI 默认添加的 CCH(Claude Code Attribution Header)导致第三方服务的缓存失效。
问题到底出在哪?
让我们先搞清楚什么是 CCH。
Claude Code 每次向模型发送请求时,会在系统提示词(system prompt)的最开头插入一段特殊字符串,格式类似这样:
anthropic-attribution: cch=abc123-def456-ghi789-jkl012
这段字符串相当于一个"请求指纹",每次请求都不一样。
缓存机制是怎么工作的?
很多第三方 API 服务(包括各种中转站、代理网关)都有提示词缓存机制:
当你发送一个请求时,服务会把请求内容的开头部分作为缓存 key
如果下次请求的开头和之前一样,就直接用缓存,不用重新计算
这样既省时间,又省 token
CCH 为什么会让缓存失效?
问题就在这里——缓存比对通常是按"开头内容"来算的。
Claude Code 每次在开头塞的 CCH 都在变,第三方服务就会以为这是个全新的请求,缓存完全失效,只能从头开始计算。
结果就是:响应变慢,token 消耗暴涨。
为什么官方 API 没事?
Anthropic 自家的服务器认识这个 CCH,算缓存时会自动把它忽略掉,所以官方渠道不受影响。<