OpenAI提供了billing相关的接口,用api key 查询账号的用量和额度。但统计数据是针对账号而不是key的,因此当一个账号有多个keys 的情况下无法分辨每个key用量的多少。这是定论,也是openai论坛呼声很高的一个需求。

How to track API usage and cost by API key?

既然有需求在,那么来解决一下。说下我的思路

我需要把API分开给不同的应用或者分享给不同的人,我需要知道他们分别的使用情况,有没有被滥用或闲置。

思路

  1. 搭建 Nginx反代,让所有的API请求经过这台代理。
  2. 通过 Nginx的访问日志捕获所有的请求,包括 key信息
  3. 对日志进行分析统计,统计key的请求数量和发送的信息量

额外地,还需要工具对apikey批量查询用量,这里用别人现成的

https://github.com/ClarenceDan/openai-billing

已知缺点和风险

  1. 需要在可控条件下才具备统计意义,如果APIKey被拿去在其他地方部署不经过代理,请求记录无法被捕获。
  2. 安全风险,key信息保存在日志和数据库中时,有泄露的风险。
  3. 用量计量不精准, 只能大概统计到使用频率。只有 用户->GPT单向请求(用户输入的信息量),但AI返回的信息量长度没有记录。

具体实现:

(还没写)

流水账,以下步骤均在 chatGPT指导下完成

  • 修改 nginx.conf 的 log_format 添加 header http authorization 信息
  • 启用 logrotate 服务对日志文件定期进行分卷(不然日志太大很难进行分析)
  • python脚本对分卷归档的日志文件做扫描分析,统计用量写入mysql
  • cronjob 定时执行python脚本(在logrorate 每次执行后)

标签: chatGPT, openai, apikey

添加新评论