Files
new-api-custom/docs/token-routing-custom18.md
T
cneicy ceddfd3d6b feat: sync deployed v1.0.0-rc.38-custom.42
Sync production source including routing, billing, Astra detection and public uptime. Update custom build instructions and license packaging.
2026-09-26 04:49:11 +08:00

46 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Token 路由与 Astra 逐次结算(custom.18)
## 路由配置
API 密钥编辑页使用一个分组池;数字越小越优先,相同数字轮询。模型规则精确匹配原始请求模型名,规则分组先于默认池内其余分组;不支持的分组会按用户当前权限过滤。
- `custom`:自定义池与模型规则。
- `inherit`:跟随用户可用的全局 Auto 分组。
- `user`:跟随用户当前所属分组。
- “Astra 优先 preferred-group”只是快捷预设;仅在池内已有 `preferred-group` 或本站的 `example-preferred` 时可用,不会自动加入分组或覆盖已有 Astra 规则。
- 服务端路由预览只计算顺序,不调用上游、不计费。渠道可用性与会话绑定仍会影响实际选择。
- 成功会话绑定按用户、Token、原始模型和会话隔离;新会话按模型规则选择,已有成功绑定优先。失败清除绑定后不会重新采用同一历史日志绑定。
启动时,主节点迁移所有未删除的存量 Token,保留旧配置的有效顺序/并列优先级与继承模式,不注入任何模型规则。重复启动不会覆盖新策略。Token 缓存使用新版本命名空间,避免旧缓存绕过策略迁移。
## Astra 守卫与计费
仅针对 HTTP `POST /v1/responses` 且原始模型严格为 `gpt-6-astra`:
- 守卫开启、明确返回错误模型、尚未交付客户端时,可以切换至未试过的渠道,总上游尝试最多 3 次(不受普通 RetryTimes=1 的两次限制)。
- 缺失模型、确认超时不触发这个特殊重试;固定渠道、取消请求、已交付响应、`previous_response_id` 或上游 `conversation` 不进行该重放。
- 每个候选渠道自己的守卫开关仍有效。确认阶段共享默认 300 秒预算,而不是每次重新开始。
- 每次实际消耗独立按请求的 Astra 价格和当次实际分组倍率结算。错误返回 Luna 的已消耗尝试也计费;最终成功只代表最后一次交付成功,不代表前面的尝试免费。
- 被拒绝的响应不向客户端交付,后台最多收集 60 秒 usage。实际 usage(含缓存命中)优先;缺失 usage 时按实际准备发送的输入及观察到的输出估算,不虚构缓存命中。
- 除明确模型不匹配外,其他守卫失败只有在观察到实际 usage/输出时收费;纯超时、无输出无 usage 的尝试退回预扣。
- 保留 custom.17 对 `stream=false` 上游返回 SSE 的兼容处理。
## 账本与日志
`relay_attempts` 保存预扣、检查点、结算状态与日志 outbox,不保存提示词、输出正文或上游密钥。钱包/订阅、Token、用户、渠道和开启导出的看板统计在同一事务结算。唯一 attempt key 防止重复扣费/重复日志;SQLite 写冲突重试的是整个已回滚事务。
失效预扣由恢复任务每 5 秒扫描;活跃请求续租,进程中断后通常最多等待 10 分钟租约过期,再按最后持久化的 usage 检查点结算或退款。独立日志库恢复后可重放 outbox,不重复财务扣款。
用量日志的路由尝试面板显示请求/返回模型、实际分组、费用依据、缓存用量、估算标记和结算状态。面板的合计是各次已结算费用之和,不是再次收费。普通用户只能访问自己的记录,渠道 ID 仅管理员可见。
## 验证范围
- SQLite、MySQL 8.4、PostgreSQL 18.6:新库、存量升级、重复迁移、幂等结算、订阅、日志 outbox。
- SQLite 并发预扣/结算压力回归;钱包、Token 与渠道统计一致。
- 真实候选 HTTP:两错一对、三次都错、流式切换、固定渠道、previous_response_id、守卫关闭、缺失模型无消耗、缺失 usage 估算、交付后错误模型不重放。
- 实际 dashboard 鉴权下验证管理员/本人/其他用户记录隔离、看板总额、零上游路由预览。
- 前端类型检查、目标 lint 和 276 项组件/表单回归。
- 生产库隔离副本:32 个存量 Token 逐个对比旧配置,重复启动策略哈希不变。
ClickHouse 不是这次验证的数据库范围。