我正在尝试对调用 OPENAI 时使用的代币进行定价。我有一个纯文本的 txt 文件,已上传到 Qdrant。当我问以下问题时:
迈克尔乔丹是谁?
并使用
get_openai_callback
函数来跟踪代币数量和操作价格,输出中的信息关键之一对我来说没有意义。
Tokens Used: 85
Prompt Tokens: 68
Completion Tokens: 17
Successful Requests: 1
Total Cost (USD): $0.00013600000000000003
为什么提示令牌值与输入值不同?输入文本中的token数量(也就是我理解的Prompt Token)为:
query = 'Who is Michael Jordan'
encoding = tiktoken.encoding_for_model('gpt-3.5-turbo-instruct')
print(f"Tokens: {len(encoding.encode(query))}")
4
,但响应中的输出类似于 68。我认为提示令牌是添加到问题令牌的基本令牌(txt 文件)的总和,但数学不适合。
txt文件中的token数量:17
Arquivo txt:“迈克尔·杰弗里·乔丹是一位美国商人和前篮球运动员,担任得分后卫”
查询+file_token:21(4+17)
有人可以帮我理解定价计算吗?
我尝试搜索OPENAI自己的文档、github和其他论坛,但我认为查找信息并不容易,也不认为它是向公众开放的。我想了解我是否遗漏了某些内容,或者它是否是用户无权访问的计算。
提示令牌包括您的问题和提供的任何上下文,以及 API 添加的其他系统消息和格式。同时在响应中生成完成令牌。
在你的例子中:
可视化查询:迈克尔·乔丹是谁? (4 个代币) 文件中的文本:迈克尔·杰弗里·乔丹 (Michael Jeffrey Jordan) 是一位美国商人和前篮球运动员,担任得分后卫(17 个代币) 预计:4+17=21 4+17=21 个代币。
但是,您会看到 68 个提示令牌,因为 API 添加了角色、指令和其他元数据的令牌。要了解确切的令牌计数,您可以记录完整的请求负载或使用 OpenAI 的令牌计数工具。 这个额外的上下文解释了为什么提示令牌计数高于预期。