如何计算含Functions的ChatGPT API请求总Token数?
计算包含Messages和Functions的ChatGPT API请求总Token数
核心规则
OpenAI对包含Functions的API请求,Token计数会把Functions的结构化内容(严格按API要求的JSON格式)纳入统计,再加上Messages的Token数和少量固定分隔Token。
Functions部分的Token计算步骤
- 严格序列化Functions结构:必须按照API要求的格式生成JSON,每个Function需包含
name(字符串)、description(字符串)、parameters(JSON Schema格式,包含type、properties、required等字段),不能省略必要字段。 - 用对应模型的Tokenizer编码:使用tiktoken工具,选择与调用模型匹配的编码(比如
cl100k_base对应gpt-3.5-turbo-0613、gpt-4-0613等),将序列化后的Functions JSON字符串传入编码方法,得到Token数。
总Token计算方式
总Token数 = Messages部分Token数 + Functions部分Token数 + 固定分隔Token数(约3-5个,由API内部逻辑添加,比如包裹Functions的标记)
实操示例(Python)
import tiktoken # 定义你的Functions结构 functions = [ { "name": "get_current_weather", "description": "获取指定地点的当前天气", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "城市名称,比如北京、上海" }, "unit": { "type": "string", "enum": ["celsius", "fahrenheit"], "description": "温度单位" } }, "required": ["location"] } } ] # 序列化Functions为JSON字符串 functions_str = str(functions) # 选择对应模型的编码 encoding = tiktoken.get_encoding("cl100k_base") # 计算Functions的Token数 function_tokens = len(encoding.encode(functions_str)) # 假设你已经算出messages的Token数为message_tokens message_tokens = 120 # 总Token数(加上固定分隔Token,这里取4个作为示例) total_tokens = message_tokens + function_tokens + 4 print(f"Functions Token数: {function_tokens}") print(f"总Token数: {total_tokens}")
注意事项
- 不要忽略
description字段的内容,无论是Function本身的描述还是参数的描述,都会被计入Token。 - 如果调用多个Function,所有Function的结构化内容都会被合并统计,无需额外拆分。
- 不同模型的Tokenizer可能有差异,务必确认使用与API调用模型匹配的编码(比如
gpt-3.5-turbo-0301用r50k_base)。
内容的提问来源于stack exchange,提问作者Mdogdope
相关产品推荐
相关产品推荐

