一个接口调用三个模型,我只用了一个反向代理
最近项目里接了三个模型——Qwen做长文本总结DeepSeek做代码生成千帆做特定领域问答。每个模型都有自己的SDK和鉴权方式。 最初的版本是前端直接分别调三个接口代码散落在各种service里切换模型要改业务代码。更烦的是计费——三个供应商的费用要分别算月底对账很头疼。 后来我加了一层反向代理整体架构变成了前端→统一网关→模型路由表→供应商。 核心实现就三步 1. 前端只调一个 /api/chat 接口请求体里加一个 model 字段 2. 网关根据 model 字段查路由表匹配供应商和真实endpoint 3. 做一个简单的协议适配层——OpenAI格式进来千帆格式出去 Qwen的DashScope和DeepSeek的OpenAI兼容格式差异不大主要是千帆需要先用API Key换access_token这个token有两小时有效期。我在内存里做了个带过期时间的缓存并发情况下用singleflight避免重复请求。 计费方面在每个请求的响应拦截器里记录token使用量按供应商的单价换算成人民币写到独立的计费表。月底直接拉报表。 踩过的坑 - 千帆的流式返回和标准SSE有细微差异content字段名不一样需要额外做字段映射 - DeepSeek的token计数方式比较特别同样一段中文比Qwen多算30%的token - 高峰期并发量大时千帆的access_token刷新成为瓶颈后来换了互斥锁提前刷新解决了 这个方案的代码量不大核心就一个路由表和两个适配器。但带来的收益很明显——切模型零代码改动计费统一新增供应商只需要加一行路由配置。 如果你也在做多模型接入可以试试这个思路。