o200k_base 编码器上手指南:token 原理与 cl100k_base 迁移
2026/9/8 16:19:58 网站建设 项目流程

o200k_base 编码器上手指南:token 原理与 cl100k_base 迁移

【免费下载链接】tiktokentiktoken is a fast BPE tokeniser for use with OpenAI's models.项目地址: https://gitcode.com/GitHub_Trending/ti/tiktoken

同样一句"今天天气不错,let's ship it",用cl100k_base数出来是 12 个 token,换成 o200k_base 通常是 8 个。差出来的这 4 个 token,直接对应你账单上的输入费用和模型能塞下多少上下文。下面带你把 o200k_base 这件事讲透:它是什么、为什么切得更细、怎么跑起来,以及从 cl100k_base 迁过来要留神什么。

先把 token 是什么讲明白

Token 是模型读文本前的最小单位,可以理解为"词的最小碎片"。一个英文词、一个汉字、甚至半个汉字,都可能被切成一个或多个 token。tokenizer 就是负责切分的工具,它先按规则把文本分段,再用一个固定的"词表"(merge 表)把这些段合并成 token。

o200k_base 是 OpenAI 新一代模型(gpt-4o、o1、o3、gpt-5 等)默认使用的编码,对应 tiktoken 里get_encoding("o200k_base")这一句。你可以把它理解成 cl100k_base 的后继:切分逻辑重写过,词表也翻倍了。

它到底比 cl100k_base 强在哪

差异集中在三处,理解了原理就知道钱省在哪。

维度cl100k_baseo200k_base
词表规模100,000200,000
英文切分基础正则按大小写/撇号分段的 6 段正则
典型 token 数略多略少(同文本下)
  • 词表翻倍:o200k_base 的 merge 表是 200,000 条,cl100k_base 是 100,000 条。表越大,越长的连续片段能直接命中一个 token,而不是被反复拆开,所以同样文本的 token 总数往往更少。
  • 正则重写了分段:cl100k_base 用一条正则把文本切成候选段;o200k_base 用 6 段正则分别处理"以小写为主的词""以大写字母开头的词""数字""标点/符号""换行""空白"。这样英文里的's're've这类缩写能贴着词尾一起切,避免多切一刀。
  • 数字单独一段\p{N}{1,3}把数字最多按 3 位一组切,对代码里的常量、ID、版本号更友好。

动手跑一个最小例子

先升级依赖,确保带上 o200k_base:pip install tiktoken --upgrade

import tiktoken # 拿到 o200k_base 编码器(首次会下载并缓存词表) enc = tiktoken.get_encoding("o200k_base") text = "今天天气不错,let's ship it" tokens = enc.encode(text) # 文本 -> token id 列表 back = enc.decode(tokens) # token id 列表 -> 文本 print(tokens) # 例如 [19811, 391, ..., 21124] print("token 数:", len(tokens)) assert back == text # 一致性校验:编解码往返无损失

批量场景用encode_batch走多线程:

texts = ["第一句", "second line", "第三句更长一些"] ids = enc.encode_batch(texts, num_threads=4) # 返回列表的列表

和 cl100k_base 放在一起比

对比项cl100k_baseo200k_base
词表规模100,000200,000
服务模型gpt-3.5 / gpt-4 系列gpt-4o、o 系列、gpt-5 等
英文缩写切分一般按撇号规则更贴合
数字处理1-3 位一组1-3 位一组

具体省多少 token 取决于文本语言构成:英文占比高、长词多的代码,差异最明显;纯中文或短文本,差距相对小。没有统一的百分比可套,拿你自己的真实语料各跑一遍len(encode())最准。

迁移时容易踩的坑

  • 注意 token 数会变,上下文与费用要重算:同一批文本从 cl100k_base 换到 o200k_base 后 token 数通常下降,意味着同样上下文窗口能塞进更多原文、同样长度的输入账单也更低。反过来,别拿旧编码器的 token 数去卡新模型的预算,数字对不上。
  • 注意按模型选编码,而不是按习惯model.py里已经把 gpt-4o、o1、o3、gpt-5 等映射到 o200k_base。用encoding_for_model("gpt-4o")之类按模型名取编码,比硬编码名字更稳;给旧 gpt-3.5 接口算 token 时仍应留在 cl100k_base。
  • 注意别跨编码器混用 token:o200k_base 的 id 空间和 cl100k_base 不通用,同一个数字在两边指向的文本不同。历史日志、缓存、评测脚本里的 token id 不能直接迁移,只能迁移文本本身,再重新 encode。

回到开头那句中英文混排的文本:o200k_base 少切出来的那 4 个 token,就是词表翻倍和正则重写换来的实打实的成本与上下文余量。

【免费下载链接】tiktokentiktoken is a fast BPE tokeniser for use with OpenAI's models.项目地址: https://gitcode.com/GitHub_Trending/ti/tiktoken

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询