用一个生产 API
调用多个 LLM
用一个生产 API 调用 GPT、Claude、Gemini 等模型,同时保留能力、路由、安全、成本与调用证据差异。
发布日期:2026年3月19日 · QVeris团队制作
速览
应用共享认证、请求封装、Tracing 与运营控制。
GPT、Claude 与 Gemini 因模型、端点、版本、工具、上下文、模态与策略而异。
工作负载别名只能解析到满足必需行为的端点。
随标准化输出返回供应商与模型身份、请求 ID、用量、路由与转换。
统一调用应标准化什么
标准化真正通用的应用关注点:服务身份、租户、调用链上下文、工作负载别名、Message、超时、预算、所需能力与稳定响应封装。在供应商转换前,从版本化目录解析别名。
不要把所有功能都压进最低共同分母。供应商特定工具、推理、结构定义、媒体或缓存控制应使用类型化扩展;在调用前拒绝缺失必需能力,而不是静默降级。
单一 API 集成层
| 层 | 最适合 | 选择前验证 |
|---|---|---|
| 规范请求 | 一个 SDK 发送身份、Message、工作负载别名与所需能力。 | 显式保留超时、预算、调用链与租户,避免应用代码假设供应商。 |
| 能力目录 | 模型别名映射到合格版本与端点。 | 为工具、结构定义、上下文、模态、区域、策略与生命周期标注来源并刷新。 |
| 路由器 | 在合格 GPT、Claude 或 Gemini 端点中过滤并选择。 | 记录候选集、排除项、策略、路由与故障切换条件。 |
| 供应商适配器 | 把规范字段转换为受支持的原生语义。 | 为每个适配器契约测试工具、流、结构化输出、错误与用量。 |
| 响应封装 | 应用接收稳定字段与原生证据。 | 保留供应商、模型、请求 ID、路由、尝试、用量单位与转换。 |
围绕工作负载构建通用契约
需要可移植性时,命名任务契约而不是供应商模型。
把工具、结构定义、模态、上下文、流、区域与策略声明为硬性 Flag。
允许选择原生功能,同时不假装每个供应商都支持。
把规范与原生身份并存,用于调试、成本与审计。
验证每条模型路径
- 为每个生产负载与必需能力组合建立 Golden 请求。
- 对每个合格 GPT、Claude 与 Gemini 端点运行契约测试。
- 在真实请求数据下对比输出、工具、流、错误、用量与延迟。
- 灰度路由变更,并在工作负载特定不变量回归时阻断。
- 保留供应商原生直连路径,用于诊断与已测试回滚。
在类型化供应商适配器之上使用别名
应用发送带工作负载别名与所需能力的规范请求;目录展开合格端点,策略路由器选择一个,类型化适配器映射请求。标准化响应携带供应商原生身份与证据返回。不支持的要求在执行前失败,故障切换也只使用已验证等价项。
生产规则:一个客户端契约不能变成“所有模型行为相同”的模糊承诺。
先设计统一请求契约
先从应用需要的行为出发,而不是照搬某一家供应商的 JSON。一个实用的统一请求应包含工作负载别名、有序消息、必需能力、可选偏好、超时、最高预算、租户、调用链上下文,以及可能产生副作用时使用的幂等键。必须满足的条件与偏好要分开:例如严格遵守 JSON Schema 可以是硬要求,而较低延迟只是偏好。
响应也应有清晰边界。先返回标准化内容与工具调用,再附上最终供应商、准确模型版本、网关请求 ID、上游请求 ID、路由策略、尝试次数、用量、结束原因和任何有损转换。这样既能稳定应用代码,也不会抹掉排障所需的证据。
先按能力筛选,再优化路由
为每个允许使用的模型端点建立带版本的能力目录,记录输入模态、工具调用、并行工具、结构化输出、流式响应、上下文限制、可用区域、数据处理方式、生命周期状态,以及已验证的工作负载质量。目录应依据官方文档与实际探测持续更新,不能把营销名称当作可执行的能力承诺。
路由应分两步:先剔除不满足硬要求的候选项,再在合格集合中按质量、延迟、可用性、价格、数据驻留或租户策略排序。候选集合与排除原因都要记录,出现结果争议或账单异常时,“智能路由”才可解释。
把供应商差异收进类型化适配器
每个适配器只负责一种原生 API 的双向转换,包括消息角色、系统指令、工具、Schema、媒体、采样参数、停止原因、错误类型、限流响应头与用量。无法等价映射时必须明确拒绝。静默丢弃 Schema、工具选择、图片或安全设置,会得到 HTTP 成功却行为错误的结果。
不要把统一 API 压缩成“最低公分母”。通用核心应保持精简;确实属于供应商特性的能力,则通过带命名空间、可校验的扩展显式开放。调用方因此能清楚知道自己是在使用可迁移能力,还是主动接受了绑定边界。
把流、工具与结构化输出当作协议处理
流式响应不只是文本分片。不同供应商会以不同顺序发送内容增量、推理事件、工具参数、引用、用量与结束元数据。网关应定义自己的事件模型,测试分片组装与取消,并保留原生结束原因。一旦内容已发给调用方,自动切换模型可能造成重复文本或拼接出混合答案。
工具调用也需要完整生命周期:校验参数、授权工具、分配稳定调用 ID、记录结果,并明确由谁继续模型对话。结构化输出则要测试每条路由真正支持的 Schema 语法,并在网关边界再次校验最终结果。
统一客户端密钥,但不要混用上游密钥
应用应使用限定范围的凭证访问网关,凭证要绑定服务、租户、环境与允许的工作负载。各供应商密钥则加密保存在网关之后,分别记录负责人、环境、供应商账号、轮换计划、允许路由与紧急吊销路径。某个客户端令牌泄露时,不应暴露或解锁全部上游账号。
网关还应按租户执行配额、并发限制、模型白名单与预算上限。日志默认脱敏提示词和凭证;如果确实需要保留请求正文,应由明确的数据策略控制,而不是把它当作可观测性的附带结果。
让故障切换范围小、次数有限且可观察
短暂故障可按供应商建议进行带抖动的指数退避,但次数必须有上限。故障切换只能选择已为同一工作负载验证过的等价项。所有尝试共用原始截止时间与预算,不能每次重试都重新获得一份额度。认证失败、请求无效、策略拒绝或能力不支持时应立即停止。
部分流已经输出,或工具已经产生副作用后,不能盲目重放请求。确需恢复时,应使用幂等键、工具执行账本与明确的续跑规则。响应中保留尝试历史,运维人员才能区分“首条路由较慢”和“经过多次昂贵切换后才成功”。
衡量可接受结果,而不只比较 Token 单价
可以把用量整理成统一成本记录,但不要假设各家计费单位完全相同。原生输入、输出、缓存、推理、图片、音频及工具相关用量,应与供应商实际计费金额和币种一起保存,再关联工作负载、租户、路由、延迟、重试次数、质量评分与最终是否被接受。
真正有价值的指标是“每个可接受任务的成本”,而不是宣传页上的 Token 单价。应按别名跟踪成功率、p50/p95 延迟、Schema 合格率、工具成功率、故障切换率、预算超支与质量。告警中要包含网关请求 ID、最终路径、策略版本和上游证据。
多模型统一 API 上线检查清单
- 分别对请求、响应、别名、能力目录与路由策略做版本管理。
- 没有任何路由满足全部硬性能力与策略要求时,在执行前明确失败。
- 逐个适配器测试文本、流、工具、Schema、错误、取消与用量。
- 隔离上游密钥,并按租户与工作负载限制客户端凭证和预算。
- 别名变更先灰度,用 Golden 工作负载对比,并保留已测试的回滚路径。
- 暴露最终供应商、准确模型、转换、尝试记录、原生 ID、用量与成本。
让统一 API 失控的七个常见错误
| 错误 | 生产后果 | 更好的控制 |
|---|---|---|
| 最低公分母契约 | 关键能力被静默丢弃。 | 通用核心加类型化扩展。 |
| 不透明的智能路由 | 质量与成本变化无法解释。 | 记录候选、排除原因、策略与路由。 |
| 隐藏供应商身份 | 事故与账单无法核对。 | 返回准确原生身份与请求 ID。 |
| 无限重试链 | 一次请求放大延迟与支出。 | 共享截止时间与预算,并限制次数。 |
| 模型目录过期 | 别名指向已退役或行为改变的模型。 | 官方来源、探测、负责人和过期时间。 |
| 语义不等价的切换 | 可用性上升,答案质量却下降。 | 按工作负载预先验证备用项。 |
| 共享上游密钥 | 泄露后可访问大范围供应商资源。 | 限定客户端权限并隔离上游密钥。 |
一个模型 API 加一个能力接口
统一模型 API 为智能体提供一致推理访问;QVeris 以 Discover → Inspect → 调用提供外部 API、工具、服务与实时数据访问。把两者叠加为模型接口与能力接口,并共享工作负载身份与调用链上下文。
保持一个请求 Shape 与显式模型别名
统一端点只有在调用方能预测每个别名含义时才有价值。使用产品自有别名,在响应 Metadata 中返回原生供应商与准确模型,并拒绝未知别名,而不是静默选择默认值。
for alias in support-fast support-quality; do
curl --fail-with-body "$LLM_GATEWAY_BASE_URL/chat/completions" -H "Authorization: Bearer $LLM_GATEWAY_API_KEY" -H "Content-Type: application/json" -H "X-Workload: support-answer" -d "{"model":"$alias","messages":[{"role":"user","content":"Reply $alias OK"}]}"
done
- 记录每个别名的能力、质量门槛、区域、生命周期与 Owner。
- 要求响应 Metadata 暴露最终供应商、原生模型、Policy Version 与用量。
- 修改别名 Mapping 前,用同一 Golden 工作负载测试所有候选。
实施参考已根据官方资料核验:OpenAI Chat Completions reference。
继续阅读相关实施指南
通过这些相关指南继续比较下一项架构决策、实施边界或运营控制,无需重新开始调研。
FAQ
可以。网关可以提供一个客户端端点,再把统一请求转换为各家的原生 API。但工具、Schema、流、模态、限制和错误并不完全相同,因此仍需能力校验。
应该。应用可以使用稳定的工作负载别名,但响应元数据仍应保留最终供应商、准确模型、策略版本、请求 ID、用量与转换记录。
只有备用项同时通过工作负载的能力、策略、区域与质量契约时才可以。部分流或有副作用的工具调用,不应在缺少安全幂等设计时重放。
不等于。应用使用限定范围的网关凭证;供应商密钥仍是隔离加密的上游秘密,分别管理负责人、轮换、配额与审计记录。
标准化身份、消息、别名、超时、预算、必需能力、调用链、通用输出字段与错误类别;不能等价的行为则保留类型化扩展和原生证据。
对每条合格路由运行带版本的 Golden 工作负载与适配器契约测试,比较工具、Schema、流、错误、用量、延迟、安全行为与任务质量。
