AI 网关
预计阅读时间: 7 分钟 预计阅读时间: 7 分钟summer-ai 是一个内嵌在主应用里的 LLM 中转网关。它和外部独立项目(one-api / new-api / AxonHub 等)的差异是:和后台共用同一套鉴权、计费、审计、数据库,运维只需要管一个进程。
crate 划分
三大入口协议
crates/summer-ai/relay/src/router/mod.rs 把 relay 拆成三个独立子路由,每家协议独立鉴权 + 独立 panic guard:
关键设计:每家 flavor 由路由结构静态决定,鉴权阶段的 panic 也会被对应 flavor 抓住。
6 维动态路由
summer-ai/relay/src/service/ 把"模型请求 → 上游渠道"的映射做成 6 个维度,可在数据库里热改:
请求路由过程:
40+ 上游适配器
relay/src/service/chat/ 用 ZST(零大小类型)+ 静态分发的方式实现,零运行时开销。常见适配:
新增适配只需要实现一个小 trait,放到 service/chat/ 下,inventory 自动注册。
三阶段计费
summer-ai/billing 的计费链路是原子三段:
为什么要三阶段?
- 单阶段"算完再扣"在并发下会超扣(很多请求同时通过额度检查)
- 单阶段"先扣再用"会多扣(估算往往大于实际)
- 三阶段在 Reserve 时就锁定额度,Settle 时按真实 usage 找平,Refund 兜底失败场景
热更新
所有路由配置都在数据库里,改完不需要重启:
relay/src/service/channel_store.rs 里有定时刷新机制(默认几十秒)。改完配置最多等一个刷新周期生效。
完整请求追踪
每条请求在 ai.request_log 表里有完整记录:
OpenAPI 后台也提供 /api/ai-admin/request-log 接口检索。
OpenAI ChatGPT OAuth
relay/src/service/oauth/ 支持把官网 ChatGPT 账号通过 OAuth 接进来当上游:
- 用户在 AI 后台触发 OAuth 流程
- 拿到 OpenAI 的 access_token + refresh_token,落到
ai.channel_account - 后台 job 自动续 refresh_token
这样就能用个人订阅当 API 用,流量计入个人订阅额度。
调用示例
与 MCP / Agent 的关系
summer-ai-relay是中转层(代理上游)summer-ai-agent是 Agent 层(用 rig-core 调中转 + MCP 工具)summer-mcp是工具层(给 AI 助手暴露数据库 / 业务能力)
详见 MCP。
参考源码
- 路由组装:
crates/summer-ai/relay/src/router/mod.rs - 协议子路由:
crates/summer-ai/relay/src/router/{openai,claude,gemini}/ - 鉴权:
crates/summer-ai/relay/src/auth/ - 上游 channel:
crates/summer-ai/relay/src/service/channel_store.rs - 流式驱动:
crates/summer-ai/relay/src/service/stream_driver.rs - 模型映射:
crates/summer-ai/relay/src/service/model_service.rs - 计费:
crates/summer-ai/billing/src/ - 后台 API:
crates/summer-ai/admin/src/router/(15+ 个文件) - 设计文档:仓库根
docs/relay/summer-ai/docs/{DESIGN,ROADMAP,MIGRATION}.md
