54 美元修了 50 个文件的 TypeScript 类型问题。这个数字来自 Aditya Patadia 六月那篇博客,真实花销,不是段子。我拿 GPT 5.5 的价目表往这个数上凑了一下:输入 5 美元每百万 token,输出 30 美元每百万 token。就算一半花在输出上,那也是将近一百万 token 的输出量,摊到 50 个文件,每个文件平均吐了两万 token。两万 token 是什么概念?把整个文件重写三遍还有富余。
所以问题来了:修一个类型错误,机器为什么要吐这么多字?答案不在模型聪明不聪明,在 decode 阶段的物理成本——它每吐一个 token,都要把整份权重从显存里读一遍。
我们要往下挖的就是这一层。自回归推理的成本结构,跟“AI 贵不贵”这件事的关系,比任何模型排行榜都直接。
先拆成两段看。推理不是一次性算完的,它分 prefill 和 decode 两步。Prefill 吃进去你塞给它的所有输入 token,并行过一遍注意力,产出 KV cache 和第一个输出 token。这一步算力是瓶颈,但输入 token 能并行,GPU 利用率能打满。真正贵的是 decode:从第二个 token 开始,每生成一个字,都要重算当前位置跟前面所有 token 的注意力。看起来像是在“接着算”,但每一步都要把整份模型权重从显存里读出来跑一遍——不是只跑新 token,是把几十 GB 的权重全部读一遍,就为了吐一个 token。
这就是为什么输出比输入贵六倍。这个 6:1 不是 Anthropic 或者 OpenAI 拍脑袋定的,是 decode 阶段内存带宽和算术强度的真实比例。翻一下推理时的瓶颈就能看到:prefill 阶段是 compute bound,你可以把 batch 撑大、把矩阵乘算满;decode 阶段是 memory bound,每生成一个 token 都要读一遍权重和 KV cache,算力再高也在等显存带宽。一张 H100 的算力是 989 TFLOPS,但显存带宽只有 3.35 TB/s,decode 阶段连算力的零头都吃不满。
我们用一段最朴素的伪代码把机制立起来:
def decode_step(weights, kv_cache, new_token):
# 每生成一个 token,都要把整份权重读一遍
for layer in weights: # 真实实现里这是几十亿参数的矩阵乘
new_token = layer(new_token, kv_cache)
kv_cache.append(new_token)
return new_token
这个循环就是 decode 的骨架。for layer in weights 这一层,在 H100 上跑一次,读的是几十 GB 的数据。你让它生成两万 token,它就把整份权重读了四万遍——因为每个 token 要过全部层,每层都要读一遍对应权重。TFLOPS 在这个场景里几乎是个摆设,墙在带宽。
到这一步,54 美元的去向就清楚了。那不是“模型思考了 50 个文件”收的智商税,是 agent loop 把 decode 这个 memory bound 的循环跑了不知道多少轮。每一次工具调用、每一次读取文件、每一次试跑类型检查,上下文里就追加一段工具输出,然后下一轮 prefill 要把整个上下文重新走一遍,再接着 decode。50 个文件来回修,同一个文件的类型错误被读进去、吐出来、再读进去、再吐出来。两万 token 每个文件的输出量,就是这么一轮一轮叠出来的。
有个细节我一开始也搞反了:我以为是模型输出太啰嗦,费用才飙上去。后来把 agent loop 的上下文扩展开算了一遍,发现大头不在“它说多少”,在“它重复看到多少”。你每调一次类型检查,工具给你吐 5000 token 的结果,这 5000 token 下一轮 prefill 全要重新算一遍注意力。修一个文件来回跑五轮,同一个文件的内容被 prefill 了五次。输入 token 看起来便宜,但重复 prefill 的累积量,比输出贵多了——尤其当上下文从 10K 涨到 100K,prefill 的算力成本跟着序列长度超线性地涨。
这就是为什么那些 AI 网关的数据里,修复任务的 token 消耗量总是比你以为的大一个数量级。你以为模型只看了一遍文件,实际上它把文件读了五遍,每一遍都在 prefill 里重新算了一次注意力。
说回定价本身。GPT 5.5 的 5/30 价目表不是孤立的信号。Claude Opus 4.8 跟 4.7 定价相同,这被拿来做“性能提升趋缓”的证据,但我觉得这个解读只对了一半。定价相同说明的不是模型没进步,是单位 token 的边际成本没降——新一代模型要么更大、要么用了更耗算力的架构,把性能提升吃掉了。模型实验室不是慈善机构,如果新模型的推理成本真的降了,他们有一百个理由降价抢市场。不降价,只说明成本结构没变。
再往旁边看,GLM-5.2 在编码基准上的成本是 GPT 5.5 的十分之一,开放权重。这件事比“谁第一”重要。它说明 decode 的 memory bound 墙不是不可动的——模型变小、量化更狠、架构上减少每 token 要读的参数量,成本就能往下跳一个数量级。那些说“AI 贵是暂时的”的人,赌的是这个方向;那些说“AI 就这么贵了”的人,赌的是 decode 阶段读权重这件事永远不变。两边都不全对,但成本坍塌的路径已经看见了,不在云端降不降价,在权重能不能缩小到本地能跑。
这就带出最后一个问题:本地模型四到五年内变得可行,靠的是什么?不是把云端那个 70B 模型原封不动搬回家,是把它缩到 decode 时读得动的程度。Cerebras、Groq、Google 的 TPU 这类专用芯片,成本比 H100 低 30% 到 70%,改变的是单位算力的价格。但本地跑模型最大的墙不是算力,是内存带宽和权重驻留——你家里一张显卡的显存带宽,撑不住一个 70B 模型 decode 时每 token 读整份权重的需求。所以本地化的真正路径是把简单任务做小:代码补全、校对、事实核查,这些不需要千亿参数的模型,一个几 B 到十几 B 的模型量化后塞进显存,decode 时读的权重少一个数量级,价格自然从云端回到本地。
这件事捅到底,成本坍塌不是某个实验室发善心降价,是推理从“读大权重”转向“读小权重”的过程。GPT 5.5 每吐一个 token 读一遍的那几十 GB 权重,三年后可能换成四张消费级显卡上分开放的七十亿参数。到那时候,修 50 个文件的类型问题,花掉的不是 54 美元,是本地电脑跑一个下午的电费——因为 decode 阶段读整份权重的循环还在,但那份权重小到内存带宽不构成墙了。
