fix: 修复 CPA 用量与请求终态关联

This commit is contained in:
chuan
2026-08-16 02:51:04 +08:00
parent daf7e4ce61
commit 803251b08a
16 changed files with 895 additions and 20 deletions
+4 -3
View File
@@ -26,20 +26,21 @@ CLIProxyAPI 会通过两个独立回调提供请求信息:
| 事实 | 来源 | 主要内容 |
| --- | --- | --- |
| 请求终态 | `request.complete` | Request ID、开始与结束时间、成功/失败/拒绝/取消、状态码和错误 |
| 最终用量 | `usage.handle` | 实际上游、模型、Token、延迟和 Usage 结果 |
| 最终用量 | `usage.handle` | Request ID、Trace ID、实际上游、模型、Token、延迟和 Usage 结果 |
这两个回调可能乱序、重复或只到达其中一个,因此数据库分别保存原始事实,再建立请求明细查询投影。管理台看到的一行是查询结果,不会为了合并展示而修改原始事实或计费账目。
## 请求关联与独立用量
- Request ID 用于关联一次下游请求的生命周期。
- 当前目标 CPA 的 Usage 契约提供 Request ID 或 Execution IDRequest ID 和 Trace ID 来自独立的请求终态
- RPC schema v4 的 Usage 契约提供 Request ID 和 Trace ID,用于与请求终态精确关联
- 旧 schema 或历史 Usage 没有请求身份时,仍使用保守的唯一时间窗口匹配作为兼容路径。
- 每条可区分的 Usage 事实分别保存,不会为了得到一条整齐记录而把多个用量相加。
- 当前契约无法保证把每次上游重试稳定标记为某个 Execution ID,因此管理台不声明这种保证。
- 没有 Usage 的拒绝、取消或失败请求仍然显示请求终态。
- 只有 Usage、暂时没有终态的记录也可以单独显示,终态到达后投影会自动更新。
系统仅在模型和请求时间足够接近且匹配关系唯一时,将 Usage 与终态合并;存在并发歧义时宁可保留为两条,也不会错误关联到其他用户的请求。
schema v4 记录按 Request ID 精确归并,不受同模型并发影响。只有旧 schema 或历史孤立记录才使用模型和请求时间匹配;存在并发歧义时宁可保留为两条,也不会错误关联到其他用户的请求。
## 请求结果