智能AI
evening
全球程序员都在给Anthropic白送钱!官方终于看不下去了
2026-08-15
1 阅读
约10分钟阅读
新智元
字号:
新智元报道 就在刚刚,Anthropic发了一篇博客。 核心信息就是: 各位,别再烧冤枉token了,我们都看不下去了! 为此,官方详细列举了六条省钱心法,先贴为敬: 1. 任务做完就/clear。 修完一个bug就清掉当前对话,别让上一个任务读过的文件和命令输出拖进下一个任务里,白白占着上下文。 2. 开局就定好模型和推理强度(effort level)。 中途切换的话,之前积累的提示缓存会全部失效,整段对话历史要按全价重新计算一遍。 3. 用@引用文件,别手打路径。 用@直接把文件附到消息里,Claude不用再花一次工具调用去读。如果你只打文件名,Claude可能先搜一圈再打开好几个文件试探,这些操作全部会进入对话历史,之后每一轮都带着。 4. 给输出多的命令加静默参数(quiet flag)。 在CLAUDE.md里写一句类似--reporter=dot的配置,让测试输出只打印几行摘要,不是几百行详情。输出越短,占的上下文越少。 5. /compact在休息前做。 对话还在缓存里的时候压缩,成本只有正常的十分之一。等你回来缓存过期了再压,就得按全价重新读一遍再压缩。 6. 大输出任务扔给子Agent。 子Agent在一个独立的上下文窗口里运行,做完只把结论传回来,过程中读的文件和跑的命令输出不会进入你的主对话。 一个token的前世今生 用Claude Code干活,API按量走,订阅制月费从20美元到200美元分三档。 根据官方推算,开发者日均消耗13美元token,月均花在150到250美元之间。 这还只是平均水平。同样修一个bug,问法不同,花费能差出好几倍。 而且每一轮对话都在拖着前面所有轮的全部内容重新发送,会话越长,每一轮就越贵。 这些钱花在哪,得从token的计价逻辑说起。 每次你在Claude Code里输入一条指令,背后发生两件事。 第一件叫 预填充(prefill) ,也就是模型一口气读进你的整个请求,包括系统提示词、CLAUDE.md、你的消息,以及之前对话里积累的一切。这些都是输入token。 第二件叫 解码(decode) ,也就是模型一个字一个字往外写的过程,包括它的思考、工具调用和你最终看到的文字。这些都是输出token。 关键区别在这里。 预填充是 并行 的,一次性把所有输入token过一遍GPU。解码是 串行 的,每吐一个token都要跑一次模型。200个token的回复,就是200次独立运算。 所以也就不难理解,为什么输出token要比输入token贵 5倍 了 。 在这个基础上,最终账单取决于两件事。 第一是模型,决定每个token的单价。 Opus 5,输入5美元/百万token,输出25美元。 Sonnet 5,输入2美元,输出10美元。 Haiku 4.5,输入1美元,输出5美元。 第二是推理强度,决定token的数量。 一个会话里大部分输出token都是思考token,推理强度控制的就是这个量。推理强度越高,模型想得越久,输出的思考token越多。max和low之间能差好几倍。 简单活用Sonnet,硬骨头才上Opus。牛刀杀鸡的钱,花得最冤。 提示缓存,是最大的省钱利器 token定价里还有一个巨大的变量,就是 缓存 。 Claude Code的每次请求都从相同的前缀开始,也就是系统提示词、工具定义、CLAUDE.md和对话历史。 如果这次请求的前缀和上次逐字节一样,服务器就不重新算,直接加载上次的计算结果。 缓存读取只要正常输入价的 0.1倍 ,直接省掉90%。 写入缓存贵一点,最高2倍。但写入只发生一次,后面每一轮都享受0.1倍读取。 举个例子。 假设你的对话历史有5万个token。不走缓存的话,每一轮光是重读这5万token就得付全价。但只要命中缓存,同样的5万token只需要花十分之一的钱。 一个会话跑二三十轮,缓存命中攒下来的折扣是天文数字。 这是你最大的薅羊毛杠杆。 但缓存有个致命弱点。它必须从请求的第一个字节开始连续匹配,中间任何地方变了,从那里往后全部作废。 具体来说,一共有六种情况: 1. /model切模型: 每个模型的缓存独立。从Sonnet切到Opus,整个对话历史按Opus的价格重新预填充,没有折扣。 2. /effort切推理强度: 推理强度也是cache key的一部分,切换之后整个对话历史都要重新计算。 3. 开关Fast mode: 效果和前两种一样,缓存直接失效。 4. /compact压缩对话: 对话被重写成摘要,原来的内容全部对不上,旧缓存直接作废。 5. 时间过期: 订阅用户的缓存保活1小时,API用户默认5分钟。超时后下一轮全量重算。 6. 恢复旧会话: 隔了太久缓存早就没了,几乎100%要全价重新计算。 坏消息是,只要中一个就意味着整个对话历史从0.1倍打回原价。 好消息是,当你知道什么会让缓存失效时,就能知道怎么保住它。 比如,会话开头就锁定模型和推理强度,全程不切。不在缓存还热的时候做/compact,等到准备休息的时候再跑。 这里,还有个隐藏坑。 opusplan模式 每次进出plan都切模型 。进一次,缓存失效一次。出来,又失效一次。来回跳的话,每跳一次都是一笔全价prefill。 你的会话,正在偷偷变胖 缓存帮你把重复发送历史的成本压到十分之一。 但有一件事它帮不了。你的历史本身在一轮一轮地膨胀。 每次Claude读一个文件,文件内容追加到对话里。每次Claude跑一个命令,输出也追加进去。从追加那一轮起,后面每一轮都带着。 第40轮对话在重新发送第1到39轮的全部累积内容。 这种增长,是接近平方级别的 O(n²) 。 C Claude Code有个兜底机制。 命令输出超过30000字符,就不往对话里塞了,而是写到一个临时文件里,对话里只放一句摘要。但30000以下的输出没人管。 比如一个测试框架跑完,打印400行通过记录,每行几十个字符,总量不到3万,够不上这个阈值。 于是这400行就原封不动地留在了对话历史里,后面每一轮都跟着重新发送一遍。 对此,Anthropic博客里给了几招很实用的瘦身方法。 1. @引用文件。 不要手动输入路径让Claude自己去找。@引用会把文件直接附到消息里,省掉一次读取操作。 你只说文件名的话,Claude可能先grep搜一圈,打开好几个文件看哪个对。然后这些试探就会全部进入对话历史,徒增成本。 2. 给noisy命令加quiet flag。 在CLAUDE.md里写一句「run tests with npx vitest run --reporter=dot」,以后每次跑测试只输出几行点状结果,不是几百行详情。一分钟的配置,以后每个会话省几百行上下文。 3. subagent隔离大输出任务。 subagent在自己独立的上下文窗口里跑,做完只传答案回来,过程中读的文件和命令输出全部丢弃。适合「去翻翻日志有什么异常」「帮我过一遍这个大文件」这种活。你只要结论,不要过程。 还有最重要的一条。 4. /clear切任务。 修完一个bug就/clear,开始下一件事。上一个bug的文件、命令输出、中间探索,全部和下一个任务无关,但如果不清,它们在后面每
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