每天用大模型的你,真的懂Token吗?
每天用ChatGPT的你,真的懂Token吗?
前段时间在波兰做 AI 工作坊,我问了在场的开发者一个问题,知道 Token 是什么的请举手。
结果让我挺意外,一百多人的会场,只有三分之一的人举手。
这些人每天都在用 LLM 写代码、做产品,但对最基础的计费单位竟然一知半解。就好比你天天开车却不知道油表怎么看,迟早要出问题。
今天咱们就把 Token 这件事彻底说清楚。
同样的话,为什么账单不一样
我做了个简单的测试,给 Anthropic 的 Claude 和 Google 的 Gemini 发同样一句话,Hello World。
Claude 告诉我用了 11 个输入 Token,Gemini 说只用了 4 个。
同样两个单词,怎么差了快三倍?
这不是哪家算错了,而是每家的 Token 切分方式根本就不一样。就像同样一块蛋糕,有人切 8 块,有人切 12 块,切法不同,计数自然不同。
更关键的是,输入 Token 和输出 Token 的价格还不一样。你问一句话花一分钱,它回答可能要花三分钱。不懂这个,成本根本算不清。
LLM 其实不认字,只认数字
很多人以为 LLM 是在处理文字,其实完全不是。
当你输入 Hello World 的时候,LLM 做的第一件事就是把它拆成几块,Hello、空格、World、感叹号。然后给每一块分配一个数字,比如 Hello 是 1234,空格是 5678。
接下来所有的计算,全是在这些数字上进行的。LLM 根本不知道什么是 Hello,它只知道 1234 这个数字跟 5678 那个数字经常一起出现。
等它算完了,输出一串新的数字,再把这些数字翻译回文字,你才看到了回复。
整个过程就像是在用密码本通信,文字只是表面,数字才是本质。
我用 OpenAI 的 Tokenizer 测试了一段 2300 个字符的文本,结果只产生了不到 500 个 Token。这意味着平均每个 Token 代表了 4 到 5 个字符。
但如果你输入的是生僻词或者小众编程语言,这个比例会急剧恶化。
词汇表越大,账单越便宜
为什么不同模型的 Token 数量差这么多?关键在于词汇表的大小。
假设你的词汇表只有 1000 个 Token,那 understanding 这个词可能要被拆成 5 块,under、st、and、i、ng。
如果词汇表扩大到 5 万个,可能就只需要 3 块,under、stand、ing。
到了 20 万个词汇表,直接两块搞定,under、standing。
Token 越少,LLM 处理起来越快,你的账单也越便宜。
但这里有个平衡问题。词汇表越大,模型本身就越大,需要的内存也越多。所以各家都在做取舍,OpenAI 选 20 万,Google 可能选 15 万,这就是为什么同样的输入会产生不同的 Token 数。
最早的 Tokenizer 是按字符切分的,the cat sat on the mat 这句话,每个字母都是一个 Token。这种方式简单粗暴,但效率极低。
后来进化到子词级别,会识别经常一起出现的字符组合。比如 th 在英语里出现频率极高,就把它当成一个整体 Token。at 也是,e 也是。
通过这种方式,同样一句话的 Token 数量能减少 30% 到 40%。
你的编程语言,决定了你的成本
刘易斯·卡罗尔在《爱丽丝梦游仙境》里造了个词叫 frabjous,我把它输入到 GPT 的 Tokenizer 里,结果被拆成了 4 个 Token。
因为这个词在训练数据里几乎不存在,模型只能硬着头皮把它拆碎了理解。
这个现象不只发生在生僻词上,还发生在小众语言上。
如果你用中文提问,Token 数量通常比英文多。如果你用日语或者韩语,可能更多。因为这些语言在训练数据里的占比本来就少,模型不熟悉,只能拆得更细。
编程语言也一样。
20 行 JavaScript 代码可能只需要 200 个 Token,但 20 行 Haskell 代码可能要 300 个 Token。不是因为 Haskell 写得差,而是因为 JavaScript 在训练数据里太常见了,模型对它的切分效率更高。
这就是为什么在 AI 时代,流行语言的优势会进一步扩大。不只是生态好,连 API 调用成本都更低。
三个你需要记住的事实
Token 是 LLM 的货币,你的每一次对话都在用 Token 计费。
不同模型提供商的 Token 切分方式不同,同样的输入可能产生完全不同的账单。在选择模型的时候,别只看性能,也要看 Token 效率。
编码就是把文字拆成最大的已知块,然后转换成数字。解码就是反过来,把数字翻译回文字。整个 LLM 的思考过程,都是在数字上完成的。
如果你经常调用 API,建议定期检查 Token 使用情况。很多时候你以为发了一句话,实际上因为上下文累积,可能已经发了几千个 Token。
搞清楚 Token 的工作原理,不只是为了省钱,更是为了理解 LLM 到底在干什么。
当你知道它其实是在处理数字而不是文字的时候,很多看起来奇怪的行为就能解释得通了。
比如为什么它有时候会在数学题上犯低级错误,因为数字对它来说不是数字,只是另一种 Token。
比如为什么它对某些语言的理解明显更好,因为那些语言在训练数据里出现得更频繁,Token 切分更高效。
这些底层逻辑,才是真正影响你使用体验的东西。
更多推荐


所有评论(0)