AI API 基础设施
TokenBridge
在每一次 LLM 调用发生之前,就知道用户还有没有额度 — 而不是月底对账时才发现亏了几万块。
李明 · 后端负责人
「我们卖 Token 包,用户余额归零后网关还在转发上游 — 上个月有用户透支跑了 $2,000 的 Opus,我们全赔。Stripe 账单 T+1 才到,根本拦不住。」
痛点
预付费 Token 转售 + 多模型差异化定价。余额在业务 DB,与真实 Token 消耗异步对账。重试导致重复扣费争议。
如何集成
- 1 部署 Lite(make demo)— Redis + API,无需 Flink。
- 2 注册时:POST /budget/{userId} 设置 max_rpm。充值后:POST /budget/{userId}/package。
- 3 可选:POST /budget/{userId}/webhook,在消耗达 70%/90% 时收 BUDGET_WARN(v2.7 Lite)。
- 4 可选(v2.8):POST /admin/customers/{id}/apikeys/{key_id}/budget 设置按 Key 限额。
- 5 Hook 1(同步):转发上游前 GET /budget/{userId}/check?estimated_cost_usd=…
- 6 allowed: false → 返回 HTTP 402。allowed: true → 调用 OpenAI / DeepSeek / 通义,再执行 Hook 2。
- 7 Hook 2(异步):POST /ingest,带 customerId、modelId、tokens,eventId=上游 id 保证幂等。
- 8 用量中心:后端代理 GET /usage/customer/{id}/period|day|model/* — 勿向前端暴露 Admin Key。
关键 API
- 请求前拦截
GET /budget/{id}/check - 软告警
POST /budget/{id}/webhook - 按 Key 预算
POST /admin/customers/{id}/apikeys/{key_id}/budget - Token 包余额
GET /budget/{id}/package - 调用后计量
POST /ingest - 开发者看板
GET /usage/customer/{id}/period/{YYYY-MM}
ID 映射
customerId = user_{uuid}(与用户表 1:1)。eventId = 上游请求 id(如 chatcmpl-xxx)用于去重。
# Hook 1 — before every upstream LLM call
curl "localhost:8000/budget/user_wang/check?estimated_cost_usd=0.03"
# → allowed: false → return HTTP 402 to developer
# Optional (v2.8): per-key API budget on customer keys
# POST /admin/customers/{id}/apikeys/{key_id}/budget
# Hook 2 — after upstream response (async OK)
curl -X POST localhost:8000/ingest \
-H 'Content-Type: application/json' \
-d '{"customerId":"user_wang","modelId":"gpt-4o","inputTokens":500,"outputTokens":150,"eventId":"chatcmpl-abc"}'
# Soft alerts (v2.7 Lite) — BUDGET_WARN at 70%/90% spent
curl -X POST localhost:8000/budget/user_wang/webhook \
-d '{"webhook_url":"https://api.example.com/hooks/fluxmeter"}'
# On recharge — token package
curl -X POST localhost:8000/budget/user_wang/package \
-d '{"tokens": 10000000}'效果
平台透支损失归零。硬切断前可先软告警。开发者自助查日/月/模型用量。网关仅加两个 Hook — 通常 3–4 周上线。