tiktoken o200k_base 完整指南:如何快速完成安装、编码与 token 计数
【免费下载链接】tiktokentiktoken is a fast BPE tokeniser for use with OpenAI's models.项目地址: https://gitcode.com/GitHub_Trending/ti/tiktoken
在把提示词发给 gpt-4o 或 o1 之前,你得先算出它占多少 token,否则上下文长度和成本预算都会跟着错。tiktoken 是 OpenAI 开源的 BPE 分词器,o200k_base 是 gpt-4o、o1、o3、gpt-5 这批模型实际使用的编码。它适合需要本地统计 token、做上下文预算、给模型喂数据前预处理文本的人,数出来的 token 数和官方 API 返回的一致。
📊 关键数字速览
| 项目 | 值 |
|---|---|
| 当前版本 | 0.13.0 |
| Python 要求 | ≥ 3.9 |
| 词表规模 | 约 200,000 token(cl100k_base 约 100,000) |
| 适配模型 | gpt-4o、o1、o3、o4-mini、gpt-5、gpt-4.1 |
o200k_base 相比 cl100k_base 变了什么
和旧方案比,有三处变化直接影响你的 token 数。
词表从约 100,000 扩到约 200,000,多出的空间用来存更高频的词组合,同样的文本能用更少的 token 表示。
切分规则重写。新编码把字母、数字、标点、空白拆成独立分支处理,中英混排、代码和特殊符号的文本更倾向于在自然边界处断开,而不是把一个词拦腰切断。每个编码的词表地址和特殊 token 定义写在 tiktoken_ext/openai_public.py。
速度没有因为词表翻倍而变慢。官方给出的数据是它比同类开源分词器快 3 到 6 倍,平均一个 token 对应约 4 字节原文,这个比例可以直接拿来估上下文预算。
🚀 o200k_base 安装与最小示例
先在终端执行pip install tiktoken,再运行下面这段代码:
import tiktoken enc = tiktoken.get_encoding("o200k_base") text = "你好,世界!o200k_base 编码测试。" tokens = enc.encode(text) print(len(tokens), "tokens") print(enc.decode(tokens) == text)跑完应该看到两行输出:第一行是一个数字,即这段文本的 token 数;第二行是True,说明解码结果和原文完全一致,编码可用。
如果不确定某个模型该配哪个编码,用tiktoken.encoding_for_model("gpt-4o")直接按模型名查,映射关系维护在 tiktoken/model.py。
同一段文本,新旧编码的差异
| 维度 | cl100k_base | o200k_base |
|---|---|---|
| 词表规模 | 约 100,000 | 约 200,000 |
| 适配模型 | gpt-4、gpt-3.5-turbo、text-embedding | gpt-4o、o1、o3、gpt-5 |
| 相同文本 token 数 | 偏多 | 偏少 |
| endoftext token 编号 | 100,257 | 199,999 |
同一句提示词用 o200k_base 编码,token 数通常比 cl100k_base 少,因为词表更大、更多组合能整词表示。切分时新编码还按 Unicode 大小写类别区分字母,多语言文本断得更准。
🕳️ 三个常见坑:现象、原因与处理
现象一:调用get_encoding("o200k_base")报ValueError: Unknown encoding。原因是本地 tiktoken 版本太旧,还没注册这个编码。处理:执行pip install -U tiktoken升级到最新版(当前 0.13.0)再试。
现象二:第一次调用很慢,之后秒回。原因是首次会把约 20 万行的词表从官方地址下载到本地缓存,第二次起直接读缓存。处理:属正常现象,无需处理;如果环境连不上外网,可以设置TIKTOKEN_CACHE_DIR环境变量指向已放好的缓存目录。
现象三:自己数的 token 和 API 返回的usage对不上。原因多半是编码选错——拿 o200k_base 去数 gpt-4 或 gpt-3.5-turbo 的请求。处理:改用encoding_for_model("模型名")自动匹配,不要写死编码名。
批量与兼容回退
处理大量文本时,用enc.encode_batch(texts, num_threads=4)并行编码,替代逐条循环,速度接近线性提升。
如果项目同时支持新旧模型,加一层回退,避免老环境直接报错:
def get_encoder(): try: return tiktoken.get_encoding("o200k_base") except Exception: return tiktoken.get_encoding("cl100k_base")调用get_encoder()会返回一个Encoding对象,即使当前环境只有旧版本也不会抛异常。Encoding的完整接口(encode、decode、encode_batch 等)实现在 tiktoken/core.py。
小结
tiktoken 的 o200k_base 是一个约 20 万词表的 BPE 编码,是 gpt-4o、o1 这批模型的官方分词标准。当你需要本地统计 token、估算上下文预算,或给这批模型预处理文本时,就选它。下一步:把 tiktoken 升到 0.13.0,用encoding_for_model替换项目里写死的编码名,再对一批真实提示词跑一遍 encode/decode 对比确认无误。
【免费下载链接】tiktokentiktoken is a fast BPE tokeniser for use with OpenAI's models.项目地址: https://gitcode.com/GitHub_Trending/ti/tiktoken
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考