但是问题来了,API服务里的这个“按量计费”的“量”应该怎么算?
也许你会说,那还不简单,直接看它回答了多少字数呗!这话只对了一半。因为ChatGPT不仅会讲中文,它还可以根据使用者所发送的语言,回答出英语、法语、西语等多国语言,相同意思下每个语言的长度都会不一样,所以它会将这些内容统一换算为另一个标准单位——Tokens,然后再进行计费。
ChatGPT不仅会统计自己输出了多少内容,还会记录用户输入了多少内容,毕竟它也需要先分析输入的文本才能输出有意义的回答,统一换算为Tokens值后汇总费用。以下是ChatGPTAPI的官方收费表,里面的4K、8K等数据代表单次问答中的最大上下文Tokens值。
如果你已经通过ChatGPTAPI成功地将AI能力嵌入至商业化产品中,比如说打造出了一个对客提供服务的智能客服,那么作为开发人员的你需要立刻、马上、清楚地知道每个客户的问答所产生的消耗额。因为公(Ling)司(Dao)需要知道最基础的成本才能制定出合理的运营策略。
总不能依靠实时监控OpenAI的账号后台来查看所消耗的成本吧?(更何况它还有五分钟的延迟)
那怎样才能在使用Apifox调用API的过程中就直接看到输入和输出的人民币成本呢?通过以下2步就能够清楚地看到人民币花费:
安装第三方库的运行环境。
npminstallopenai-gpt-token-counter参考以下示例代码,新建名为gpt-tokens-counter.js的Node.js脚本:
constopenaiTokenCounter=require('openai-gpt-token-counter');consttext=process.argv[2];//获取命令行参数中的测试内容constmodel="gpt-4";//替换为你想要使用的OpenAI模型consttokenCount=openaiTokenCounter.text(text,model);constcharacterCount=text.length;//计算字符数console.log(`${tokenCount}`);将该脚本文件放置于Apifox的外部程序目录下以供调用:
输入值就是在询问ChatGPT时所填写的问题。你可以在“聊天消息”API文档的前置操作中添加一个自定义脚本,使得Apifox能够调用上文中写好的Tokens换算脚本,提取位于请求参数Body中的content参数后换算为Tokens值。
填写以下示例代码:
try{varjsonData=JSON.parse(pm.request.body.raw);varcontent=jsonData.messages[0].content;//获取content中的信息varresult_input_tokens_js=pm.execute('./gpt-tokens/gpt-tokens-counter.js',[content])console.log(content);pm.environment.set("RESULT_INPUT_TOKENS",result_input_tokens_js);console.log("InputTokenscount:"+pm.environment.get("RESULT_INPUT_TOKENS"));}catch(e){console.log(e);}点击“运行”按钮后可以在控制台中看到已统计的输入值。
接下来需要计算ChatGPT输出了多少个Tokens。
因此我们需要先拼接所有的输出内容,然后再进行Tokens换算。
在后置操作中添加以下自定义脚本,拼接所有输出内容并换算Tokens:
//获取响应的文本内容consttext=pm.response.text()//将文本内容分割成行数varlines=text.split('\n');//创建一个空数组存储"content"参数varcontents=[];//遍历每一行for(vari=0;i 得到输入和输出所耗费的Tokens值后,因为ChatGPT采用美元计价,因此还需要调用实时汇率API后才能预估所消耗的人民币成本。 本文将调用CurrencylayerAPI获取实时汇率。 得到输入Tokens值后,还需请求实时汇率接口得到一个人民币换算乘数。在前置操作中新增以下脚本: 换算出输出所耗费的Tokens值后,与汇率相乘得到实际人民币成本。在后置操作中添加以下脚本: 最后还可以在后置操作中添加一个可以自动计算输入+输出总成本的步骤。 //输入输出成本加总constINPUTPrice=Number(pm.environment.get("INPUT_PRICE"));constOUTPUTPrice=Number(pm.environment.get("OUTPUT_PRICE"));console.log("总成本:"+(INPUTPrice+OUTPUTPrice)+"元");这样就能够在调试ChatGPTAPI的过程中预估出大致的输入输出总成本。 现在你不仅可以在Apifox中愉快地调用ChatGPTAPI,还能够清楚掌握你的调用成本,做到心中有数。