xiaoxx970 / chatgpt-in-terminal

Use ChatGPT in terminal
MIT License
201 stars 27 forks source link

/usage 命令的重写方案 #22

Closed Ace-Radom closed 1 year ago

Ace-Radom commented 1 year ago

repo: LaoYutang/openai-balance

这是一个用go写的程序 已经个人测试可行

参考网上大佬的方案,暂时只能使用subscription接口获取总额度,然后使用usage接口获取使用量,相减来得到余额。

最近查到的资料也基本表示这可能是目前唯一可行的方法 我在尝试怎么把这一套移植到python里 估计要一两天时间【go懂的不多】

Ace-Radom commented 1 year ago

也就是说 目前需要两个api来实现这个功能

https://api.openai.com/dashboard/billing/subscription
https://api.openai.com/dashboard/billing/usage

S5)BXP}SF4LY~8()F_B X%Q

subscription接口的回复如上 只需要指定key即可 其中的 hard_limit_usd 就是该key的总额度 单位为美元

而usage接口的使用则复杂一些

D8 4YP{%I@@RKKZ 0WA52

在调用usage接口时需要指定 start_dateend_date 格式为 yyyy-mm-dd 该接口会返回这段时间内的 total_usage 单位为美分 需要注意的是:

  1. 调用usage接口时指定的起始日期和结束日期之间的时间差不能超过一百天 这意味着没有办法直接通过一次访问就获得整的使用量 需要用循环依次获取然后累加

    image
  2. usage接口必须使用get请求 post请求会报错

那么比较稳定的解决方法就是一次get三个月 从一个时间点起始然后循环到现在 然后把所有的 total_usage 累加起来 然后 hard_limit_usd 减去这个总和 剩下的就是账户余额

方法大概就是这样 我明天下午去尝试实现一下然后PR

但问题其实还是有的 我没有搞懂 soft_limit_usd hard_limit_usdsystem_hard_limit_usd 之间的区别 只是看那个repo里用的 hard_limit_usd 而且确实也没错所以……总之我会再研究一下

Ace-Radom commented 1 year ago

也不知道这个方法还能活多久……OpenAI貌似不想让人从外部获得这些数据 其实我有一种猜测 老的credit_grants接口被封锁的原因有可能是因为这个接口的回复里有一个id 然后这个id泄露可能会有什么问题 毕竟如果OpenAI只想让用户从浏览器内部获得账户数据没理由不把整个 /dashboard/billing 给封掉 但他们没有这么做【至少目前没有】而且目前调用的两个接口也确实不会回复这个id 当然也就是一个猜测罢了也可能只是那帮子人真的忘了

另外有一点就是usage接口的回复是真的相当之详细 感觉 /usage 命令的功能可以扩充很多很多 但这些毕竟是次要的所以放在第二位实现 主要还是恢复原本 /usage 的功能

Ace-Radom commented 1 year ago

Done