CPA Key Billing 1.0:给 CLIProxyAPI 添加下游 API Key 计费与订阅额度

经过一段时间的折腾,CPA API Key 计费插件今天终于整理出了相对完整的 v1.0.0 版本,发出来和大家分享一下。该插件主要用于管理通过 CLIProxyAPI 分发出去的 API Key(下游 API Key),可以记录用量、计算费用,并对不同 API Key 限制额度、并发、模型和订阅账号。下面介绍 1.0 版本的核心特性:

工作原理

插件会在请求到达上游前检查订阅额度、并发和路由。上游调用结束后,CLIProxyAPI 通过 usage.handle 提供用量。插件据此记录请求事件、计算费用并更新周期消费额。

---
config:
  themeVariables:
    fontSize: "13px"
  flowchart:
    diagramPadding: 4
    nodeSpacing: 20
    rankSpacing: 28
    padding: 3
---
flowchart TB
    A[下游请求] --> B["request.intercept_before<br/>模型 · 并发 · 额度"]
    B -- 拒绝 --> R[返回 HTTP 403 / 429]
    B -- 通过并占用并发槽 --> C["scheduler.pick<br/>选择路由允许的上游凭证"]
    C -- 无可用凭证 --> S[返回 HTTP 503]
    C -- 成功 --> D[CLIProxyAPI 调用上游模型]
    D --> E["request.complete<br/>释放并发槽位"]
    D --> F["usage.handle<br/>记录请求事件与用量"]
    F --> G["归一化 Token 并计费<br/>更新周期消费额"]

关于性能

性能方面,插件以同步 RPC 方法接入 CLIProxyAPI 的请求链路。请求准入与凭证调度仅执行本地状态查询和规则计算,不进行网络 I/O,也不复制或解析上游响应;用量记录与计费则在上游调用结束后通过 usage.handle 完成。插件不创建后台协程、定时器或异步刷新任务,整体资源占用较少;请求链路上的额外开销仅来自轻量的本地判断,对请求延迟几乎没有影响。

限制特定 API Key 额度、并发、模型和订阅账号

该插件支持限制特定 API Key 的额度、并发、模型和订阅账号。额度通过订阅计划进行限制,模型和订阅账号通过路由规则进行限制。

支持 API Key 登录插件页面

对于没有 CPA 管理密钥的拼车用户而言,可以使用 API Key 登录插件页面,查看个人订阅额度使用情况、请求事件等。值得注意的是,需要通过以下地址访问,才能使用 API Key 登录:

http(s)://<CLIProxyAPI 地址>/v0/resource/plugins/cpa-key-billing/ui#account

拼车用户无法登录 CPA 管理控制台查看认证账号限额使用情况,也可以使用 API Key 登录插件页面进行查看。

用量分析

可以通过分析页面查看特定 API Key、时间范围的使用情况。


:warning: 升级提醒

如果使用过之前的版本,需要特别注意:

v1.0.0 不迁移旧版 JSON 或 SQLite 数据,需要使用新的数据库并重新配置。

默认数据库路径已经改为 plugins/cpa-key-billing-state-v1.db,如果以前显式配置过 state_file,升级前请修改路径,并保留旧文件作为备份。插件检测到旧格式时会拒绝打开,不会覆盖原文件。


原开源推广话题


GitHub 仓库

58 个赞

能不能给特定api key绑定可用ai提供商,我有一些只想自己用不想共享给朋友用,但里面模型又和其他站点的模型重复,直接绑可用模型没法实现这个效果

这是下一个待实现的目标,等实现后我回复你

3 个赞

mark一下,刚好最近想着通过cpa管理一下api :smiley:

这个是不是在插件商场里搜不到啊,没找到,没审批通过吗

插件市场展示需要在 CLIProxyAPI-Plugins-Store 仓库里面提交 PR,我上周就提交了,但是没有被合并。实际上这个仓库已经有两周多没有被活动过了 :person_facepalming:

能不能加上通过下游 apikey 可以仅查看账号的配置,特别是模型映射,防止上游作弊

当前就是这样设计的,通过 API Key 登录只能查看,不能修改任何配置。

1 个赞

这个会和cpamp冲突吗?是不是用了这个插件就可以不用cpamp查看用量记录了

不冲突,事实上我还专门做了 CPAMP 前端样式兼容,在 CPAMP 里面看到的 UI 样式和 CPAMP 本身风格是大致接近的 :upside_down_face:

当前插件页面同时兼容 CPAMC(官方面板)和 CPAMP 的深浅色 UI 风格。

3 个赞

搞定了,升级最新版本就能使用。

具体而言,在之前的可用模型基础上做了扩展,现在实现了一个路由规则。可以在设置中新建路由规则,每条路由规则可以绑定若干模型和若干凭证。凭证分两种类型,一种是 OAuth 产生的认证文件类型,一种是通过上游 Key 配置的 AI 供应商类型。凭证的选择也有两种,一种是直接直接选择整类,例如“认证文件・codex”,一种是选择特定的凭证。

创建好的路由规则可以绑定到 API Key 上,可以在创建路由规则的时候直接选择若干 API Key 进行绑定,也可以在 API Key 表格中通过路由规则下拉选择框进行绑定。当然,这个下拉选择框中可以绑定的对象比较丰富,不仅仅可以绑定创建好的路由规则,还可以直接选择凭证和模型。所以,不用在设置中预设路由规则也可以达到同样的目的。预设路由规则主要是为了方便复用。

效果如下

4 个赞

强,等了2周,大佬终于把这个插件维护成想要的效果了

全靠佬友们的意见和建议,有很多需求都是逐渐被提出来的 :melting_face:

这个可以为每个key自己绑一个5h 7day之类的吗,类似原生账号的那种从第一下开始用来计时5h,litellm的5h 7day只能固定时间点刷新

目前每个 API Key 只能绑定一个套餐,5h / 7d 不能同时绑定。计时规则已经是你说的那样了,从第一次调用开始计时,不调用则不计时。如下图所示,到期时间中显示“未开始”就说明这个 API Key 没有调用(没有激活周期窗口)。

题外话:给拼车用户限制 5h 用量是不是有点太残忍了,我是不想要这个东西的,并且希望全天下的订阅都没有 5h 限制

1 个赞

那又有新需求了,要根据绑定的账号来计算时间区间,而不是根据key

没必要吧,这太极端了,而且跟上游账号耦合的太严重了,很难实现。就算实现也无法覆盖大部分场景,只能覆盖一个 API Key 只绑定一个上游账号的场景。

再加上 Codex 周期并不稳定,Tibo 经常重置什么的。想想就已经头大了。

能不能给指定的用户(组)分配指定的若干个号 :rofl: :rofl:(那天想把同学的plus放到我的vps时想要的功能)

这个功能已经有了,在“路由规则”中,详情查看

2 个赞

确实是这样,正常拼车的需求就是这个