Skip to content

账号、代理与凭证 ​

账号代表 Sub2API 实际用于访问 AI 上游的身份。账号质量、额度和网络出口直接决定网关可用性。

如果你还在判断应该填 API Key、OAuth 还是“账号密码”,先阅读运维指南中的上游账号池运维。

账号类型 ​

类型典型凭证说明
apikeyBase URL + API Key官方 API 或第三方协议兼容 API;当前新建兼容上游的主要类型
oauthaccess/refresh token需要刷新和分布式锁
setup-tokenSetup TokenAnthropic inference scope
upstreamBase URL + Key历史兼容类型,主要保留给旧 Antigravity 数据和导入;新建时通常使用 apikey
bedrockAWS key/secret/session 或 Bedrock keySigV4 或专用认证
service_accountGoogle JSON keyVertex AI

同一平台内,不同账号类型也可能走完全不同的 URL、Header、模型名和流事件。

“第三方兼容上游”的操作方法见上游账号池运维,详细 Base URL 规则仍可查阅上游凭证接入参考。

核心字段 ​

字段对调度的影响
platform / type决定协议 Service 和认证方式
credentials真实上游凭证
extra模型映射、上游能力和平台元数据
proxy_id指定网络出口
concurrency账号最大同时请求数
load_factor调整负载计算
priority候选排序,数值越小通常越优先
statusactive/error/disabled 等持久状态
schedulable是否允许调度器选择
expires_at凭证或账号业务到期时间
rate_multiplier账号成本统计倍率

账号还有大量平台专用字段,例如 quota、session window、privacy status、模型白名单、TLS profile 和临时错误状态。

凭证保存与安全 ​

账号 credentials 会持久化到 PostgreSQL JSONB。部署者应按“数据库中保存生产密钥”设计安全措施:

  • PostgreSQL 只允许应用和受控运维账号访问。
  • 禁止把数据库暴露公网。
  • 备份必须加密并限制下载。
  • 管理员账号启用 TOTP。
  • 日志和错误响应保持凭证脱敏。
  • 不给日常分析人员直接查询 accounts.credentials 的权限。

当前部署不能只依赖磁盘加密解决全部问题,因为数据库管理员和逻辑备份仍能读取字段。

OAuth token 刷新 ​

OAuth 账号通常保存 access token、refresh token 和 expires_at。刷新流程需要:

  1. 判断 token 是否接近到期。
  2. 获取账号级分布式刷新锁。
  3. 再次检查是否已被其他实例刷新。
  4. 调用平台 token endpoint。
  5. 持久化新 token,并失效相关缓存。
  6. 释放锁并更新账号状态。

没有锁时,多个请求或实例可能同时使用同一个 refresh token,导致 token rotation 冲突。

持久状态与临时状态 ​

持久状态 ​

管理员禁用、凭证错误、账号到期等写入 PostgreSQL。

临时状态 ​

上游 429、529、内部 500、超时、模型限流等通常写入 Redis,带冷却时间。到期后账号可以自动恢复,不需要管理员手动启用。

排查账号为什么没被调度时,要同时查看两类状态。

代理模型 ​

Proxy 一般包含:

  • HTTP/HTTPS/SOCKS 协议和 URL。
  • 状态、备注和分组信息。
  • 延迟、质量和最近测试结果。
  • 到期时间和到期 fallback。

账号绑定代理后,上游 HTTP client 会根据连接池隔离策略复用连接。

连接池隔离 ​

gateway.connection_pool_isolation 支持:

值隔离键适用情况
proxy代理少量代理、很多账号,资源更省
account账号账号出口和会话需要严格隔离
account_proxy账号 + 代理默认,隔离最细

隔离越细,连接池数量和文件描述符越多;隔离越粗,不同账号共享网络连接的概率越高。

代理失败策略 ​

AI 账号关键路径的代理初始化失败应返回错误,不应静默直连。配置中的 proxy_fallback.allow_direct_on_error 只针对更新检查、定价下载等辅助服务,不应该被理解为账号网关直连开关。

这能避免代理配置错误时泄漏服务器真实出口 IP。

TLS 指纹 ​

部分上游对 TLS ClientHello、ALPN 或浏览器特征敏感。系统允许为账号或代理使用 TLS fingerprint profile,配置 GREASE、cipher suite、curve、signature algorithms 等。

不要在没有明确问题时随意复制未知指纹配置。错误的 TLS profile 可能导致握手失败、HTTP/2 不兼容或更明显的异常特征。

账号并发如何工作 ​

账号槽位存储在 Redis ZSET,member 是 request ID,score 使用 Redis 服务器时间。获取脚本会:

  1. 删除超过 TTL 的槽位。
  2. 如果 request ID 已存在则刷新。
  3. 检查 ZCARD 是否低于上限。
  4. 原子添加槽位并设置 TTL。

进程崩溃后无法执行 release,TTL 会最终清除残留槽位。因此 TTL 应覆盖最长合法请求,但不能长到故障后长期阻塞账号。

添加账号后的验收 ​

  1. 在后台执行账号测试。
  2. 查看账号能否获取模型/额度信息。
  3. 确认代理出口和目标区域。
  4. 把账号加入测试分组。
  5. 发送最小非流式请求。
  6. 测试流式和目标工具能力。
  7. 核对账号并发、用量和成本统计。
  8. 最后再加入正式分组。

典型问题 ​

现象常见原因
测试成功但不调度未加入分组、模型不匹配、schedulable=false
周期性 401refresh token 竞争或 OAuth 客户端配置错误
某模型总是失败模型映射、账号白名单、区域能力
并发远低于配置上游窗口限制、用户槽位、等待策略
切换代理后仍走旧连接连接池缓存未刷新或实例配置不一致
代理故障影响全部账号多账号共用同一代理,缺少出口冗余

本文档用于帮助你理解、部署和运维 Sub2API。使用前请确认上游服务条款与当地法律要求。