同样一句话,有人花 100 tokens,有人只花 60 tokens--差距就在 tokenizer 的理解上。
最近研究了大模型底层的 tokenizer 机制,发现普通用户完全可以用这个原理显著降低 API 成本,同时让模型输出更稳定。
Token 不是字,不是词,是模型的"信息原子"
| 文本 | 可能的 token 切分 |
|---|---|
Hello, how are you? | ["Hello", ",", " how", " are", " you", "?"] |
我喜欢AI | ["我", "喜欢", "AI"] |
关键认知:
主流用 BPE(Byte Pair Encoding) 算法:
核心思想:把高频出现的字符组合合并成一个 token
初始:l o w / l o w e s t / n e w
合并:lo → low → lowest
最终:["low", "est", "new"]
这意味着:
英文常见词往往 1 token,中文通常 1-2 token,且英文技术术语 tokenizer 更熟悉
❌ "你是一个有帮助的助手" → 约 8-10 tokens
✅ "You are a helpful assistant" → 约 5 tokens
❌ "请 帮我 分析 这段 文本"(多余空格)
✅ "请帮我分析这段文本"
❌ 用 markdown 表格做简单对齐
✅ 用逗号分隔或 JSON,结构更紧凑
❌ 每次对话都带完整背景
✅ 用 "同上"、"前文提到的 X" 指代
✅ 关键:确保指代在上下文窗口内
| 场景 | 为什么贵 |
|---|---|
长数字 20240101123456 | 可能被逐位切分 |
| 乱码/特殊符号 `` | 每个字节都可能独立成 token |
| 混合编码文本 | tokenizer 混乱,切分效率极低 |
| 代码里的长注释 | 无意义内容占 token |
usage 字段监控原理:tokenizer 影响模型理解
❌ "反脆弱性" → 可能被拆成 ["反", "脆弱", "性"]
✅ "antifragile" → 大概率是 ["antifragile"](如果语料里有)
策略:
为什么 Claude 和 GPT 的 token 数经常不一样?
答案:tokenizer 不同。
同一句话,Claude 可能更"省"或更"费",取决于语言。
你们有实测过自己的 prompt token 数吗?有没有发现什么反直觉的"token 陷阱"?
欢迎贴例子讨论 👇
加入讨论
原来中英文混着写最亏啊😂 难怪我那些中英夹杂的prompt账单那么感人。试了下把system prompt全改成英文,确实省了不少token。不过有个疑问:模型对中文问题的理解会不会打折扣?有人对比过效果吗
第4条那个长数字的例子让我突然想到,是不是可以把时间戳改成Unix时间戳来省token?比如1680000000这种虽然也是10位,但可能整体被识别成一个数字token?有人试过吗🤔
试了下把”请”换成”Pls”,居然真省了token😂 不过好奇:这种中英缩写混用会不会让模型理解变差?有人对比过效果吗
终于知道为什么我的代码注释总让账单爆炸了😭 第4条那个”token黑洞”太真实了,上次传了个带base64图片的日志,token数直接飙到五位数。现在养成习惯先strip一遍再发,省下来的钱够我多跑好几轮测试了。
好家伙,BPE这个合并逻辑让我突然想到——那是不是说,用网络流行语反而更省token?毕竟”绝绝子””yyds”这种高频词应该早就被合并成一个token了吧🤔 不过转念一想,模型能不能正确理解又是另一回事了…
第3条那个”同上”的技巧让我有点担心——如果对话很长,模型会不会真的忘记前文提到的X是啥?有没有遇到过指代模糊然后输出跑偏的情况😅 另外好奇压缩prompt和RAG结合的话,是先压缩再检索还是反过来更省token?
学到了!不过有个小困惑:第5条说用工具预览token数,但不同模型的tokenizer不一样吧?比如Claude和GPT的切分方式肯定有差别,那怎么保证我优化的prompt在多个模型上都省token呢🤔