直接用最常用的 4 种语言(Python / JS / Go / Java)给你讲清楚:空格、换行、标点、emoji、特殊符号都会占 Token,不同语言处理规则完全一致!
一、先记住核心规则(所有语言都一样)
不管用什么语言,tiktoken 分词规则统一:
- 空格→ 算 Token
- 换行
\n→ 算 Token - 中英文标点
,。!?#@%…&*→ 都算 Token - emoji🎉🍢🔥 → 1 个 emoji = 1~3 Token
- 连续空格→ 会合并,但依然占少量 Token
- 制表符
\t→ 算 Token
一句话:只要你肉眼能看到的符号,AI 都要算 Token!
二、每种语言的正确处理方式(直接复制运行)
我给你写可运行代码,包含:
- 空格
- 换行
- 标点
- emoji
- 特殊字符
1. Python(最常用)
python
运行
import tiktoken enc = tiktoken.get_encoding("cl100k_base") text = "今天撸串 🍢 快乐!\n烟火人间…" tokens = enc.encode(text) print("Token 数量:", len(tokens)) # 会包含空格、emoji、标点、换行处理多余空格 / 换行(减少 Token)
python
运行
import re text = "今天撸串 🍢\n\n快乐!" clean_text = re.sub(r'\s+', ' ', text).strip() # 合并空格+删除换行2. JavaScript / Node.js
js
import { get_encoding } from "@dqbd/tiktoken"; const enc = get_encoding("cl100k_base"); const text = "今天撸串 🍢 快乐!\n烟火人间…"; const tokens = enc.encode(text); console.log("Token 数量:", tokens.length);清理空格换行
js
const clean_text = text.replace(/\s+/g, " ").trim();3. Go
go
运行
package main import "github.com/pkoukk/tiktoken-go" func main() { enc, _ := tiktoken.GetEncoding("cl100k_base") text := "今天撸串 🍢 快乐!\n烟火人间…" tokens := enc.Encode(text, nil, nil) println(len(tokens)) }清理空格换行
go
运行
import "strings" clean := strings.Join(strings.Fields(text), " ")4. Java
java
运行
import com.knuddels.jtokkit.api.Encoding; Encoding enc = EncodingFactory.defaultEncoding(); String text = "今天撸串 🍢 快乐!\n烟火人间…"; int count = enc.countTokens(text);清理空格换行
java
运行
String clean = text.replaceAll("\\s+", " ").trim();三、关键结论(所有语言通用)
1. 影响 Token 数量的符号
- 空格
- 换行
- 标点
- emoji
- 特殊符号
# $ % & * ( ) - 制表符
2. 不影响 Token 的操作
- 大小写(不额外增加)
- 中文简体 / 繁体(正常计算)
3. 减少 Token 的统一方法(所有语言都能用)
plaintext
1. 合并连续空格 2. 删除多余换行 3. 删除不必要的标点、符号 4. 去掉不必要的 emoji