都标5美元,账单差三成!OpenAI高管:token从来没法直接比价

浏览19次 点赞0次 收藏0次

同一段文字,扔给两个模型,一个切成766个token,另一个切成1170个。

甩出这组数字的,是OpenAI Codex负责人Tibo。


他的原话是:一个OpenAI的token,并不等于另一个模型的token。更低的单token价格,并不一定意味着更低的账单。

所有人都在用「每百万token多少美元」比价,好像token是个像克、像千瓦时那样的标准单位,但它不是。

为了让人更容易看懂,他还讲了个披萨的故事。

两张一模一样的披萨。

第一家切8块,每块2美元。第二家切16块,每块1.25美元。第二家招牌上写着更便宜,可整张吃下来要20美元,第一家只要16美元。

他补了一句:你的胃并不关心你刚才吃了几块。


每片更便宜,整张反而更贵。切法不同,单价就失去了可比性。

token是模型计费的最小单位,你可以把它理解成是模型切文字的「刀法」。

同一段话,刀法不一样,切出来的块数就不一样。切出多少块,按多少块收钱。块数越多,账单就越贵。

这次对照覆盖英文、技术文本、多语言和数字内容。

GPT-5.6 Sol的分词器用掉766个token,Claude Opus 5的估算结果是1170个。

同样一段文字,GPT-5.6 Sol的刀法少切出34.5%。

而两家的输入价,都是每百万token5美元。

单价一模一样,块数少了三成,输入费用也跟着少了三成。

麻烦也在这儿。

如果连「一个token有多大」这件事两家都对不齐,那所有人天天转来转去的那张API价格对比表,到底还算不算数?

同一段文字

为何数出两个数?

这是因为token这个单位,压根就没有统一的计量单位。

每家厂商自己训练分词器,自己决定把文本切成多大的碎片。

常见词,分词器整个吞下,生僻词,一个词会被拆成三四块。

拿英文举例最直观。the、and、is这种词天天出现,分词器给它们各留了一个专属编号,一个词就是一个token。

换成unbelievable这种长词,得拆成un、believ、able几块,一个词就占了三个token。

道理很简单:分词器是从训练语料里统计出来的,什么组合出现得频繁,什么组合就单独占一个位置。剩下的,只能用碎块拼。

所以「一段话有多少个token」,本质上是在问「这段话里的东西,在这家的语料里常不常见」。

而英文散文,恰恰是所有内容里差异最小的那一类。代码、JSON、长串数字,两家切出来的结果只会差得更远。

连自家的新旧模型

计数都不能通用

这并非某一家的问题。

Anthropic自家文档写得很明确:token计数是估算值,实际创建消息时用掉的输入token数量可能有小幅出入。

还给出了一个具体的数字。

Claude 4.7及之后的模型换了新分词器,同样的输入文本,产生的token数量比早期模型大约多30%,具体增幅取决于内容和工作负载形态。


Anthropic官方文档:Claude 4.7及之后的模型换用新分词器,同样的文本token数大约多出三成,别复用旧模型量出来的计数。

同一家公司,同一段文字,换代之后多出三成。

所以官方给出的建议是,想知道自己的工作负载差多少,就把同一个请求按两个模型各数一遍,比对返回的input_tokens。

别拿早期模型上量出来的数字估算成本。

自家两代模型之间,计数都不能复用。跨厂商拿「每百万token单价」直接对比,就更谈不上标准化了。

同样5美元

账单差在四处

相同的单价,同样的输入,账单到底差在哪儿?

第一处,刚才说的分词效率。同样一段文本,切出的token数不同,乘上同样的单价,付出去的钱自然不同。

第二处,缓存。

GPT-5.6 Sol的缓存输入价是0.50美元每百万token,只有标准输入价的十分之一。重复前缀多的工作负载,这一项就能把整个账单结构改写。

第三处,输出。

GPT-5.6 Sol输出30美元/百万token,Claude Opus 5是25美元起。

而在真实的智能体工作流里,输出token的权重往往比输入更狠。

也就是说,前面那省下的34.5%,很可能在这里被吐回去。

第四处,最容易被忽略,它就写在OpenAI自己的模型页上。GPT-5.6 Sol的输入超过272K token时,整次请求的输入按2倍计价,输出按1.5倍计价。


