你们中的大多数人可能听说过 ChatGPT,这是一个建立在 OpenAI 的 GPT API。该 API 于 2022 年向公众开放,现在被越来越多的 Web 应用程序使用,这些应用程序提取提示来满足特定客户的需求。
如果您每天使用 OpenAI API,那么了解您为每个文本生成请求(即每个 API 调用)支付的费用至关重要。
OpenAI 定价模型基于处理的代币数量。提示和输出文本的代币均由 OpenAI 收取,对于最先进的达芬奇模型,每 1,000 个代币收费 0.02 美元(1000 个代币大致相当于 750 个单词)。
因此,如果您的提示包含 150 个令牌,而答案包含 850 个令牌,则您将为 1000 个令牌支付 0.02 美元。
如何使用 Python 详细记录所有 API 成本
OPENAI 帐户中的“使用情况”页面显示每天和每 10 分钟时段的费用。
您可能希望更准确地了解每次调用或每个脚本运行的 API 支出。
如果您使用 Python 与 OpenAI API 交互,我将向您展示如何执行此操作。
假设我想要求 GPT-3 根据一些信息生成房地产描述。
Python 函数的代码如下所示,后面是对该函数的调用 (问题),传递两个变量(提示、事实)。
你会注意到我插入了一个 打印(响应) 函数中的命令打印出 JSON 响应,如我的第二个代码帧中所示。它帮助我弄清楚如何访问 JSON 响应的不同部分。您当然可以注释掉该命令以供后续运行。
def问题(提示,信息):openai.api_key =“您的api密钥”响应= openai.Completion.create(model =“text-davinci-003”,提示= f“{提示} {info}”,温度= 0.7 , max_tokens=250, top_p=1,Frequency_penalty=0, Presence_penalty=0 ) print(response) 答案 = 响应["选择"][0]["文本"] 用法 = 响应["使用"]["total_tokens"]返回答案,使用问题(“根据这些事实写一篇 100 字的房地产演示文稿”,“3 间卧室,游泳池,大花园,100 万美元”)
这是 OpenAI API 返回的 JSON 响应。我们将把注意力集中在“text”和“total_tokens”上。
{ "choices": [ { "finish_reason": "stop", "index": 0, "logprobs": null, "text": "\n\n这个令人惊叹的三居室房产是一个完美的家,其大花园和游泳池。位于理想的区域,为整个家庭提供充足的空间,提供理想的生活方式。\n\n房屋设有宽敞的厨房和起居区,配有现代化的电器。还拥有巨大的花园非常适合招待朋友和家人。大型游泳池是夏季纳凉的好地方。\n\n对于那些寻求奢华生活方式的人来说,此房产是完美的选择。标价为 100 万美元,您可以放心,您的钱物有所值。这是一个不容错过的机会。” }],“创建”:1676208247,“id”:“xxxxxxxxxxxxxxx”,“模型”:“text-davinci-003”,“对象”:“text_completion”,“用法”:{“completion_tokens”:138,“prompt_tokens” “:24,“total_tokens”:162 } }
在上面的第一帧中,你已经看到我已进入文字回复 通过以下方式:
answer = response["choices"][0]["text"] #如果我打印出答案 print(answer) #我得到下面的原始文本回复
这间令人惊叹的三卧室酒店设有大花园和游泳池,是您称之为家的完美场所。它位于一个理想的区域,为整个家庭提供了充足的空间,提供了理想的生活方式。\n\n房屋设有宽敞的厨房和起居区,配有现代化的电器。它还拥有一个巨大的花园,非常适合招待朋友和家人。大型游泳池是夏季纳凉的好地方。\n\n对于那些寻求奢华生活方式的人来说,这家酒店是完美的选择。标价为 100 万美元,您可以放心,您的钱物有所值。这是一个不容错过的机会。
我访问了 令牌数 以类似的方式:
use = response["usage"]["total_tokens"] #我可以打印出使用情况 print(usage) #在这个例子中给出了 162
现在我有了 代币中的使用,我可以用基本公式计算美元价格。
👉 请记住我正在转换用法 整数 变成一个 漂浮 数字能够计算包含小数的美元价格(大多数通话费用远低于一美元)。
cost = float(usage)/1000*0.02 print(cost) #这给了我 0.00324 美元的成本
如何计算同一 Python 脚本内多次调用的 API 成本?
如果您在同一个 Python 脚本中多次调用 OpenAI API(例如在 FOR 循环中),您应该 初始化一个使用变量 在 FOR 循环之前,并在循环的每次迭代中将使用计数增加标记数量。
例如,假设我们有一个要总结的长段落列表。
用法= 0列表= [“长段落1”,“长段落2”,“长段落3”] for item in list:prompt =“总结以下文本。TEXT:”info = item #first我调用我的函数描述上面,传递“prompt”和“info”reply = Question(prompt, info) #现在我正在使用索引访问函数返回的 2 个元素(0 = 第一个元素,1 = 第二个元素)。 reply_text=reply[0]reply_usage=reply[1]#最后我增加使用计数usage+=reply_usage#最后,在FOR循环之后,我根据更新的使用情况计算成本(对于我的所有迭代)。成本 = float(使用量)/1000*0.02 print(成本)
👉 如果您还有其他与 OpenAI API 相关的问题,请随时联系我。