tiktoken BPE 分词器:OpenAI 模型 Token 计算比同类快 3-6 倍
2026/8/24 16:40:38 网站建设 项目流程

tiktoken BPE 分词器:OpenAI 模型 Token 计算比同类快 3-6 倍

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

你在调 OpenAI API 时,账单上的 token 数和len(text.split())永远对不上,逐条文本再跑一遍 HuggingFace 分词器估算成本又太慢。tiktoken 是 OpenAI 官方的 BPE 分词器,专门解决"和模型看到完全一致的 token 切分,并且足够快"这件事。

一句话定位

tiktoken 是为 OpenAI 模型配套的 BPE 分词器,让你用本地代码精确计算任意文本的 token 数、并做无损编解码。

  • GPT-2 分词器处理 1GB 文本,比GPT2TokenizerFast快 3-6 倍
  • encoding_for_model("gpt-4o")一行拿到与 API 一致的编码
  • BPE 可逆无损,平均每个 token 对应约 4 字节
  • Python >= 3.9,PyPI 预编译 wheel,运行时仅依赖regexrequests

3 分钟上手

pip install tiktoken
import tiktoken enc = tiktoken.get_encoding("o200k_base") # gpt-4o 使用的编码 tokens = enc.encode("hello world") # [31373, 995] assert enc.decode(tokens) == "hello world" # 编解码无损往返

三行代码即可验证:编码结果与 OpenAI API 的 token 计数一致,解码后原文一字不差。

它凭什么快

核心逻辑在 Rust。BPE 合并的主循环由 Rust 实现(src/lib.rs),通过 PyO3 桥接为 Python 模块_tiktoken,Python 层只负责正则切分和特殊 token 校验,热点路径不经过解释器。

官方 benchmark 有具体数字。用 GPT-2 分词器处理 1GB 文本,tiktoken 0.2.0 对比tokenizers==0.13.2GPT2TokenizerFast(transformers 4.24.0),耗时约为其 1/3 到 1/6。

批处理与缓存。encode_batch默认开 8 个线程并发处理文本列表;编码词表文件首次下载后按 SHA-256 校验并缓存,可用TIKTOKEN_CACHE_DIR指定目录,后续启动不再触网。

典型使用场景

  • Token 计数与成本估算len(enc.encode(text))给出与 API 一致的 token 数;不想让特殊 token 字符串报错时用enc.encode_ordinary(text)
  • 定位模型看到的内容enc.decode_with_offsets(tokens)返回文本和每个 token 的字符偏移,方便把 token 错误映射回原文位置。
  • 按模型名取分词器tiktoken.encoding_for_model("gpt-4o")自动映射到o200k_basegpt-4映射到cl100k_base,前缀匹配机制使新版模型不依赖库升级。

进阶:自定义与扩展

两条路径。第一种直接构造Encoding,拿到对象后自己传递:

cl100k = tiktoken.get_encoding("cl100k_base") enc = tiktoken.Encoding( name="cl100k_im", pat_str=cl100k._pat_str, mergeable_ranks=cl100k._mergeable_ranks, special_tokens={**cl100k._special_tokens, "": 100264}, )

第二种走插件机制:新建tiktoken_ext命名空间包,模块内定义ENCODING_CONSTRUCTORS字典(编码名到构造函数的映射),pip install ./my_extget_encoding即可发现你的编码(注意不要用 editable 安装)。机制细节见tiktoken/registry.py

另外tiktoken._educational提供了可训练、可可视化的纯 Python BPE 实现,适合想理解合并过程的人:train_simple_encoding()在少量文本上训练出分词器。

选型参考

维度tiktokenHuggingFace tokenizers
OpenAI 编码内置 cl100k_base / o200k_base 等,模型名直接映射需自行下载词表文件
性能1GB GPT-2 文本分词快 3-6 倍(对 GPT2TokenizerFast)同为 Rust 内核,性能接近
适用场景OpenAI API token 计数、计费核对多语种、Llama 等非 OpenAI 模型

如果你只服务 OpenAI 模型,选 tiktoken 省掉词表搬运和映射维护;如果分词目标是多模型多语种,HF tokenizers 覆盖面更广。

常见问题

离线环境能用吗?编码词表文件首次get_encoding时下载一次并缓存,之后不再触网。离线机器可把词表文件放进TIKTOKEN_CACHE_DIR目录,或直接用本地路径加载。

支持哪些 Python 版本?要求 Python >= 3.9,PyPI 提供 manylinux 和 macOS 的预编译 wheel(x86_64 与 arm64),无 win32 wheel,32 位 Linux 不支持。

License 和依赖?MIT 协议,运行时仅regexrequests两个依赖,BPE 核心是 Rust 编译的扩展模块。

开头那个"本地估算和 API 计费对不上"的问题,换成enc.encode之后逐条对齐,批量估算的速度也能扛住 GB 级文本。下一步可以克隆仓库 https://gitcode.com/GitHub_Trending/ti/tiktoken ,跑一遍tests/验证你的环境行为。

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

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

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

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

立即咨询