llm-gateway-selection
name: llm-gateway-selection
description: 大模型网关与多供应商路由的选型和落地。当要接多家模型供应商、要做故障转移和降级、要统一计费和配额、要在国内外模型之间路由、或者纠结自建网关还是用现成方案时使用。触发词:LLM 网关、AI 网关、模型路由、多模型、故障转移、failover、限流、配额、统一鉴权、OpenAI 兼容、供应商切换、国内可用的模型。不负责单次调用的成本核算(走 llm-cost-audit)和效果评测(走 llm-eval-set)。
LLM 网关选型与落地
只接一家供应商、只有一个应用调用时,不需要网关。出现下面任意两条,就该上:
- 接了两家以上供应商,或者同一家的多个模型
- 有三个以上业务方在调用,需要分别计费或限额
- 供应商抖动会直接影响线上,需要自动切换
- 需要统一的日志、审计和用量报表
- 密钥散落在各个业务代码里
一、网关该干什么
按重要性排序。前四项是必须,后面的按需。
- 统一入口与鉴权。 业务方拿到的是网关签发的凭证,不是供应商的密钥。供应商密钥只存在于网关。
- 路由与故障转移。 按模型名、业务标识、成本或延迟选择上游;上游失败时自动切到候选。
- 配额与限流。 按业务方、按模型设日/月上限和并发上限,超了拒绝。
- 用量记录。 每次调用记录业务标识、模型、输入输出 token、缓存命中、耗时、状态码。没有这份数据,后面的成本治理全做不了。
- 协议适配:把各家的接口统一成一种(通常是 OpenAI 兼容格式)。
- 缓存:相同请求直接返回。
- 内容安全:输入输出过滤。
- 灰度与 A/B:按比例把流量切到新模型。
二、自建还是用现成的
| 现成方案 | 自建 | |
|---|---|---|
| 上线速度 | 天级 | 周到月级 |
| 适配成本 | 供应商更新由方案方跟进 | 自己跟 |
| 定制能力 | 受限于插件机制 | 完全可控 |
| 计费口径 | 通常够用,复杂计费要改 | 想怎么算怎么算 |
| 运维负担 | 一个额外组件 | 一个额外服务 |
判断标准很简单:如果你的计费和配额逻辑是业务的一部分(比如你要转卖额度、要按租户结算),自建;否则先用现成的。
自建的时候不要从零写。核心就是一个反向代理加上用量记账,难点全在细节:流式响应的转发、取消传播、重试幂等、token 计数的准确性。
三、路由策略
按模型名路由是基础:请求里写 gpt-x,网关知道去哪家。
故障转移要注意两件事:
- 只对可重试的错误转移。 429(限流)、5xx、超时可以;400(参数错误)、401(鉴权失败)、内容审核拒绝不可以,换一家结果一样,只是多烧一次钱。
- 转移要有次数上限和总超时。 三家依次超时,用户等了 90 秒才收到错误,比直接失败更糟。
虚拟模型是很有用的一层抽象:业务方调用 fast-cheap,网关按当前的价格、可用性和负载决定实际用哪个真实模型。好处是换模型不需要业务方改代码。代价是排障时要能查到「这次实际走了谁」,所以响应头必须回传真实模型名。
降级链要事先定义清楚:主模型 → 同档次备用 → 低一档模型 → 返回明确错误。降级到低一档模型时要在响应里标注,让业务方知道这次质量可能不同。
四、流式的坑
流式响应(SSE)是网关最容易出问题的地方:
- 必须逐块转发,不能缓冲。 缓冲了首字延迟就没了,用户体感直接崩。
- 客户端断开要向上游传播取消。 不传播的话,上游继续生成、继续计费,钱白花。这是很常见的漏洞。
- 中途失败无法故障转移。 已经吐出去的内容收不回来。所以转移只能发生在首个数据块之前,之后只能把错误透传给客户端。
- 用量统计要从最后一个数据块里取。 很多实现在流式场景下漏记 token,导致账目对不上。
- 反向代理(Nginx 等)要关掉响应缓冲,否则前面做对了也没用。
五、配额与计费
- 配额在网关强制,不指望业务方自觉。 租约式扣减(先预扣、结束后按实际用量结算)比事后统计更能防超支。
- 并发上限和总量上限一样重要。一个失控的循环能在几分钟内烧光月度预算。
- 单次请求上限:token 数超过阈值直接拒绝,防止畸形输入。
- 熔断:单位时间花费超阈值自动降级或拒绝。
- 计费口径要写进文档:思考 token 怎么算、缓存写入和命中怎么算、失败的请求算不算、重试算几次。口径不清楚,第一次对账就会吵起来。
六、国内环境的额外考虑
- 境外模型直连不稳定,需要合规的中转链路,且要做好超时和重试策略。
- 国产模型的接口差异:多数提供 OpenAI 兼容层,但工具调用、流式格式、错误码经常有细微不同,适配层要逐个验证,不能假设兼容。
- 数据出境合规:涉及个人信息的内容送往境外模型有法律要求,要做数据分级和路由隔离。这是产品决策,不只是技术问题。
- 备案与资质:面向公众提供生成式服务的,注意相应的备案要求。
七、可观测性
网关必须暴露的指标,按业务标识和模型两个维度切片:
- QPS、错误率(分错误类型)
- 首字延迟和总延迟的 P50 / P95 / P99
- token 用量和花费
- 故障转移次数和转移原因
- 缓存命中率
- 配额使用率
告警至少配三条:错误率突增、花费环比异常、某个上游持续失败。
每次调用要有 trace id,并在响应头返回。排障时业务方报一个 id,你能查到完整链路,这一条能省掉一半的沟通成本。
八、上线检查
- 供应商密钥只存在于网关,业务代码里一个都没有
- 每个业务方有独立凭证和独立配额
- 流式的取消传播实测通过(断开客户端,确认上游停止)
- 故障转移实测通过(人为让主上游失败)
- 用量记录和供应商账单对得上(先对一天)
- 响应头返回真实模型名和 trace id
- 熔断阈值和告警已配置
- 网关自身的健康检查不消耗真实模型调用