3分钟搞懂Token到底是什么?

0 阅读9分钟

封面

你知道吗?你花在AI上的每一分钱,都是按Token来算的。

我有一个朋友(我的宝贝)最近用豆包用上瘾了。什么问题都问,做菜问豆包、出行问豆包、连跟人闹矛盾了都要问豆包"到底是不是我的问题"。有时候还把豆包的回答截图发给我看,理直气壮的样子。让人哭笑不得,我跟她说了好几次,大模型有幻觉现象,而且它说的很多话看起来头头是道但经不起推敲,千万别当圣旨用。有问题找老师,生病了找医生。

但有一件事他没意识到——他觉得豆包是免费的。确实不要钱,但他每问一个问题,背后都在消耗一个东西:Token。

Token这个词你可能见过很多次了。打开任何一个AI产品的定价页面,写的都是"XX美元/百万Token"。用Agent智能体框架(比如Claude Code或者OpenClaw)的朋友更清楚,每次跑完一个任务,旁边会显示这次消耗了多少Token。Token等于钱。这是最直白的理解。

但Token到底是什么?为什么不直接按字数收费?一个Token到底等于多少个字?今天就把这件事讲清楚。


先说一个大家最容易搞错的事:Token不等于一个字,也不等于一个词。

我们人类习惯了"一个""一条""一只"这种计量方式,所以很自然地会以为"一个Token等于一个字"或者"一个Token等于一个单词"。但事实不是这样的。

Token的定义比这个模糊得多:它是大模型眼里的最小文字片段。有时候是一个完整的词,有时候是半个词,有时候是两个字,有时候是一个标点符号,甚至空格也算。它的切法是AI自己学出来的,不是按照我们人类的语言习惯来的。

Token切分对比

看这张图就能理解了。同样含义的一句话,英文"Artificial intelligence is transforming our world"大约被切成8个Token,而中文"人工智能正在改变我们的世界"可能要12个Token。中文普遍比英文消耗更多Token,这不是什么"歧视",是底层切分机制的客观结果。

经验换算大概是这样:英文1个Token约等于0.75个单词,中文1个Token约等于1.5到2个汉字。所以当一个模型说它有100万Token的上下文窗口时,不要直接理解成"能装100万个字"。对英文来说大概是75万个单词,对中文来说大概是150万到200万个汉字。差距不小。


那为什么要搞得这么复杂?为什么不直接按"一个字一个Token"来算?

这得从大模型到底怎么工作说起。

大模型本质上是一个玩"文字接龙"的数学函数。你给它一段文字,它预测下一个最可能出现的片段是什么,然后把这个片段接上去,再预测下下一个。一个接一个,直到它觉得该说的话说完了。这个"片段"就是Token。

但问题是:大模型是数学函数,它不认字,只认数字。所以在你的问题送进模型之前,需要一个"翻译官"先把文字变成数字。这个翻译官就叫Tokenizer。

Token流程

整个过程分两步。第一步叫"切分":Tokenizer拿到你的一段话,按照它自己学会的规则把它切成一块块Token。第二步叫"映射":给每一块Token一个数字编号(Token ID),比如"今天"可能编号是15496,"天气"可能是318。然后这串数字就被送进模型里运算了。

那Tokenizer是怎么决定把一句话切成哪些块的?这就涉及到一个叫BPE(Byte Pair Encoding,字节对编码)的算法。名字很学术,但原理很朴素。


我试着用一个不那么技术的方式来解释BPE。

想象你是一个快递打包员。你面前有一大堆零散的小物件要打包发货,你发现有些东西老是被一起买——比如牙膏和牙刷、洗发水和护发素。如果每次都一件一件装,效率很低。于是你开始把经常一起出现的东西打包成一个"组合包":牙膏+牙刷变成一个包裹,洗发水+护发素变成一个包裹。一段时间后你发现,某些"组合包"又经常跟其他东西一起出现,你就再打一层——变成更大的组合包。

BPE干的就是这件事。它先把所有文字拆成最小的单位(字母或者字节),然后统计哪些相邻的小单位最常一起出现,把它们合并成一个新的Token。然后再统计、再合并,反复进行,直到词表达到预设的大小(比如5万个Token)。

