[Feature] 在用量和计费中展示自定义模型供应商的每日 Token、缓存与费用估算
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 395
- Avg merge
- 21h 48m
- Merged PRs (30d)
- 776
Description
## 使用场景 / Use case
目前「用量和计费」主要呈现 Cindy 官方订阅相关信息。用户自行配置模型供应商(BYOK / 自定义 Provider)后,实际也会持续产生 Token 消耗和外部费用,但缺少统一、按日可查看的用量视图。
希望在同一板块中,以明确区分于 Cindy 官方订阅的方式,展示自定义模型供应商的每日用量与费用估算,帮助用户回答:
- 今天分别用了哪些供应商 / 模型?
- 输入、输出和缓存 Token 各消耗多少?
- 缓存命中情况如何?
- 按供应商官方 API 公开价格折算,大约产生了多少费用?
- 哪些是 Cindy 官方订阅额度,哪些是用户自行承担的外部供应商成本?
## 当前问题 / Current limitation
1. 官方订阅与自定义 Provider 的消耗缺少统一视图,用户需要到多个供应商后台分别核对;
2. 自定义 Provider 缺少按日、按供应商、按模型的 Token 汇总;
3. 缺少缓存读取 / 写入量与缓存命中率,难以判断缓存是否真正节省成本;
4. 现有成本估算在未知模型上可能回退到不匹配的价格,容易把估算值误认为真实账单;
5. 自定义 Provider 的外部订阅、预付额度或 Coding Plan 与 Cindy 官方订阅不是同一计费主体,目前没有清晰区分。
## 期望方案 / Proposed solution
在「用量和计费」中增加「自定义供应商 / 外部用量」区域,至少支持:
### 1. 每日用量
按日期汇总,并可下钻到供应商和模型:
- 输入 Token
- 输出 Token
- Cache read Token
- Cache write Token(协议可提供时)
- 总 Token
- 请求次数
### 2. 缓存指标
建议同时展示原始 Token 数量和命中率,避免单一百分比失真。
可考虑统一口径:
```text
缓存命中率 = cache_read_tokens / (input_tokens + cache_read_tokens)
```
若不同协议的 usage 口径不一致或字段缺失,应显示「暂无数据」,不要按 0% 处理;最终公式也可以由维护者根据现有数据模型确认。
### 3. 费用估算
按对应供应商 / 模型的官方公开 API 单价,对输入、输出、缓存读取、缓存写入分别估算,并汇总为每日金额。
同时明确标注:
- 「估算费用」,不是 Cindy 收费,也不代表供应商最终账单;
- 使用的价格来源、币种和价格更新时间;
- 未知模型或缺少可靠定价时显示「无法估算」,不要回退到其它厂商价格;
- 若用户使用包月订阅、Coding Plan、赠送额度、阶梯价或企业协议,估算金额与实际支付可能不同。
### 4. 订阅与费用归属
在界面上清晰拆分:
- **Cindy 官方订阅**:由 Cindy 管理的套餐、额度和消耗;
- **自定义供应商**:本地统计的使用量与 API 价格估算;
- **外部订阅 / 预付计划**:如无法从供应商 API 可靠获取,只展示用户可配置的说明或跳转入口,不伪装成已同步的真实余额 / 账单。
### 5. 筛选与汇总
- 时间范围:今日、近 7 天、近 30 天、自定义;
- 维度:供应商、模型、Agent / 会话(视现有数据能力);
- 总览与明细使用同一统计口径;
- 时区和跨日归属明确,默认跟随本地时区。
## 数据与隐私
- 用量统计优先基于本地已有 usage 元数据,不上传 API Key、请求正文或响应正文;
- 对不返回 usage 的供应商 / 协议明确标记数据不完整;
- 历史数据无法补齐时,从功能启用或版本升级后开始统计,并在 UI 说明;
- 供应商、模型重命名后仍应保留历史归属,避免汇总串线。
## 验收标准
- [ ] 自定义 Provider 用量可按日查看;
- [ ] 可按供应商和模型查看输入、输出、缓存读写及总 Token;
- [ ] 缓存命中率有明确、统一口径,字段缺失时不会误显示为 0%;
- [ ] 可按官方 API 单价估算每日费用,并展示价格来源与更新时间;
- [ ] 未知模型不会套用其它厂商价格,无法可靠估算时显示 N/A;
- [ ] 官方订阅消耗、自定义 Provider 估算、外部订阅 / 预付计划在 UI 中明确区分;
- [ ] 估算费用明确标注不等于真实账单;
- [ ] 支持至少今日、近 7 天、近 30 天筛选;
- [ ] 数据统计不包含 API Key、请求正文或响应正文;
- [ ] 缺失 usage、历史数据不可补齐、时区边界等情况有明确降级表现。
## 需要确认的产品决策
1. 自定义 Provider 的费用估算是否默认开启,还是由用户选择价格来源 / 手动配置单价?
2. 官方定价数据由 Cindy 内置维护、远程配置,还是允许用户覆盖?
3. 外部包月订阅 / Coding Plan 只做说明,还是允许用户录入套餐价格并计算「等效使用成本」?
4. 缓存命中率最终采用哪一套跨协议口径?
5. 第一阶段是否先交付本地按日 Token 与估算费用,再逐步增加订阅 / 余额集成?
## 相关 Issue
- #388:自定义 Provider 成本可能回退到错误厂商价格,讨论自定义价格与 N/A 策略;
- #648:官方「用量和消耗」升级为「订阅与充值」,聚焦 Cindy 套餐、额度与续费管理。
本 Issue 聚焦的是:**把自定义 Provider 的每日 Token、缓存指标与外部费用估算纳入统一用量视图,同时与 Cindy 官方订阅清晰分账。**
Contributor guide
Research direction
The issue names no files, tests, or entry points. Start by reviewing related issues #388 and #648, then resolve the listed product decisions about pricing, cache metrics, subscription handling, and rollout scope. Done means the agreed daily usage, estimation, filtering, attribution, privacy, and fallback requirements are implemented and covered by the acceptance checklist.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- full-stack
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100