首页 > 编程问答 >OPENAI 调用中代币定价的计算

OPENAI 调用中代币定价的计算

时间:2024-07-28 04:31:39浏览次数:11  
标签:python token openai-api langchain qdrant

我正在尝试对调用 OPENAI 时使用的代币进行定价。我有一个纯文本的 txt 文件,已上传到 Qdrant。当我问以下问题:

谁是迈克尔·乔丹?

并使用 get_openai_callback 函数来跟踪代币数量和操作价格时,输出中的信息关键之一并没有对我来说很有意义。

Tokens Used: 85
    Prompt Tokens: 68
    Completion Tokens: 17
Successful Requests: 1
Total Cost (USD): $0.00013600000000000003

为什么 提示令牌 值与输入值不同?输入文本中的标记数量(我理解为提示标记)是:

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 文件中的标记数量: 17

Arquivo txt: 'Michael Jeffrey Jordan 是一位美国商人,前任担任得分后卫的篮球运动员'

查询 + file_token : 21 (4+17)

有人能帮我理解定价计算吗?

我尝试搜索 OPENAI 自己的文档、github 和其他论坛,但我认为查找信息并不容易,或者向公众开放。我想了解我是否遗漏了某些内容,或者是否是用户无权访问的计算。


你发现的问题很有意思!虽然乍看之下,提示标记的数量(68)与你的预期(4 个查询标记 + 17 个文件标记 = 21)不符,但这里有一些因素会导致这种差异:

  1. 嵌入: 你提到了将文本文件上传到 Qdrant。这表明你很可能在使用嵌入来进行语义搜索。重要的是要理解, 嵌入本身并不是发送给 OpenAI 的提示的一部分 。相反,嵌入用于在 Qdrant 中找到与你的查询最相关的文本块。检索到的文本块 然后 才被添加到你的查询中,形成发送给 OpenAI 的完整提示。

  2. 检索到的文本块的大小: 即使你的原始文本文件只有 17 个标记,Qdrant 返回的相关文本块也可能大得多。这是因为 Qdrant 并不局限于返回整个文件或段落;它可以返回与你的查询语义相关的任何文本片段。68 个提示标记和 21 个预期标记之间的差异表明,检索到的文本块可能包含大约 47 个标记 (68 - 21 = 47)。

  3. OpenAI API 的开销: 请记住,OpenAI API 会添加一些围绕用户提示的额外标记,用于指令和格式化目的。这些额外的标记通常很短,但在计算提示标记总数时也应该考虑在内。

要理解定价计算,你需要考虑以下因素:

  • 实际发送给 OpenAI 的完整提示, 包括你的查询和 Qdrant 检索到的任何相关文本块。
  • OpenAI API 添加的任何额外标记。
  • OpenAI 用于你所选模型的每 1000 个标记的成本。

为了更深入地了解情况,我建议采取以下步骤:

  1. 检查发送给 OpenAI API 的完整提示。 大多数 OpenAI 客户端库都允许你查看发送到 API 的原始请求和响应。这将使你能够看到构成 68 个提示标记的确切内容。
  2. 尝试使用不同长度的文本文件和查询, 并观察提示标记数量是如何变化的。这将帮助你了解嵌入和检索到的文本块在最终提示大小中的作用。

通过仔细检查这些因素,你应该能够理解 OpenAI API 调用中代币定价的计算方式。

标签:python,token,openai-api,langchain,qdrant
From: 78802377

相关文章

  • python中的while循环不退出
    我试图完成第一年的python商业课程作业,但我的while循环无法退出,有人能帮忙吗?commisionTable=[{"admin_fee":100,"comm_rate":0.10},{"admin_fee":125,"comm_rate":0.12},{"admin_fee":150,"comm_rate":......
  • python---json文件写入
    ​ 使用到的知识点:os模块执行linux指令、json.dump()、withopenasf代码实现importsysimportosimportjson #向json文件file中添加内容data,其中data的类型为字典defwrite_json(file,data):    #如果文件存在,则删除    if(os.path.exists(fi......
  • python错题记录:布尔运算与逻辑值检测
    一前言环境:python3.10win10二布尔运算与逻辑值检测1案例案例1如上,在布尔运算时,有些时候代码只会运算前面的一部分,剩下的部分根本不会运算。以前在练习算法代码时,就利用这个规则来减少代码的工作量案例2如上,之前好长一段时间,上面的布尔运算总是让我感到困惑布尔运......
  • python---字典遍历
    1、三种常见的字典遍历实现defget_key_value(dics):  '''遍历所有键值对'''  forkey,valueindics.items():    print(f"{key}:{value}")defget_keys(dics):  '''遍历所有的键'''  forkeyindics......
  • python基本语法三天速成系列day1(看完这篇你就会)
    注释注释是代码非常重要的一部分,它的主要作用有:解释代码目的:注释可以说明代码段或函数的目的和功能,帮助其他开发者快速理解代码的意图。复杂逻辑说明:对于复杂的算法或业务逻辑,通过注释可以解释这些逻辑是如何工作的,降低后续维护的难度。提高可读性:良好的注释可以使代码结......
  • Python学习笔记46:游戏篇之外星人入侵(七)
    前言到目前为止,我们已经完成了游戏窗口的创建,飞船的加载,飞船的移动,发射子弹等功能。很高兴的说一声,基础的游戏功能已经完成一半了,再过几天我们就可以尝试驾驶飞船击毁外星人了。当然,计分,游戏次数,背景音乐,开始启动等按钮的功能需要我们慢慢添加,这些功能不影响游戏的使用,影......
  • Python学习笔记45:游戏篇之外星人入侵(六)
    前言飞船模块的功能基本已经完成。今天继续完成子弹模块的功能。子弹模块子弹和飞船模块,在游戏逻辑中有一种生成与被生成的表面关系,因为子弹在游戏中是由飞船发射的。但是在我们实际抽象的过程中,飞船与子弹并不是is的关系,甚至可以说不是has的关系。因此我们需要将两个对......
  • 三种语言实现二分(C++/Python/Java)
    题目给定一个按照升序排列的长度为......
  • python+flask计算机毕业设计农场营销管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着现代农业的快速发展,农场管理日益复杂,尤其是营销环节,传统的销售模式已难以满足市场快速变化的需求。农场主面临着如何高效管理农资采购......
  • python+flask计算机毕业设计社区独居老人健康管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着社会老龄化的加速,独居老人群体日益庞大,成为社会关注的焦点。这一群体在享受独立生活的同时,也面临着健康监测不及时、生活照料缺失、医......