QVeris
多供应商集成指南

用一个生产 API
调用多个 LLM

用一个生产 API 调用 GPT、Claude、Gemini 等模型,同时保留能力、路由、安全、成本与调用证据差异。

发布日期:2026年3月19日 · QVeris团队制作

Financial market workflow supporting Call Multiple LLMs Through One Production API 用 一个生产 API 调用多个 LLM

速览

一个 API 意味着一个客户端契约

应用共享认证、请求封装、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 能调用 GPT、Claude 和 Gemini 吗?

可以。网关可以提供一个客户端端点,再把统一请求转换为各家的原生 API。但工具、Schema、流、模态、限制和错误并不完全相同,因此仍需能力校验。

API 应暴露供应商名称吗?

应该。应用可以使用稳定的工作负载别名,但响应元数据仍应保留最终供应商、准确模型、策略版本、请求 ID、用量与转换记录。

故障切换能切换模型家族吗?

只有备用项同时通过工作负载的能力、策略、区域与质量契约时才可以。部分流或有副作用的工具调用,不应在缺少安全幂等设计时重放。

一个 API 密钥等于共享供应商密钥吗?

不等于。应用使用限定范围的网关凭证;供应商密钥仍是隔离加密的上游秘密,分别管理负责人、轮换、配额与审计记录。

多模型 API 应该标准化什么?

标准化身份、消息、别名、超时、预算、必需能力、调用链、通用输出字段与错误类别;不能等价的行为则保留类型化扩展和原生证据。

如何测试统一 LLM API?

对每条合格路由运行带版本的 Golden 工作负载与适配器契约测试,比较工具、Schema、流、错误、用量、延迟、安全行为与任务质量。

官方资料与延伸阅读

用一个生产 API调用多个 LLM | QVeris Guides