Vercel AI SDK 接入多个供应商:一个应用契约,多条调用路径Vercel AI SDK 多提供商
AI SDK 可以使用网关、专用或兼容供应商。集中管理供应商配置、显式表达能力,并对流、工具、错误与用量行为做契约测试。

速览
网关简化访问;专用适配器暴露原生控制。
让密钥、基础地址(Base URL)、别名与负责人远离 UI 代码。
工具、Object Output、流与供应商选项会变化。
把路由与重试策略交给一个层。
Vercel AI SDK 接入多个供应商:网关还是直连
AI SDK 常见的接入方式有三种:直接使用 creator/model 字符串时,默认通过 Vercel AI Gateway;专用 Provider Package 负责直连并暴露供应商特定选项;createProviderRegistry() 则为应用建立中央注册表,以 providerId:modelId 形式引用模型。还可以用 Custom Provider 在这些适配器之上增加别名或预设模型配置。
选择时应看控制边界,而不是只比较代码长短。需要统一凭证、集中用量记录和供应商路由时,Gateway 更合适;依赖原生参数或独立商务关系的工作负载更适合专用 Package;如果两种方式必须共存,Registry 能避免在各个请求处理器中散落 Import 与模型字符串。
无论选择哪种形态,都应固定注册表与路由配置,将凭证保留在服务端,并在遥测中记录最终解析出的供应商、模型和 Adapter 版本。便于使用的别名不能掩盖数据路径、策略或功能支持发生了变化。
供应商设置选项
| 选项 | 最适合 | 选择前验证 |
|---|---|---|
| AI 网关 | 一次集成与跨支持模型的共享路由。 | 验证网关选项、数据路径、能力与原生证据。 |
| 专用供应商 | 原生 Package 与供应商特定控制。 | 需要管理更多依赖、密钥与运营路径。 |
| OpenAI 兼容 | 复用兼容客户端形状。 | 测试工具、Object Output、流、错误与用量语义。 |
| Custom 供应商 | 实现受控应用抽象。 | 你负责一致性、维护与故障行为。 |
供应商注册表检查
按环境与供应商范围加载服务端密钥。
把工作负载名称映射到版本化模型与能力集合。
一致处理文本、工具、结束、错误与用量事件。
记录供应商、模型、路由、原生 ID 与用量。
测试每条供应商路径
只有应用层契约仍然成立时,供应商切换才算安全。应围绕产品实际使用的 AI SDK 能力构建 Fixture,例如文本生成、流式输出、结构化输出、Embedding 与工具调用,同时验证标准化事件以及应用所依赖的供应商特定元数据。
- 在直连、Registry 和 Gateway 路径上运行同一组文本、Object、工具与流式 Fixture。
- 注入超时、限流、流中断、无效结构化输出和异常工具参数。
- 验证唯一重试负责人、共享截止时间,以及有界的供应商或模型故障切换顺序。
- 比较首 Token 延迟、总延迟、Token 统计、成本归因与结束原因。
- 灰度发布别名与路由选项,并保留旧 Registry 版本以便立即回滚。
在应用后设置供应商注册表
应用代码应通过 support-fast、analysis-structured 等工作负载别名调用稳定的 AI SDK 函数。服务端 Registry 再将别名解析为 Gateway 模型字符串、专用 Provider Model 或兼容 Adapter,并附上所需 Middleware 与选项。解析结果不能只有模型对象,还应包含策略快照与配置版本。
Provider 顺序、限制等 Gateway 路由选项应保存在版本化配置中。每次响应都应在 AI SDK 标准化事件之外,保留请求别名、解析模型、实际 Provider Endpoint、故障切换历史和供应商原生证据,从而区分应用回归、路由变化与供应商变化。
生产规则:绝不能让模型字符串或别名静默改变供应商、策略、功能契约或数据路径。
在 AI SDK 模型接口旁增加 QVeris
AI SDK 与 Gateway 处理模型推理,QVeris 则通过 Discover → Inspect → Call 提供外部 API、工具、服务与实时数据。两类职责必须清晰分开:更换语言模型不应自动授予新工具、替换 API 凭证,或绕过外部动作所需的审批。
双方可共享父 Trace、租户、截止时间和策略快照,以便还原完整工作流;但模型与能力的凭证、配额和重试预算应彼此独立。在把 QVeris 能力暴露为 AI SDK Tool 之前,应检查 Schema 与权限、验证返回证据,并判断模型故障切换后该动作是否可以安全重复。
创建显式 AI SDK 供应商注册表
AI SDK 的 OpenAI Compatible 包可创建拥有独立基础地址(Base URL)与密钥的命名供应商实例。应把这些实例保存在仅服务端注册表中,将产品工作负载映射到稳定别名,并禁止浏览器请求传入任意供应商 URL。
import { createOpenAICompatible } from '@ai-sdk/openai-compatible';
import { generateText } from 'ai';
const gateway = createOpenAICompatible({
name: 'qveris-gateway',
apiKey: process.env.LLM_GATEWAY_API_KEY!,
baseURL: process.env.LLM_GATEWAY_BASE_URL!,
includeUsage: true,
});
const models = {
fast: gateway(process.env.LLM_FAST_MODEL!),
quality: gateway(process.env.LLM_QUALITY_MODEL!),
} as const;
const result = await generateText({ model: models.fast, prompt: 'Reply AI_SDK_OK' });
console.log(result.text, result.usage);- 只在服务端解析别名,并拒绝未知别名。
- 针对每个准确模型契约测试工具、结构化输出、流式、Abort Signal 与用量。
- 每个请求都记录注册表版本与最终模型。
实施参考已根据官方资料核验:AI SDK OpenAI-compatible provider。
FAQ
不必。AI SDK 也支持专用、兼容与 Custom 供应商。
不支持。验证当前模型与供应商能力矩阵。
放在一个选定网关或应用层,不要两层同时负责。
