拆解 Claude Code 日志中的上下文成本
作者对7802次调用按消息标识去重并按标价估算,发现上下文超过40万 token 的调用约占12%,却贡献约31%的成本,子智能体占总估算费用一半以上。这些是 API 等价估算,并非订阅账单实付金额。
AI 深度解读
Claude Code 的开销,可能藏在每轮重复带上的历史里。作者给自己的 7,802 次调用按 API 标价估算:上下文超过 400k tokens 的 954 次调用,占调用量的 12.2%,却占了 30.9% 的费用。
这组记录值得看的地方,是它把「长会话越来越贵」拆成了可检查的数据。但它不能解释订阅额度怎么扣,也没有证明清空会话就一定省钱。对日常 AI 编程,更有用的是先看清自己的上下文和子代理花在哪里。
为什么少量长上下文调用占了三成费用
作者连续几周重度使用 Claude Code,会话较长,也用了大量子代理(sub-agents)。他读取 ~/.claude/projects 下每个会话的 .jsonl 文件,提取输入、缓存写入、缓存读取和输出 token 数。同一条消息可能出现在多行,因此按 message id 去重,每条消息只计一次。
他的上下文口径是:
input + cache reads + cache writes
也就是一次调用带进去的全部上下文,包括通过缓存复用的部分。缓存命中不等于这部分 token 消失了。
作者按 10 月 26 日的 Anthropic 标价计算。原文采用的 Opus 5.5 单价为:每百万输入 tokens 4 美元、输出 20 美元、缓存读取 0.20 美元。缓存写入采用什么价格,正文没有交代。
下面是作者的分档结果,费用单位为美元:
band calls % calls cost % cost
<100k 2787 35.7% $114.83 20.3%
100-200k 2898 37.1% $174.04 30.8%
200-400k 1163 14.9% $101.71 18.0%
400k+ 954 12.2% $174.78 30.9%
重点看最后一行:400k+ 调用的费用,几乎追平了数量约为它三倍的 100-200k 档。
全部记录折算约 565 美元,其中子代理约 289 美元,超过一半。作者还观察到,输出 tokens 对总费用贡献很小,主要开销来自反复发送上下文。这是他的工作样本呈现的结果,不能直接套到所有任务上。
缓存便宜,为什么长会话还是会贵
按作者描述,每次调用都会重新携带完整对话。缓存降低了重复内容的单价,但没有让重复内容免费。
一旦会话积累到几十万 tokens,后面的每一轮都要继续承担这份上下文费用。单轮看着不多,连续操作就会累积。影响费用的不只是做了多少次调用,还有每次调用背着多少历史。
不过,这份账单回答不了另一个常见问题:为什么会触发用量限制。
作者在约两周内碰到了 14 次五小时用量限制。每次触限前五小时,按标价折算的用量约为 19 至 43 美元。区间差得很大,他明确表示,仅凭自己的日志无法推断限制规则。
他提出了几种待验证的做法:任务完成后清空会话;下一项任务从短摘要开始;只负责读取和搜索的子代理使用更便宜的模型。这些是作者准备尝试的方案,还不是测出来的省钱结论。
我的判断
这份分析最有价值的是统计口径:按消息去重,把缓存读写纳入上下文,再按长度分档。它比单看调用次数更接近「钱花在哪里」这个问题。
局限也很明确。样本只有约三周,且偏向长会话和大量子代理;400k 是作者自行选择的分界点,没有证据表明它是普遍适用的成本拐点。作者使用订阅套餐,这些数字只是 API 等价估算,不是实际订阅账单,也不能当成额度扣减公式。
相比一直延续旧会话,从短摘要开启新任务,有减少历史负担的可能,但也可能丢掉约束,导致模型重新搜索、重新读文件。便宜模型能否胜任子代理工作,同样需要看任务完成质量。原文没有这些方案的对照数据,目前只能算经验假设。
另外,子代理占费超过一半,并不能证明子代理效率低。作者没有提供同一批任务关闭子代理后的耗时、费用和完成情况。
能拿来做什么
-
先给自己的 Claude Code 日志算账。作者提供的
ctxtax是单文件 Python 脚本,无需安装额外包,只读取本地文件,输出数字,不输出消息正文。原文运行方式如下,第二行才是执行本地统计:curl -O https://raw.githubusercontent.com/TrueHorison/ctxtax/main/ctxtax.py python ctxtax.py -
把「任务完成后用短摘要开新会话」当成一次对照实验,观察同类任务的上下文用量和返工情况,再决定是否固定采用。
-
如果经常使用子代理,先单独核算它们的费用,再尝试让较便宜的模型承担读取、搜索任务,同时检查结果是否够用。
-
想记录触限情况,可以运行
python ctxtax.py --meter。它会逐次输出触限日期、此前五小时的用量和模型组合,便于积累可比较的记录;它目前只支持 Claude Code 日志。