# 之前:业务代码直连供应商
client = openai.OpenAI(api_key=os.environ["OPENAI_KEY"])response = client.chat.completions.create(model="gpt-5", messages=[...])
# 之后:通过路由层调用
response = router.call(logical_model="code_generation",
messages=[...])
```路由层维护一张逻辑模型到物理模型的映射表:| 逻辑模型 | 当前供应商 | 备用供应商 ||---------|-----------|-----------|
| code_generation | claude-sonnet-4 | deepseek-coder || long_context | claude-opus | qwen-max |
| general_chat | gpt-5 | deepseek-v3 |当供应商不可用,管理员在控制面改一条映射,业务侧完全无感知。---## 从「选对供应商」到「不绑定供应商」技术选型的惯性思维是选一个最好的供应商——看 benchmark、比价格、测延迟。但面对供应商政策的不确定性,「最好」不如「可替换」。实践中可以从四个方面落地:1. **统一调用入口**:业务代码不直接依赖任何供应商 SDK,所有模型调用通过统一接口2. **逻辑模型抽象**:用业务语义(代码生成、长文本分析、推理)替代物理模型名
3. **路由可配置**:映射关系外部化,支持运行时切换,无需重启服务4. **凭证集中管理**:API Key 统一管理、轮换、审计,不散落在各业务环境变量里
这种架构在日常运行时几乎不增加额外开销,但在供应商断供那天,它的价值是几周的开发和测试时间。
---
供应商可靠性不是选型 checklist 里的加分项,而是需要架构层面考虑的容错设计。不是让你今天就把当前模型换掉,是让你下次写调用代码的时候,在中间留一层。
留了这一层,切换是改配置的事。没留,切换是改代码的事。而时间窗口,没人会提前通知你。","createTime":1783396768,"ext":{"closeTextLink":0,"comment_ban":0,"description":"","focusRead":0},"favNum":0,"html":"","isOriginal":0,"likeNum":0,