
构建多模型 AI 应用:路由与自动降级实战
多模型 AI 应用实战教程:用一个 OpenAI 兼容客户端接入 OpenRouter 模型路由,配置自动降级、价格上限与逐请求成本追踪,让应用既稳定又省钱。
一个生产级 AI 应用应该在模型宕机时安然无恙,而不是把人半夜叫醒。 能带你到达这个状态的模式朴实而可靠:一个 OpenAI 兼容客户端、一份按优先级排序的模型列表、优先选择便宜且健康的供应商的路由规则,以及硬性的价格上限。
在这篇教程里你将构建:
-
一个只需改一个字符串就能调用 GPT、Claude、Gemini、DeepSeek 等模型的统一客户端
-
自动降级 — 主模型报错或超时时,请求会自动在列表中的下一个模型上重试
-
成本控制 — 最便宜优先路由加
max_price上限,流量高峰再猛也烧不穿你的预算 -
支出可见性 — 逐请求的成本核算,可以记录日志并配置告警
下文全部使用 OpenRouter 作为路由层;同样的架构适用于任何 OpenAI 兼容网关,包括当你需要在同一个应用里使用图像、视频或音频模型时的 APIMart。

为什么多模型胜过单模型
宕机是「何时」的问题,不是「是否」的问题
每家大厂都有公开可见的故障。如果你的应用把某一家供应商写死在代码里,那他们的每一次故障都是你的故障。一条降级链能把「供应商挂了」变成一次短暂的延迟抖动。
每个模型各有擅长
便宜快速的模型负责分类和信息抽取;前沿模型负责推理密集的生成任务。按任务混用不同档位的模型,通常能把推理账单砍掉一半甚至更多。
价格每个月都在变
模型价格一直在降。如果换模型只是改一行配置,你就能每个季度追逐最优性价比,而不用启动一个迁移项目。
第一步:一个客户端,多个模型
把官方 OpenAI SDK 指向网关即可,不需要写任何自定义 HTTP 代码:
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="sk-or-..."
)
resp = client.chat.completions.create(
model="anthropic/claude-sonnet-4.5",
messages=[{"role": "user", "content": "Summarize this contract clause..."}],
)
print(resp.choices[0].message.content)
切换到 deepseek/deepseek-chat 或 google/gemini-2.5-pro,只是换一个 model 字符串而已。模型名要放在配置里,别写死在代码中。
TypeScript 版本
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://openrouter.ai/api/v1",
apiKey: process.env.OPENROUTER_API_KEY,
});
const resp = await client.chat.completions.create({
model: "deepseek/deepseek-chat",
messages: [{ role: "user", content: "Classify this ticket: ..." }],
});
用模型注册表,别让字符串散落各处
把任务 → 模型档位的映射集中在一处:
{
"extract": "deepseek/deepseek-chat",
"chat": "anthropic/claude-sonnet-4.5",
"reason": "openai/gpt-5.2"
}
第二步:自动触发的降级
models 数组
当主模型报错、被限流或超时,OpenRouter 会在服务端按优先级列表自动重试请求 [1]:
{
"model": "openai/gpt-5.2",
"models": ["anthropic/claude-sonnet-4.5", "deepseek/deepseek-chat"],
"messages": [{ "role": "user", "content": "..." }]
}
响应里会告诉你实际是哪个模型处理了请求——记得把它记进日志。
供应商级别的故障转移
在模型降级之下,每个模型可能由多家供应商提供服务。路由偏好可以固定或排除特定上游 [2]:
{
"model": "meta-llama/llama-3.3-70b-instruct",
"provider": {
"order": ["deepinfra", "together"],
"allow_fallbacks": true
}
}
客户端的最后防线
把调用包一层重试,指向另一个网关(或缓存的响应),以应对路由器本身不可达的罕见情况。重试只做一次——重试风暴是自己给自己制造的故障。
第三步:绕不过去的成本控制
最便宜优先路由
当延迟不是首要考量时,按价格给供应商排序——可以按请求设置("provider": {"sort": "price"}),也可以给批处理任务使用 :floor 模型后缀。
硬性价格上限
max_price 会拒绝任何报价超过你上限的供应商(单位:美元每 100 万 token):
{
"model": "openai/gpt-5.2",
"max_price": { "prompt": 1.5, "completion": 10 },
"messages": [{ "role": "user", "content": "..." }]
}
这是保证,不是偏好——无法在上限内完成的请求会快速失败,而不是悄悄花掉更多钱。
逐请求追踪成本
响应里包含 usage;把它乘以实际服务模型的费率,作为指标上报。告警要盯的是单任务成本的漂移,而不只是总支出——悄悄降级到更贵模型的问题,正是通过漂移暴露出来的。
超越文本:图像、视频、音频同样适用这套模式
LLM 路由器止步于语言模型。真实的产品还要生成图像、视频和语音——再去伺候五个供应商 SDK,等于把你刚刚解决的问题原封不动地请回来。
一个网关覆盖所有模态
APIMart 提供 500+ 模型——除了聊天,还有 GPT-Image-2、Sora 2、Kling、Veo、Suno——统一在一个 OpenAI 兼容 API 和一个余额之下。
熟悉的接入方式,更低的价格
客户端配置与第一步完全相同,只是换个 base URL;各模型价格约比官方定价低 20%——具体每个模型的费率见价格页面。
混用多个路由器完全没问题
一种常见的生产布局:文本走 OpenRouter 或直连 API,媒体生成走 APIMart——两者在代码中位于同一层抽象之后,都可以通过配置随时替换。
生产环境检查清单
上线前把五件事配齐:配置驱动的模型注册表、服务端降级链、延迟允许时的最便宜优先路由、每次调用都带 max_price 上限,以及带漂移告警的逐请求成本指标。正是这套组合,让一个两人团队不用专职运维轮值也能稳定运营一个多模型应用。
去模型市场挑选你想要的模型
在 APIMart 模型市场尝试聊天、图像和视频模型,用统一 API 快速体验模型能力。