应用LLM解决问题时LLM输入窗口其实是受限的比如32k、128k、256k。实践中我们经常使用openai的tiktoken估算LLM输入转tokens后的量。这里基于网络资料示例tiktoken如何通过输入字符串粗略估计转化成tokens后的量。1 环境准备1.1 pip安装更新这里示例使用pip安装tiktoken示例如下pip install --upgrade tiktokenOpenAI会持续推出新模型和新编码。为了确保能较准确统计最新模型的 token 数建议定期将tiktoken库升级到最新版本。1.2 过程示例这里示例tiktoken统计过程。1获取编码器根据使用的模型选择对应的编码例如cl100k_base适用于GPT-4、GPT-3.5-turbo等。2编码字符串使用encode()方法将字符串转换为token列表。3统计token数用len()获取token列表的长度。2 代码示例2.1 代码示例以下是使用tiktoken统计tokens序列长度的代码示例。1模型名称获取编码输入为gpt-4、gpt-3.5-turbo、gpt-4o等。import tiktoken def count_tokens(text: str, model: str gpt-3.5-turbo) - int: 统计给定文本的token数量。 Args: text: 输入字符串 model: 模型名称默认为gpt-3.5-turbo Returns: token数量 # 根据模型获取对应的编码器 encoding tiktoken.encoding_for_model(model) # 将文本编码为tokens tokens encoding.encode(text) # 返回token个数 return len(tokens) # 示例用法 if __name__ __main__: input_text 你好世界Hello, world! token_count count_tokens(input_text) print(f字符串: {input_text}) print(fToken数量: {token_count})输出如下所示字符串: 你好世界Hello, world!Token数量: 112编码名称获取编码输入为o200k_base、cl100k_base等。import tiktoken def count_tokens(text: str, encoding_name: str cl100k_base) - int: 统计给定文本的token数量。 Args: text: 输入字符串 model: 模型名称默认为gpt-3.5-turbo Returns: token数量 # 直接根据编码名称获取对应的编码器 encoding tiktoken.get_encoding(encoding_name) # 将文本编码为tokens tokens encoding.encode(text) # 返回token个数 return len(tokens) # 示例用法 if __name__ __main__: input_text 你好世界Hello, world! token_count count_tokens(input_text) print(f字符串: {input_text}) print(fToken数量: {token_count})2.2 常用编码对照tiktoken库本身并不直接维护一个固定的默认模型列表而是维护了一套编码(Encodings)。每个编码对应一种分词方式而 OpenAI 的各种模型分别使用这些编码 。可通过tiktoken.encoding_for_model()根据模型名返回编码器输入为gpt-4o、gpt-4等模型名称。或者tiktoken.get_encoding()直接使用编码名称输入为cl100k_base等编码名称不是模型名称。下表整理了tiktoken主要支持的编码及其对应的 OpenAI 模型家族 编码名称适用模型家族典型模型示例(Examples)o200k_base最新GPT-4o系列及O1系列模型gpt-4o,gpt-4o-mini,o1,o3-minicl100k_baseGPT-4、GPT-3.5 Turbo系列及Embedding 模型gpt-4,gpt-4-turbo,gpt-3.5-turbo,text-embedding-ada-002p50k_base早期的Codex模型和文本补全模型text-davinci-003,code-davinci-002p50k_edit早期的编辑模型text-davinci-edit-001,code-davinci-edit-001r50k_base(或gpt2)非常早期的 GPT-3 模型及 GPT-2davinci,gpt-2由于我们使用的可能是deepseek或qwen模型使用tiktoken统计字符个数与实际可能有偏差但大部分情况偏差不会太大粗略估计LLM输入对应的tokens量应该是足够了。reference---tiktokenhttps://github.com/openai/tiktoken