GPT-5.6 Sol官方模型页:输入5美元、缓存输入0.50美元、输出30美元,下面那行小字写着超过272K的加价规则。

不是超出的那部分加价,是整次请求适用更高倍率。

同一段代码,你在27万token的上下文里问它,和在28万token的上下文里问它,单价就换了一档。

这条限制来自官方自己的定价页,上下文越长,注意力和显存的开销涨得越快,长窗口从来不是免费的。

百万窗口开了

钱是慢慢流出去的

Tibo随后贴了第二条,教大家怎么在Codex里手动把上下文窗口开满。

打开~/.codex/config.toml,在所有section标题之前加三行:

model = "gpt-5.6-sol"

model_context_window = 1000000

model_auto_compact_token_limit = 900000

第一行选模型,第二行把上下文预算拉到100万token,第三行让自动压缩在90万token附近触发,留出一点余量。

存盘,重启客户端,开一个新会话,配置才生效。

不想动默认值的,也可以只在单次CLI会话里临时覆盖:

codex -m gpt-5.6-sol

-c model_context_window=1000000

-c model_auto_compact_token_limit=900000

这两个键在Codex官方配置参考里都能查到,作用和他写的一致。

model_context_window,当前模型可用的上下文窗口token数。

model_auto_compact_token_limit,触发自动历史压缩的阈值。

但文档只定义键的含义,并没有把「100万/90万」这组数值列成通用推荐值。

Tibo自己在帖子末尾也补了一句:默认值是他们仔细调过的。

那为什么这么多人想手动改?

GitHub上有一份用户实测报告说明了原因。


openai/codex仓库里的这份实测报告:Codex目录把窗口卡在372K,有效353.4K,而模型规格写的是1.05M

在特定版本的Codex客户端和ChatGPT Pro账户下,模型目录里给gpt-5.6-sol标注的窗口是372K,按95%折算,实际可用353.4K。而官方模型页标称的是1.05M。

买的是百万窗口,用起来只剩三分之一。

这份报告有明确的版本和账户限定,不能当成所有用户的现状,Tibo的配置帖发布时间还更晚。

还要澄清一件事:把配置改到100万,不会立刻产生100万token的费用。计费的从来是实际处理量。

可是压缩阈值一路推到90万,意味着一场长会话会背着越来越长的历史往前走,每一轮请求都要把这段历史重新过一遍。

窗口越大、压缩越晚,请求就越可能撞上刚才那个272K的门槛。

短对话里,分词器那点差异是小数点后面的事。会话拉到几十万token,历史记录反复带着走,再乘上一档更高的倍率,差异的小数点就变成了整数位。

钱不是一下子花掉的,是一轮一轮涨上去的。

下一个单位

是「每次成功」

Tibo那条帖子里还有一句话,被数字盖过去了:真正重要的是每次成功结果的成本(price per successful outcome)。

他还给了办法。基准测试可以当起点,但真要知道贵不贵,得拿自己的活儿去跑一遍。

这句话把比价的锚点换了。从「每百万token多少钱」,换到「跑完同一个任务总共花了多少钱」。

想知道两家在你手上到底谁更便宜,自己测一遍就行。

拿同一段原始文本、同样的语言配比、同样的工具定义,分别调用两家官方的计数接口拿到真实token数,再算上缓存命中、输出长度、推理长度和长上下文倍率,最后比谁把这件事干完花得更少。

分词效率只是这条链上的第一环。一个分词更省的模型,如果推理啰嗦、返工次数多,账单照样能反超回去。

以后该问的不是一百万token多少钱,是修好这个bug要多少钱。

参考资料:

https://x.com/thsottiaux/status/2089082893804896524?s=20

https://x.com/thsottiaux/status/2088866513008873560?s=20 https://github.com/openai/codex/issues/31860

编辑:元宇

声明:本文转载自新智元,转载目的在于传递更多信息,并不代表本社区赞同其观点和对其真实性负责,本文只提供参考并不构成任何建议,若有版权等问题,点击这里查看更多信息!本站拥有对此声明的最终解释权。如涉及作品内容、版权和其它问题,请联系我们删除,我方收到通知后第一时间删除内容。

点赞(0) 收藏(0)
0条评论
珍惜第一个评论,它往往能得到较好的回响。
评论
游客
游客
登录后再评论
  • 鸟过留鸣,人过留评。
  • 和谐社区,和谐点评。