9 月刚过完,我把 WorkBuddy 后台的用量报表拉出来看了一眼,1.73 亿 token 这个数字直接把我钉在椅子上。第一反应不是"我到底写了多少代码",而是"这要是按官方价一分不少地付,得掏多少钱"。我相信很多用 WorkBuddy 的人都有过这个瞬间——平时用着没感觉,一到月底看账单或者看用量,才发现 token 消耗速度远超预期。这篇就把这笔账从头到尾算清楚,顺便聊聊这 1.73 亿 token 到底花在哪、哪些是能省的、哪些是省不掉的。
先把结论方向说清楚:1.73 亿 token 不是一个单一价格能算出来的数字,因为 WorkBuddy 背后调用的是不同模型,输入和输出的单价不一样,缓存命中的部分价格又完全不同。所以真正要算的不是"1.73 亿乘以某个单价",而是要先搞清楚这 1.73 亿里有多少是输入、多少是输出、多少命中了缓存。这也是我写这篇的核心动机——很多人算 token 成本时只乘一个单价,结果要么高估要么低估,差出好几倍。
1. 先把 1.73 亿 token 拆开看,别急着乘单价
1.1 为什么"总量乘单价"是错的
大多数人算 token 成本的方式是:拿总 token 数乘以一个印象中的单价,得出一个数就完事。这个算法在早期简单对话场景下勉强能用,但在 WorkBuddy 这种编程助手场景里会错得离谱。原因有三个:第一,输入 token 和输出 token 的单价通常差好几倍,输出往往更贵;第二,缓存命中的输入 token 价格可能只有正常输入价的十分之一甚至更低;第三,不同模型的单价差异巨大,同一个账号里可能同时跑着好几个模型。
所以正确的第一步不是算钱,而是拆结构。1.73 亿 token 这个总量,至少要拆成四个维度:输入 token、输出 token、缓存命中 token、缓存未命中 token。这四个数字的单价各不相同,混在一起算就是一笔糊涂账。
1.2 编程场景下输入输出的大致比例
根据我自己在 WorkBuddy 里的使用习惯,以及和几个同样重度使用的朋友交流下来的经验,编程助手场景下输入 token 通常远大于输出 token。原因很直观:你每次提问,工具会把当前文件内容、相关上下文、历史对话、系统提示词一起打包发给模型,这些全是输入;而模型返回的往往是一段代码或者几句解释,输出量相对小。
在典型的代码补全和对话式编程场景里,输入输出比例大概在 8:1 到 15:1 之间。取一个中间值,假设是 10:1,那么 1.73 亿 token 里,输入大约 1.57 亿,输出大约 1570 万。这个比例不是拍脑袋,你可以自己在 WorkBuddy 的用量明细里核对——如果它提供了输入输出分项的话。如果没有分项,那就只能按经验比例估算,并在心里留一个浮动区间。
提示:不同工具的统计口径不一样,有的把系统提示词算进输入,有的单独列出来。核对时一定要看清楚报表的字段定义,否则拆出来的比例会失真。
1.3 缓存命中率是这笔账里最大的变量
缓存命中这件事,是很多人算 token 成本时完全忽略的一环,但它对最终金额的影响可能超过 50%。原理不复杂:当你反复在同一个项目、同一批文件上提问时,很多上下文是重复的。如果工具支持提示词缓存,这部分重复内容第二次及以后就不再按全价计费,而是按缓存价计费,通常便宜一个数量级。
WorkBuddy 这类工具在长会话、大项目场景下,缓存命中率可以做得相当高。我自己的体感是,在一个连续开发 session 里,缓存命中率能到 60% 到 80%。但这个数字波动很大,取决于你的使用模式:如果你每次都是全新对话、每次都在不同项目间跳,缓存命中率就低;如果你在一个项目里连续工作几小时,命中率就高。
假设 1.73 亿 token 里,缓存命中率取 70%,那么命中缓存的输入 token 约 1.1 亿,未命中的输入约 4700 万,输出 1570 万。这三个数字才是后面算钱的基础。
2. 按官方价逐项算钱:一笔一笔摆出来
2.1 单价假设与说明
这里必须说明一点:WorkBuddy 背后可能调用多个模型,不同模型单价不同,而且官方价会调整。所以下面我用一组"典型编程模型"的公开单价区间来算,目的是让你掌握算法,而不是给你一个精确到分的数字。你自己算的时候,把单价换成你实际用的模型价格即可。
我取一组常见的量级作为演示:输入未命中缓存按每百万 token 3 美元,输入命中缓存按每百万 token 0.3 美元,输出按每百万 token 15 美元。这组数字接近当前主流中高端编程模型的定价水平,输出价明显高于输入价,缓存价明显低于输入价,符合行业普遍规律。
2.2 分项计算过程
把上一节拆出来的数字代进去:
- 缓存命中的输入:1.1 亿 token = 110 百万 token,单价 0.3 美元/百万,费用 = 110 × 0.3 = 33 美元
- 缓存未命中的输入:4700 万 token = 47 百万 token,单价 3 美元/百万,费用 = 47 × 3 = 141 美元
- 输出:1570 万 token = 15.7 百万 token,单价 15 美元/百万,费用 = 15.7 × 15 = 235.5 美元
三项相加:33 + 141 + 235.5 = 409.5 美元。
按这个假设,1.73 亿 token 的官方价大约是 410 美元上下。注意,这里面输出只占了 token 总量的不到 10%,却贡献了超过一半的费用。这就是为什么前面强调必须拆开算——如果你拿 1.73 亿直接乘以输入单价 3 美元/百万,会得到 519 美元,高估了;如果乘以缓存价,会得到 52 美元,严重低估。
2.3 不同缓存命中率下的金额对比
缓存命中率是最大的不确定因素,我把它做成一张表,方便你对照自己的实际情况:
| 缓存命中率 | 命中输入费用 | 未命中输入费用 | 输出费用 | 合计 |
|---|---|---|---|---|
| 50% | 23.6 美元 | 235.5 美元 | 235.5 美元 | 494.6 美元 |
| 60% | 28.3 美元 | 188.4 美元 | 235.5 美元 | 452.2 美元 |
| 70% | 33 美元 | 141 美元 | 235.5 美元 | 409.5 美元 |
| 80% | 37.7 美元 | 94.2 美元 | 235.5 美元 | 367.4 美元 |
| 90% | 42.4 美元 | 47.1 美元 | 235.5 美元 | 325 美元 |
这张表说明一个很实际的问题:把缓存命中率从 50% 提到 80%,能省下大约 127 美元,接近总费用的四分之一。而提升缓存命中率,很多时候不需要改代码,只需要改使用习惯。
2.4 如果换成更便宜或更贵的模型
上面的算法是通用的,换模型只需要换单价。如果你用的是偏轻量的模型,输入可能只要 0.5 美元/百万,输出 1.5 美元/百万,那同样的用量可能只要几十美元。如果你用的是顶配模型,输入 5 美元、输出 20 美元甚至更高,那这笔账可能冲到六七百美元。所以"1.73 亿 token 要花多少钱"这个问题,脱离模型谈价格是没有意义的。
3. 这 1.73 亿 token 到底烧在了哪些操作上
3.1 长上下文打包是最大的消耗源
WorkBuddy 这类编程助手最耗 token 的行为,不是模型生成代码,而是每次请求时把大量上下文塞进去。你打开一个几千行的文件,问一个关于其中某个函数的问题,工具很可能把整个文件甚至多个相关文件都作为上下文发出去。一次请求的输入可能就是几万 token,一天问几十次,几百万 token 就没了。
我复盘自己的使用记录,发现消耗最大的几类操作是:跨文件重构、让工具理解整个模块的架构、反复追问同一个复杂问题。这些操作的共同点是上下文大、来回轮次多。相反,简单的单行补全、小范围修改,token 消耗其实很有限。
3.2 反复重试和无效对话的隐性成本
还有一个容易被忽略的消耗源:无效对话和反复重试。模型第一次没理解你的意图,你换个说法再问一遍,这一遍的输入里包含了上一轮的完整历史,token 量翻倍。如果来回五六轮才解决问题,实际消耗可能是理想情况下的好几倍。
我自己踩过的坑是:遇到一个复杂 bug,连续追问了十几轮,每轮都带着完整历史,最后算下来这一个 bug 就烧掉了上千万 token。后来我改成"每解决一个子问题就开新对话,只带必要上下文",同样的工作量,token 消耗降了差不多一半。
3.3 哪些消耗是省不掉的
也要客观说,有些 token 是省不掉的。比如你确实需要模型理解一个大项目的整体结构,那大上下文就是必须的;比如你确实需要模型生成大量代码,那输出 token 就是必须的。省 token 的前提是不牺牲效果,为了省钱把上下文砍到模型看不懂,反而会因为反复重试花更多钱。这个平衡点需要自己摸索。
4. 把 1.73 亿 token 压下来的实操手段
4.1 用缓存友好的方式组织对话
提升缓存命中率最有效的办法,是让重复的上下文尽量保持稳定。具体做法:在同一个项目、同一批文件上连续工作时,尽量在同一个对话里进行,不要频繁开关新对话;如果必须开新对话,尽量让系统提示词和项目背景保持一致,这样缓存才能复用。
反过来,最伤缓存的做法是:每次提问都重新粘贴一遍项目背景,或者频繁在不同项目间跳来跳去。前者让缓存无法命中,后者让缓存频繁失效。我实测下来,光是"同一项目连续对话"这一个习惯,就能把缓存命中率从 50% 左右提到 70% 以上。
4.2 控制上下文体积的几个具体技巧
- 提问前先关掉不相关的文件,减少被打包进上下文的无关内容
- 长文件只保留相关片段,不要把整个几千行文件都开着
- 复杂任务拆成多个小任务,每个小任务只带必要上下文
- 定期清理对话历史,避免历史越滚越长
这些技巧看起来简单,但累积效果很明显。我做过一次对比:同一个重构任务,用"全文件上下文 + 单轮长对话"的方式,消耗约 800 万 token;用"精简上下文 + 拆成 5 个子任务"的方式,消耗约 350 万 token,效果还更好,因为模型每次只聚焦一个小问题,出错率更低。
4.3 模型分级使用
不是所有任务都需要顶配模型。简单的代码补全、格式调整、注释生成,用轻量模型完全够用,价格可能只有顶配的十分之一。只有真正复杂的架构设计、疑难 bug 排查,才值得上顶配模型。把任务按难度分级,匹配不同模型,是控制成本最直接的手段之一。
我自己的分配大概是:70% 的日常操作走轻量模型,25% 走中档模型,只有 5% 的硬骨头走顶配。这样整体成本能压到全部用顶配的三成左右,而实际体验下降非常有限。
5. 算完这笔账之后我的几个真实体会
第一个体会是,token 成本的大头往往不在你以为的地方。很多人盯着输出 token 的价格,觉得输出贵就少让模型输出,但实际上输入 token 才是量的主体,缓存命中率才是价格的关键杠杆。把精力花在提升缓存命中率和精简上下文上,回报远大于抠输出。
第二个体会是,用量报表一定要定期看。我 9 月之所以会烧到 1.73 亿,很大原因是前半个月完全没看报表,等发现的时候已经晚了。后来我改成每周看一次,一旦发现某天用量异常,就回去查那天的操作,往往能定位到某个低效的使用习惯。
第三个体会是,省 token 和用好工具不矛盾。刚开始我也担心精简上下文会影响效果,实测下来,只要精简的是真正无关的内容,效果反而更好,因为模型不会被无关信息干扰。真正影响效果的是上下文里有没有关键信息,而不是上下文有多长。
最后分享一个我一直在用的小习惯:每次开始一个新任务前,先花十秒钟想一下"这个任务需要模型看到哪些文件、哪些历史",然后只带这些。这十秒钟的思考,往往能省下几百万 token。1.73 亿 token 按官方价算下来四百美元上下,但如果使用习惯再优化一轮,同样的工作量压到两三百美元是完全可行的。这笔账算清楚之后,我对 WorkBuddy 的用法也彻底变了。