大模型天天提的 tokens到底是什么一篇分享讲透计数逻辑与避坑指南 经常有刚接触大模型的朋友问我不管是看模型参数、调用 API 计费还是聊上下文窗口张口闭口都是 tokens这个东西到底是啥是一个汉字一个英文单词为啥我写了 1000 字的内容后台显示 token 数却有 1300 多 今天就用最接地气的分享口吻不带晦涩的公式跟大家唠透这个大模型世界里最基础、也最核心的 “硬通货”——tokens顺便把大家最关心的计数规则、避坑要点、实用工具一次性说清楚。 先搞懂tokens 到底是个什么东西 先给大家一个最直白的定义tokens词元 / 令牌是大语言模型处理、理解和生成文本的最小基本计算单元。 咱们可以做个特别形象的类比大模型本质上是个只会处理数字的 “超级计算器”它根本不认识我们写的汉字、英文、标点符号。我们想让它干活就得先把自然语言文本转换成它能看懂的数字格式而转换的第一步就是把文本拆成一个个标准化的 “小积木”这个最小的、不可再随意拆分的计算积木就是 tokens。 这里必须纠正一个 90% 的新手都会踩的误区token 既不等同于英文单词也不等同于中文汉字。 举两个最简单的例子 英文里的unhappiness我们看着是一个完整的单词但模型的分词器大概率会把它拆成unhappiness2 个 token 中文里的 “人工智能”在适配中文的模型里可能会被合并成 1 个 token而在对中文优化一般的模型里可能会被拆成 “人工”“智能” 2 个 token。 那你可能会问为啥非要搞出 tokens 这个东西直接用整词或者单个汉字 / 字母不行吗 核心原因就两个字平衡。 如果用整词中文、英文里的词汇无穷无尽还有源源不断的新词、生僻词、人名、专业术语模型的词表根本装不下遇到没见过的词直接就 “抓瞎” 了 如果用单个汉字 / 字母文本会被拆得稀碎长度直接翻倍计算量和耗时会指数级上涨效率低到没法用。 而 tokens 这种 “子词” 单元刚好完美解决了这个矛盾高频出现的常用词直接合并成一个 token压缩文本长度、降低计算量低频的生僻词、新词拆成几个子词单元模型也能正常识别不会出现 “不认识” 的情况。 多说一句我们输入的所有内容包括汉字、英文、数字、标点、空格、换行、emoji甚至是代码里的缩进、括号全都会被拆成 tokens没有例外。 大家最关心的大模型里的 tokens到底是怎么计数的 先给大家敲一个重中之重的结论token 计数没有全球统一的标准答案最终结果完全由你所用的大模型配套的分词器Tokenizer、底层分词算法、专属词表决定。 就像不同的厨师切同一块肉切出来的块数、大小都不一样不同模型的分词器处理同一段文本最终出来的 token 数也可能有明显差异。 先讲透主流的计数底层逻辑 现在市面上 90% 的大模型不管是海外的 GPT 系列、LLaMA 系列、Claude还是国内的通义千问、文心一言、智谱 GLM主流用的都是BPEByte Pair Encoding字节对编码 算法这也是当前行业的通用标准。 不用记复杂的公式我用大白话把它的计数逻辑拆成 3 步一听就懂 初始拆分把你输入的所有文本先拆解到最小的字节单元。比如英文拆成单个字母中文拆成 UTF-8 字节标点、空格、换行全都单独拆开一个都不落下 频率统计反复迭代统计文本里出现频率最高的相邻字节 / 字符组合 合并迭代把这些高频出现的相邻组合合并成一个新的 token然后再统计、再合并一直循环直到达到模型预设的词表大小比如 GPT-3.5 词表约 10 万LLaMA 3 词表约 12.8 万。 说白了核心逻辑就是 “经常一起出现的字就绑在一起当一个 token”。比如 “北京” 两个字高频一起出现就合并成 1 个 token而 “北” 和 “京” 单独出现的频率极低就不会单独合并成独立 token。 给大家一个通用的计数估算参考 虽然不同模型有差异但行业里有一套通用的估算标准日常用完全够不用每次都查工具心里有个数就行 文本类型通用 Token 计数参考 英文文本 1 个 Token ≈ 4 个英文字符 ≈ 0.75 个英文单词1000 个英文单词≈1300 个 Token 中文文本 1 个汉字 ≈ 1~2 个 Token主流模型平均 1.3 个1000 个汉字≈1300 个 Token 数字 / 符号 单个标点、特殊符号通常计 1 个 Token连续长数字会被拆分为多个 Token 代码 / 格式文本 缩进、换行、括号、关键字均会计数Token 密度远高于普通自然语言 90% 的人都踩过的计数避坑指南 我自己刚接触大模型、调用 API 的时候在 token 计数上踩过不少坑这里把最核心的几个点分享给大家帮大家少花冤枉钱、少走弯路 第一别拿一套标准套所有模型。GPT 系列的分词器对英文优化更好中文生僻词、专有名词很容易被拆成多个 token消耗更高而国产中文大模型分词器专门针对中文做了深度优化单汉字的平均 token 数更低更省 token。千万别用 GPT 的 token 数去套国产模型的计费和上下文限制。 第二别忽略空格、换行、emoji 的消耗。很多人写 prompt 的时候喜欢加一堆换行、空格排版觉得这些不算 “有效内容”但实际上这些内容全都会被计入 token 总数。我之前就踩过这个坑同样的内容加了排版空格后token 数多了近 20%白白多花了钱。 第三生僻词、新词、专有名词token 消耗会翻倍。小众人名、学术专业术语、刚火的网络热词模型词表里没有现成的合并 token就会把它拆成一个个最小的字节单元token 数直接上涨。比如常见的 “计算机” 大概率是 1 个 token而一个小众的外国人名可能会被拆成 5-6 个 token。 第四输入 输出全都会被计数。很多新手以为只有自己输入的 prompt 会计数其实不管是模型的上下文窗口上限还是 API 的计费规则都是「输入 Prompt 模型输出 Completion」的总 token 数一起算的而且绝大多数厂商输出 token 的计费单价比输入还要高。 结尾想说的话 别看 tokens 是个很小的概念它却是大模型世界里的 “基础货币”。不管是写 prompt 控制长度、调用 API 控制成本还是最大化利用模型的上下文窗口都离不开对 tokens 的理解。 很多人玩了很久大模型却连 token 是什么都没搞透平白多花了很多钱踩了很多没必要的坑。今天把这些内容分享出来希望能帮到刚接触大模型的朋友也欢迎大家在评论区交流一起聊聊你在 token 上踩过的那些坑。