piapia123
zh

GPT 分词器(cl100k_base 真 BPE)

网络

所有处理都在浏览器本地完成,数据不上传服务器

输入
把文件拖到这里可直接载入
输出

这个工具做的是真正的 BPE 分词,不是「按 4 个字符估一个 token」那种估算器。后者在英文散文上碰巧八九不离十,而在中文(一个字常常是 1–2 个 token)、代码(缩进与标点怎么切完全由 BPE 决定)、以及计费与上下文预算(差的那些 token 就是钱)这三种场合全都错。 它按 cl100k_base 的官方规则工作:先用 tiktoken 的分段正则把文本切成片段,再对每一段做「每次取 rank 最小的相邻对合并」,最后把 rank 映射回 token id。所以结果与 OpenAI 官方一致 —— `"hello world"` 得到 `[15339, 1917]`,`"你好"` 得到 `[57668, 53901]`。 词表(约 1 MB)只在这一页按需加载,解压走浏览器自带的 `DecompressionStream`,不引入任何第三方库、也不联网。全部在浏览器本地完成,你粘进来的文本不离开这个页面。

功能

  • 真 BPE:按 cl100k_base 官方正则切分 + 最小 rank 相邻对合并
  • 逐行给出每个 token 的 id 与文本
  • 一个汉字被切成两个 token 时,半个 UTF-8 序列会显示成十六进制而不是乱码
  • 给出 token 数、字符数与 UTF-8 字节数
  • 算出「字节 / token」比值,便于估算计费与上下文占用
  • 中文、英文、代码一视同仁,按官方规则切分
  • 词表只在本页按需加载,不拖慢其它页面

使用方法

  1. 粘入要分词的文本
  2. 结果立即给出 token 数、字符数与字节数
  3. 下方逐行列出每个 token 的 id 与文本
  4. 需要可关掉逐行列表或字节数显示

常见问题

这是真正的分词,还是估算?
是真分词。它加载 cl100k_base 的完整 BPE 词表(约 1 MB),按 tiktoken 的官方法则切分与合并,结果与 OpenAI 官方逐 token 一致。你可以拿 `"hello world"` → `[15339, 1917]`、`"你好"` → `[57668, 53901]` 自己核对。
为什么“你好世界”是 5 个 token 而不是 2 个?
因为 cl100k_base 里只有「你」「好」这样的单字 token,「世界」不是一个 token,会被切成 `3574 244 98220`(其中 `3574` 是「世」的前两个字节,所以显示成十六进制)。`[57668, 53901]` 是「你好」的结果 —— 这两个例子极易记混。
支持 GPT-4o 的词表(o200k_base)吗?
目前只提供 cl100k_base(GPT-3.5 / GPT-4 用的那一套)。不提供就不谎称提供 —— 换一张词表要再附带约 1 MB 数据,等有需要再加。
会联网吗?
不会。词表随页面一起加载,解压在浏览器里完成,输入的文本只用于本机计算,不发送到任何地方。

相关工具