BPE合并过程

这个过程的结果是:高频出现的字符组合会变成一个大Token(比如英文里的"ing""tion",中文里的常用词),罕见的词则会被拆成几个小Token。这是一个折中方案——既不会因为按字符切导致序列太长(把上下文窗口撑爆),也不会因为按完整词切导致词表太大(几十万个词都可能不够用,遇到新词还是不认识)。

现在主流的大模型(GPT系列、Claude等)用的是一种叫byte-level BPE的变体。它先把文字拆成字节(0到255),每个字节本身就是一个合法Token,然后再做BPE合并。好处是:不管什么语言、什么符号,都能用统一的方式处理,不会出现"不认识这个字"的情况。


说到这里,你可能会想:这些技术细节跟我有什么关系?

关系很直接:Token决定了你用AI要花多少钱、一次能处理多少内容。

第一,Token直接等于费用。所有顶级大模型的API定价都是按Token来的——输入多少Token、输出多少Token,分别收费。你用的提示词越长、问题越复杂、模型回答越长,花的钱就越多。

第二,Token决定了上下文窗口能装多少东西。一个模型说它支持100万Token的上下文,意思是你一次最多能塞进去100万个Token的内容——你的问题、对话历史、系统设定、文档、代码,全部加在一起不能超过这个数。如果你的Tokenizer切得很碎(一句话切成很多小Token),同样的窗口能装的"实际内容"就变少了。反过来,如果Tokenizer善于把常见组合合成大Token,同样的窗口就能装更多东西。

第三,中文用户天然吃亏一点。因为大部分Tokenizer是在英文为主的语料上训练出来的,对英文的压缩效率更高。同样一句话,中文通常需要更多Token,意味着中文用户在同等上下文窗口和同等费用下,能处理的内容量相对少一些。这也是为什么有些国产大模型专门优化了中文Tokenizer——就是为了在中文场景下用更少的Token表达同样的内容。


回到开头的问题。我那个朋友用豆包不花钱,那Token去哪了?

免费大模型不是真的免费。你每问一个问题、每给一个反馈,都在生成数据。这些数据会被用来做训练和改进模型——业内叫"蒸馏"。你的问题就是你付的费用,只不过付的不是钱,是数据。这也是为什么免费模型能做到免费:它拿你的使用数据换了你的Token消耗。这笔账两边都说得通,但你得知道这件事。

而付费用户(比如ChatGPT Plus、Claude Pro)本质上是在买Token额度。每个月的订阅费对应的是一定量的Token消耗上限。你用Agent跑一个复杂任务,可能一次就烧掉几万个Token。你让模型帮你写一篇长文,来来回回改几轮,Token消耗可能上十万。所以用多了之后你自然就会形成感觉:我大概知道一个问题会消耗多少Token,我这个月的额度大概还能跑多少个任务。

随着Agent智能体越来越普及,Token会变成一个越来越重要的计量单位。黄仁勋说以后Token额度可能要跟员工薪资挂钩,虽然听着夸张,但方向没错——Token就是AI时代的度量衡。你用AI做的每一件事,最终都会被折算成Token。

Token等于什么


最后总结几句能记住的话。

Token是大模型处理文字的最小单位,不等于字,不等于词,是AI自己学出来的一种"文字碎片"。Tokenizer是把你的文字切成Token的翻译官。BPE是这个翻译官学会切法的训练方法:从最小的字节开始,不断合并高频组合,最终形成一套高效的切分规则。

英文1个Token约等于0.75个单词,中文1个Token约等于1.5到2个汉字。100万Token的上下文窗口,对英文来说大概能装75万个单词,对中文大概150万到200万个汉字。

Token等于钱,Token等于AI能一次记住多少东西,Token等于你在AI时代的"水电费账单"。搞懂这一个概念,你对AI的理解就比大多数人深了一层。

如果你平时用Agent或者API跑任务,欢迎评论区聊聊:你一个月大概消耗多少Token?花多少钱?有没有什么省Token的心得?

以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~谢谢你看我的文章,我们,下次再见。