你把 Claude 和 OpenAI 一起接进生产环境后,真正的难题不是“能不能调通”,而是怎么在质量、延迟、成本三角里稳定跑。
如果没有路由网关,最常见结果就是:高峰期延迟抖动、账单失控、异常时全站雪崩。
一、先定路由目标:别让“智能路由”变成玄学
模型路由不是“随机挑个便宜的模型”。先把目标写死成 3 条:
- 延迟目标:P95 在可接受范围(例如 < 3s)
- 成本目标:单请求 token 成本上限(例如 <$0.02)
- 质量目标:关键任务成功率(例如 >= 97%)
再把请求按业务价值分层:
- L0(高价值):订单、风控、客服升级单 → 质量优先,允许更高成本
- L1(中价值):常规问答、报告生成 → 平衡质量与成本
- L2(低价值):草稿、改写、分类 → 成本优先
这一步做完,后面的策略才有依据。
二、延迟分层:先快后稳,不是先贵后慢
推荐的默认路由策略:
1) 首选模型(Primary)
- L0:选择质量更稳的主模型
- L1/L2:选择性价比更高的模型
2) 软超时切换(Soft Timeout)
- 例如 1200ms 未首 token 返回,则并行触发备选模型(Hedged Request)
- 先返回谁就用谁,另一路取消
3) 熔断与半开恢复
- 连续失败阈值触发熔断(如 5 次/30s)
- 熔断后进入半开:每 N 个请求放 1 个探测
Go 伪代码:
type RoutePolicy struct {
SoftTimeoutMs int
MaxCostUSD float64
Tier string // L0/L1/L2
}
func Route(req Request, p RoutePolicy) Provider {
if p.Tier == "L0" {
return providerWithBestQuality()
}
if req.EstimatedCostUSD() > p.MaxCostUSD {
return cheaperProvider()
}
return providerWithLowestP95()
}
三、成本阈值:先算清楚再调用
常见坑:只看单价,不看总 token。你需要在网关层做两件事:
- 预估成本:按输入长度 + 预计输出长度计算预算
- 硬阈值阻断:超过阈值直接降级(短答案、摘要模式、排队异步)
建议至少配置三档阈值:
warn_threshold:记录告警,不拦截degrade_threshold:切换便宜模型或压缩 max_tokensblock_threshold:拒绝同步请求,改异步任务
四、质量守门:A/B 不够,必须有回归基线
上线前只做肉眼评审远远不够。建议在网关层内置评测闸门:
- 金样本集合:覆盖高风险场景(拒答、安全、结构化输出)
- 周级回归:新路由策略必须跑完整评测
- 分级放量:1% → 10% → 50% → 100%
- 自动回滚:关键指标跌破阈值立即回退上个稳定策略
可观测指标最少要有:
- provider/model 维度的成功率、P50/P95 延迟
- 每千请求成本(CPM-like)与 token 消耗
- 任务级质量得分(人工/自动混合)
五、生产落地清单(可直接照抄)
- 按 L0/L1/L2 完成请求分层
- 配置 Soft Timeout + Hedged Request
- 配置 provider 熔断阈值与半开探测
- 配置成本三档阈值(告警/降级/阻断)
- 建立金样本与每周回归
- 灰度发布 + 自动回滚
六、常见翻车点与修复
翻车点 1:只按价格路由,质量断崖
修复:L0 请求绑定质量优先池,不参与低价路由。
翻车点 2:超时后串行重试,尾延迟爆炸
修复:改为软超时并行备援,限制并发倍率。
翻车点 3:成本告警太晚
修复:在请求入口做预算预估,超过阈值提前降级。
总结
Claude + OpenAI 双供应商路由的关键不是“多接一个 API”,而是把延迟分层、成本阈值、质量守门变成可执行的网关策略。
先把规则写死,再让策略自动化,你的系统才会在高峰期保持可控,而不是靠运气。