tiktoken

openaiMIT活跃维护

OpenAI 官方开源的高速 BPE 分词器,专为 GPT 系列模型设计,能快速把文本切成 token,适合训练和推理时做文本预处理。

tiktoken is a fast BPE tokeniser for use with OpenAI's models.

0.14.0发布于 2026-08-17 05:25 UTC19,626star +8 / 7 天1,673fork同步于 2026-11-10 11:24 UTC

怎么上手

由 README 提炼,执行前请确认
pip install tiktoken
硬件要求按 README 说明

README 未说明,未提及显存、CPU 或 GPU 要求

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

OpenAI 官方开源的高速 BPE 分词器,用来给 GPT 系列模型算 token 数和编解码

OpenAI 官方开源的高速 BPE 分词器,专为 GPT 系列模型设计,能快速把文本切成 token,适合训练和推理时做文本预处理。

核心能力

  • 用 Rust 实现 BPE,比同类开源分词器快 3-6 倍
  • 按模型名直接取对应编码,如 encoding_for_model("gpt-4o")
  • 编码可无损还原原文,任意文本都能处理
  • 支持自定义 Encoding 和 tiktoken_ext 插件注册新编码
  • 附带 _educational 子模块可视化 BPE 过程

容易踩的坑

首次调用 get_encoding 会联网下载编码文件,离线环境需提前准备;自定义编码插件不要用 editable 安装,否则 get_encoding 找不到;改特殊 token 集合时要换新的编码名,避免行为混淆

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本0.14.0
  1. 0.14.0最新正式版2026-08-17 · 2026-08-17 05:25 UTC

    这个版本没有写更新说明。

  2. 0.13.02026-05-15 · 2026-05-15 04:44 UTC

    这个版本没有写更新说明。

  3. 0.12.02025-10-06 · 2025-10-06 20:21 UTC

    这个版本没有写更新说明。

  4. 0.11.02025-08-08 · 2025-08-08 23:45 UTC

    这个版本没有写更新说明。

  5. 0.9.02025-02-14 · 2025-02-14 20:14 UTC

    这个版本没有写更新说明。

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    ⏳ tiktoken

    tiktoken is a fast BPE tokeniser for use with OpenAI's models.

    import tiktoken
    enc = tiktoken.get_encoding("o200k_base")
    assert enc.decode(enc.encode("hello world")) == "hello world"
    
    # To get the tokeniser corresponding to a specific model in the OpenAI API:
    enc = tiktoken.encoding_for_model("gpt-4o")
    

    The open source version of tiktoken can be installed from PyPI:

    pip install tiktoken
    

    The tokeniser API is documented in tiktoken/core.py.

    Example code using tiktoken can be found in the OpenAI Cookbook.

    Performance

    tiktoken is between 3-6x faster than a comparable open source tokeniser:

    image

    Performance measured on 1GB of text using the GPT-2 tokeniser, using GPT2TokenizerFast from tokenizers==0.13.2, transformers==4.24.0 and tiktoken==0.2.0.

    Getting help

    Please post questions in the issue tracker.

    If you work at OpenAI, make sure to check the internal documentation or feel free to contact @shantanu.

    What is BPE anyway?

    Language models don't see text like you and I, instead they see a sequence of numbers (known as tokens). Byte pair encoding (BPE) is a way of converting text into tokens. It has a couple desirable properties:

    1. It's reversible and lossless, so you can convert tokens back into the original text
    2. It works on arbitrary text, even text that is not in the tokeniser's training data
    3. It compresses the text: the token sequence is shorter than the bytes corresponding to the original text. On average, in practice, each token corresponds to about 4 bytes.
    4. It attempts to let the model see common subwords. For instance, "ing" is a common subword in English, so BPE encodings will often split "encoding" into tokens like "encod" and "ing" (instead of e.g. "enc" and "oding"). Because the model will then see the "ing" token again and again in different contexts, it helps models generalise and better understand grammar.

    tiktoken contains an educational submodule that is friendlier if you want to learn more about the details of BPE, including code that helps visualise the BPE procedure:

    from tiktoken._educational import *
    
    # Train a BPE tokeniser on a small amount of text
    enc = train_simple_encoding()
    
    # Visualise how the GPT-4 encoder encodes text
    enc = SimpleBytePairEncoding.from_tiktoken("cl100k_base")
    enc.encode("hello world aaaaaaaaaaaa")
    

    Extending tiktoken

    You may wish to extend tiktoken to support new encodings. There are two ways to do this.

    Create your Encoding object exactly the way you want and simply pass it around.

    cl100k_base = tiktoken.get_encoding("cl100k_base")
    
    # In production, load the arguments directly instead of accessing private attributes
    # See openai_public.py for examples of arguments for specific encodings
    enc = tiktoken.Encoding(
        # If you're changing the set of special tokens, make sure to use a different name
        # It should be clear from the name what behaviour to expect.
        name="cl100k_im",
        pat_str=cl100k_base._pat_str,
        mergeable_ranks=cl100k_base._mergeable_ranks,
        special_tokens={
            **cl100k_base._special_tokens,
            "<|im_start|>": 100264,
            "<|im_end|>": 100265,
        }
    )
    

    Use the tiktoken_ext plugin mechanism to register your Encoding objects with tiktoken.

    This is only useful if you need tiktoken.get_encoding to find your encoding, otherwise prefer option 1.

    To do this, you'll need to create a namespace package under tiktoken_ext.

    Layout your project like this, making sure to omit the tiktoken_ext/__init__.py file:

    my_tiktoken_extension
    ├── tiktoken_ext
    │   └── my_encodings.py
    └── setup.py
    

    my_encodings.py should be a module that contains a variable named ENCODING_CONSTRUCTORS. This is a dictionary from an encoding name to a function that takes no arguments and returns arguments that can be passed to tiktoken.Encoding to construct that encoding. For an example, see tiktoken_ext/openai_public.py. For precise details, see tiktoken/registry.py.

    Your setup.py should look something like this:

    from setuptools import setup, find_namespace_packages
    
    setup(
        name="my_tiktoken_extension",
        packages=find_namespace_packages(include=['tiktoken_ext*']),
        install_requires=["tiktoken"],
        ...
    )
    

    Then simply pip install ./my_tiktoken_extension and you should be able to use your custom encodings! Make sure not to use an editable install.