对话流程

页面

relay路由中间件Playground模型中继公共服务DB存档middlewareRouteTag(将传入的标签存入请求上下文)响应SystemPerformanceCheck(针对 /v1/messages 路径返回 Claude 格式错误,其余路径返回 OpenAI 格式错误,检查失败则中断请求)响应UserAuth( 统一处理用户会话 / Token 认证、身份校验、权限校验,通过后注入用户信息到 Gin 上下文)响应Distribute( 模型渠道分发中间件:指定渠道 / 自动负载均衡选渠道,校验权限、分组、状态,完成上下文注入)响应(Playground)平台页面请求流程GenRelayInfo(获取模型请求格式信息)响应GetUserCache(根据用户编号获取用户信息)写入上下文SetupContextForToken(设置tempToken :{UserId:userId,'name':playground+`UsingGroup`,"Group":'UsingGroup'} )响应Relay(发送模型流程)relay路由中间件Playground模型中继公共服务DB存档middleware

relayRouter->>Middleware: Distribute

核心功能拆解

  1. 两种渠道分配方式
  • 强制指定渠道:从上下文取固定渠道 ID,直接校验状态
  • 自动分配渠道:根据请求模型、用户分组、偏好亲和性,随机选取健康可用渠道
  1. 多层权限校验
  • Token 模型权限:校验用户是否允许使用当前模型
  • 分组权限:校验用户是否有权访问请求的分组
  • 渠道状态:仅使用启用(Enabled)的渠道
  1. 特殊场景处理
  • 支持 Playground 接口自定义分组
  • 支持渠道亲和性(优先使用上次成功的渠道)
  • 支持 auto 自动分组智能匹配
  1. 收尾动作
  • 记录请求开始时间
  • 注入渠道信息到上下文
  • 请求成功后记录渠道亲和性

通过API请求的类

relay路由中间件PlaygroundRelay控制器RouteTag(将传入的标签存入请求上下文)响应SystemPerformanceCheck(针对 /v1/messages 路径返回 Claude 格式错误,其余路径返回 OpenAI 格式错误,检查失败则中断请求)响应TokenAuth( 统一处理用户会话 / Token 认证、身份校验、权限校验,通过后注入用户信息到 Gin 上下文)响应Distribute( 模型渠道分发中间件:指定渠道 / 自动负载均衡选渠道,校验权限、分组、状态,完成上下文注入)响应Relay( 模型渠道分发中间件:指定渠道 / 自动负载均衡选渠道,校验权限、分组、状态,完成上下文注入)relay路由中间件PlaygroundRelay控制器

relayV1Router->>TokenAuth: UserAuth

  1. 兼容各种密钥位置
  • WebSocket 从协议头取 key
  • Claude 从 x-api-key 取
  • Gemini 从 URL 参数 / 请求头取
  1. 统一转成标准 Bearer 密钥
  • 校验令牌合法性
  • 解析密钥 → 验证有效性
  • 校验用户是否被封禁
  • 校验 IP 是否在白名单
  1. 校验权限并放行
  • 校验用户分组、令牌分组权限
  • 把用户 / 令牌信息存入上下文
  • 放行后续业务逻辑

API