03 第3周D15 sub2api计费
D15 sub2api / newapi 计费体系
D15 sub2api / newapi 计费体系
精讲(主营业务核心,全员必须理解)。公司的盈利闭环全在这:把上游能力变成可计费的服务卖给客户。第 4 周项目 B(计费引擎)就是它的简化复刻。
教学目标(学完能做什么)
- 能说出 sub2api / newapi 在计费链路里的分工
- 理解 newapi 类网关的四个核心概念:渠道(channel) / 令牌(token) / 分组(group) / 定价
- 能说清一次调用如何完成 鉴权 → 转发 → token 统计 → 扣费 → 流水
- 理解余额、流水、结算口径,能读懂一份计费流水
- 了解 sub-box 订阅体系与 dashboard 的定位
前置要求
- D11(数据库/事务)、D13(usage)、D14(端点验证)
本模块在业务中的位置
- 中游 + 下游:newapi 类网关把上游变成统一 API,sub2api 面向客户算钱。这一环决定公司赚不赚钱、账对不对得上。公司文档见
services/sub2api/docs/、services/sub-box/docs/。
内容分段
1. 分层再看一遍计费链路
上游端点(D14 验证过)→ newapi 类网关(渠道配置)→ sub2api(订阅/余额/流水)→ 客户
│ │
统一 API(OpenAI 兼容) 面向客户算钱- 记忆:newapi 管"货怎么供",sub2api 管"钱怎么算"。
2. newapi 四个核心概念(渠道/令牌/分组/定价)
| 概念 | 含义 | 类比 |
|---|---|---|
| 渠道 Channel | 一个上游端点/Key 的配置(指向 base + key + 权重) | 进货渠道 |
| 令牌 Token | 发给下游客户用的 API Key(客户凭它调用) | 客户的门卡 |
| 分组 Group | 渠道/令牌/模型的分组(不同组不同可用范围与价格) | 会员等级 |
| 定价 | 各模型在各分组下的单价($ / 1K tokens) | 价目表 |
- 关键操作链:渠道(货)→ 分组(档)→ 令牌(卖给谁)→ 定价(收多少)。
3. 一次调用的计费全流程(D1 第 5 节的深化)
- 客户用令牌请求
/v1/chat/completions(OpenAI 兼容)。 - 网关鉴权:令牌有效?属于哪个分组?
- 按分组/权重挑渠道,转发到上游(Claude 端点)。
- 上游返回
usage(input/output tokens,D13 学过)。 - 网关按定价表算钱:
成本 = input_tokens × 输入单价 + output_tokens × 输出单价。 - 在事务里:
UPDATE 余额+INSERT 流水(D11 的 ACID 用上了)。 - 响应返回客户;余额不足/超限 → 401/403/429。
- 强调第 5-6 步:usage 是唯一计费依据,扣费必须事务原子。
4. 余额、流水、结算
- 余额:客户的"钱包",充值/扣费都动它,
NUMERIC精确(D11)。 - 流水(bills):每一笔的明细——用户、令牌、渠道、模型、input/output tokens、金额、时间。流水是账本的原始凭证,对账/排查全靠它。
- 结算:定期按流水汇总(按供应商/按商品/按客户),生成报表(对应公司"采购统计"的实践)。
- 设计原则:只记原始流水,汇总实时算或定期算,别用累加计数存余额反推。
5. sub2api 与 sub-box 定位
- sub2api:公司自研计费系统(主营业务核心)。细节以
services/sub2api/docs/为准。 - sub-box:订阅系统(v2.1.0),含 proxy 模式 + 节点、dashboard(
subbox.server.akria.net),文档在services/sub-box/docs/dashboard-design.md与enrollment.md。 - 关系:sub2api 管计费,sub-box 管订阅/节点/客户端,两者构成"卖 token"的完整交付。
6. 计费系统的几个"必须正确"的点
- 金额精度:全程
NUMERIC,禁止 float。 - 原子扣费:扣余额 + 记流水同一事务。
- 幂等:重试同一请求不能重复扣费(用请求 ID/去重)。
- 负数防护:余额扣成负数要么拒绝(
WHERE balance >= cost),要么允许后记负账——业务上必须明确。 - 限流:RPM/并发超限 → 429(D14 测出的边界)。
- 对账:流水与上游 usage 对得上;定期与供应商结算对得上。
讲解节奏建议(约 90 分钟)
| 时段 | 内容 |
|---|---|
| 09:00-09:15 | 引入:计费=公司盈利闭环,账错一分钱都是事故 |
| 09:15-09:45 | newapi 四概念(渠道/令牌/分组/定价) |
| 09:45-10:20 | 一次调用计费全流程(白板走 7 步) |
| 10:20-10:45 | 余额/流水/结算 + 必须正确的 6 点 |
| 10:45-11:10 | sub2api / sub-box 定位(打开公司文档对照) |
| 11:10-11:30 | 学员走一遍测试环境计费(对应作业) |
| 11:30-11:50 | 常见误区 + 小结 |
| 11:50-12:00 | 布置作业 |
常见误区汇总
| 误区 | 正确理解 |
|---|---|
| 计费就是扣个数字 | 必须:usage 统计 + 事务扣费 + 流水凭证 + 幂等 |
| 余额用 float 存 | 用 NUMERIC;float 会算错钱 |
| 流水可以不记 | 流水是账本凭证,对账排查全靠它 |
| 重试会导致重复扣费 | 要幂等/去重,按请求 ID |
| 列表有模型就能定价卖 | 只能给 D14"实测可调"的模型定价 |
| sub2api 和 newapi 是一个东西 | newapi 管供货(渠道/令牌),sub2api 管算钱(余额/订阅) |
| 余额扣成负数没关系 | 业务上必须明确策略:拒绝 or 负账,不能稀里糊涂 |