APIMart
构建多模型 AI 应用:路由与自动降级实战

构建多模型 AI 应用:路由与自动降级实战

多模型 AI 应用实战教程:用一个 OpenAI 兼容客户端接入 OpenRouter 模型路由,配置自动降级、价格上限与逐请求成本追踪,让应用既稳定又省钱。

教程

一个生产级 AI 应用应该在模型宕机时安然无恙,而不是把人半夜叫醒。 能带你到达这个状态的模式朴实而可靠:一个 OpenAI 兼容客户端、一份按优先级排序的模型列表、优先选择便宜且健康的供应商的路由规则,以及硬性的价格上限。

在这篇教程里你将构建:

  • 一个只需改一个字符串就能调用 GPT、Claude、Gemini、DeepSeek 等模型的统一客户端

  • 自动降级 — 主模型报错或超时时,请求会自动在列表中的下一个模型上重试

  • 成本控制 — 最便宜优先路由加 max_price 上限,流量高峰再猛也烧不穿你的预算

  • 支出可见性 — 逐请求的成本核算,可以记录日志并配置告警

下文全部使用 OpenRouter 作为路由层;同样的架构适用于任何 OpenAI 兼容网关,包括当你需要在同一个应用里使用图像、视频或音频模型时的 APIMart

带有路由、降级链和成本护栏的多模型 AI 应用流程图
请求路径:先走路由器,再走降级链,价格上限始终生效

为什么多模型胜过单模型

宕机是「何时」的问题,不是「是否」的问题

每家大厂都有公开可见的故障。如果你的应用把某一家供应商写死在代码里,那他们的每一次故障都是你的故障。一条降级链能把「供应商挂了」变成一次短暂的延迟抖动。

每个模型各有擅长

便宜快速的模型负责分类和信息抽取;前沿模型负责推理密集的生成任务。按任务混用不同档位的模型,通常能把推理账单砍掉一半甚至更多。

价格每个月都在变

模型价格一直在降。如果换模型只是改一行配置,你就能每个季度追逐最优性价比,而不用启动一个迁移项目。

第一步:一个客户端,多个模型

把官方 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-chatgoogle/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-2Sora 2、Kling、Veo、Suno——统一在一个 OpenAI 兼容 API 和一个余额之下。

熟悉的接入方式,更低的价格

客户端配置与第一步完全相同,只是换个 base URL;各模型价格约比官方定价低 20%——具体每个模型的费率见价格页面

混用多个路由器完全没问题

一种常见的生产布局:文本走 OpenRouter 或直连 API,媒体生成走 APIMart——两者在代码中位于同一层抽象之后,都可以通过配置随时替换。

生产环境检查清单

上线前把五件事配齐:配置驱动的模型注册表、服务端降级链、延迟允许时的最便宜优先路由、每次调用都带 max_price 上限,以及带漂移告警的逐请求成本指标。正是这套组合,让一个两人团队不用专职运维轮值也能稳定运营一个多模型应用。

看完就试试

去模型市场挑选你想要的模型

在 APIMart 模型市场尝试聊天、图像和视频模型,用统一 API 快速体验模型能力。

聊天模型图像模型视频模型
进入模型市场