OpenRouter 模型路由机制拆解:模型层与供应商层双层决策、provider 对象配置与 Auto 路由器选型
一句话结论

OpenRouter 路由的本质是两个独立决策:哪个模型应答请求、哪个供应商服务该模型。把这两层分开理解,所有配置项就各归其位——model 字段和 openrouter/auto 属于模型层,provider 对象、:nitro/:floor 后缀属于供应商层。默认策略是”最便宜且稳定的供应商优先”,按价格平方倒数加权;需要合规、延迟、成本上限或跨模型容灾时,用覆盖配置接管对应层。本文按四项路由职责、默认策略、provider 对象、后缀快捷方式、双层容灾、Auto 路由器与网关边界的顺序逐层拆解,全部配置可直接复制。
LLM 路由器实际做的四件事
两个决策嵌在更大的职责里。路由器接收发往单一端点的请求,处理移交给合适模型与供应商的全过程。每个路由器都做四件事,OpenRouter 全部覆盖:
| 职责 | 决定什么 | OpenRouter 的实现 |
|---|---|---|
| 模型选择 | 哪个模型应答提示词 | model 字段或 openrouter/auto |
| 供应商选择 | 哪家供应商服务该模型 | provider 对象(默认按价格) |
| 负载均衡 | 如何在稳定供应商间分发 | 价格平方倒数加权 |
| 故障转移 | 出错时尝试什么 | models 数组加供应商回退 |
RouteLLM、LLMRouter 这类开源项目是需要自托管、自己接线的路由库。OpenRouter 是直接调用的路由器:一个托管服务、单一端点、身后 400+ 模型。自持路由逻辑还是外包出去,这个区别在网关对比一节会回到。
双层路由结构

OpenRouter 在两个独立层上路由:模型路由(哪个模型应答)和供应商路由(哪家供应商服务)。把两层分开握住,下面每个配置项都能立刻归位。
一个 OpenAI 兼容端点立在两层之前:https://openrouter.ai/api/v1,一把 API 密钥,70+ 供应商的 400+ 模型。调用 OpenRouter 的方式和调用 OpenAI 一样,扇出在幕后完成。
每个路由决策发生在哪里
最小请求能把两个决策装进同一个载荷里看清。
curl https://openrouter.ai/api/v1/chat/completions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-4.6",
"messages": [{"role": "user", "content": "Hello"}]
}'
model 字段就是模型路由决策。一个模型由多家供应商服务时,OpenRouter 的供应商路由挑选哪一家处理这次调用。模型由你显式设定;供应商选择自动运行,除非你覆写它。
一把密钥,多家供应商
单密钥设置意味着用一把 OpenRouter API 密钥访问多家供应商。想用自己的供应商密钥,BYOK 指南覆盖该路径:保留既有供应商协议,叠加故障转移与路由能力。
场景与路由模式对照
先给地图再讲机制。默认策略看不到的约束——合规、延迟预算、成本上限、跨模型容灾——用覆盖配置解决。
| 你的场景 | 用法 | 原因 |
|---|---|---|
| 最便宜可靠,不在乎哪家供应商 | 默认负载均衡 | 平方倒数加权自动处理 |
| 必须命中单一供应商(合规、BYOK、地域) | provider.order 加 allow_fallbacks: false | 硬停止,无静默回退 |
| 延迟敏感(面向用户的对话) | :nitro | 按吞吐路由 |
| 成本封顶的批处理 | :floor 或 max_price | 按价格路由并设上限 |
| 需要跨模型容灾 | models 回退数组 | 撑过整个模型下线 |
| 不知道用户会发什么提示词 | openrouter/auto | 按市场消费份额逐提示词选择 |
默认供应商路由如何运作

默认情况下,OpenRouter 把请求发给最便宜且可靠的供应商,按价格平方倒数加权。这是每个请求都运行的路由决策层,除非你覆写。
默认策略三步
一个模型有多家供应商且你没设 sort 或 order 时,OpenRouter 按供应商路由文档执行三步:优先选过去 30 秒无重大故障的供应商(不稳定的排到队尾而非移除);在稳定供应商中从最低成本候选里按价格平方倒数加权挑选;其余供应商留作回退。
设置 sort 或 order 会关掉负载均衡,改按你的规则路由。两者都不设,就是价格加权的默认行为。
算例:平方倒数为什么重要
文档给过一个算例。设一个模型有三家供应商:A 每百万 token 1 美元、B 2 美元、C 3 美元,B 近期有故障记录。
平方倒数加权意味着 A 先于 C 被尝试的概率约为 9 倍(1/3² 给 C 的权重是 A 的 1/9)。A 失败则轮到 C。刚出过故障的 B 排最后。平方项把流量狠狠拉向最便宜的稳定选项而非均匀分摊——健康的 1 美元供应商就在那里时,你不会为 3 美元的买单。
OpenRouter 在生产环境以每月 100 万亿 token 的规模跑这套策略,算例正是从这个运行现实中提炼的。要记住的两条规则:30 秒故障窗口、价格平方倒数加权。
该默认策略管辖标准请求。带工具调用的请求走 Auto Exacto——OpenRouter 面向工具调用的质量优先路由步骤,按工具调用质量信号给供应商分层(低质量排队尾,层内保持价格顺序)且默认开启。想让带工具调用的请求回到价格加权,用 :floor 或 provider.sort: "price" 强制。
provider 对象的 12 个控制字段
在请求体加一个 provider 对象即完全覆写默认。完整字段见官方文档,下列是开发者最先用到的。
| 字段 | 作用 | 默认 |
|---|---|---|
order | 按此精确顺序尝试供应商 | 未设 |
allow_fallbacks | 所选供应商失败时是否落到其他供应商 | true |
sort | 按”price”、“throughput” 或 “latency” 路由 | 未设 |
only | 限制为此供应商白名单 | 未设 |
ignore | 排除这些供应商 | 未设 |
quantizations | 限制特定量化级别 | 未设 |
data_collection | 允许或拒绝用数据训练的供应商 | 未设 |
zdr | 要求零数据留存供应商 | 未设 |
max_price | 封顶可接受的每 token 价格 | 未设 |
preferred_min_throughput | 偏好高于此吞吐的供应商 | 未设 |
preferred_max_latency | 偏好低于此延迟的供应商 | 未设 |
require_parameters | 只用支持你请求参数的供应商 | 未设 |
锁定供应商顺序并关闭回退
必须命中某家特定供应商(合规要求、BYOK 合同、地域约束)时,设 order 并关掉回退。
{
"model": "openai/gpt-5.5",
"provider": { "order": ["openai", "azure"], "allow_fallbacks": false }
}
OpenRouter 先试 OpenAI 再试 Azure,然后停止,绝不落到你没批准的第三家。
排除低质量变体供应商
供应商质量参差,OpenRouter 直言不讳。有些供应商服务重度量化的模型变体,表现不如别处托管的同款模型。没有可排序过滤的质量分,但可以把供应商整家排除。
{
"model": "meta-llama/llama-4-maverick",
"provider": { "ignore": ["deepinfra"] }
}
更细的控制用 quantizations 限制到你信任的精度级别。这就是质量方差的可控面。
精确指向单一供应商端点
供应商 slug 按基础名匹配:"google-vertex" 匹配该供应商在 OpenRouter 的所有 Vertex 区域与端点。要钉死单一变体,用完整 slug,如 "deepinfra/turbo" 而非 "deepinfra"。基础 slug 是大网,完整 slug 是手术刀。
:nitro 与 :floor 后缀
给模型字符串追加 :nitro 按速度优化,:floor 按成本优化。它们是快捷方式::nitro 等价于 provider.sort: "throughput",:floor 等价于 provider.sort: "price"。无需对象、无需额外配置,只改模型字符串。
| Slug | 优化目标 | 等价配置 |
|---|---|---|
model:nitro | 吞吐(速度) | provider.sort: "throughput" |
model:floor | 价格(成本) | provider.sort: "price" |
model(裸) | 便宜与可靠平衡 | 默认价格加权路由 |
一行改动即启用:
model="meta-llama/llama-4-maverick:nitro" # route for speed
model="meta-llama/llama-4-maverick:floor" # route for cost
面向用户的对话延迟可感时用 :nitro,成本是硬约束的批处理用 :floor。成本封顶场景把 :floor 与 max_price 及 BYOK 经济性搭配。
模型路由与故障转移如何协作

要挺过供应商错误,配置 models 回退数组并依赖自动供应商故障转移。两个机制叠加,运转在不同层:供应商路由让单一模型跨供应商存活,模型回退处理该模型全部供应商同时失败的情形。
这覆盖了多数供应商错误,但不能防护所有全站性宕机。简版结论:列好备份模型,其余交给供应商故障转移,失败的请求不收钱。
模型回退(models 数组)
按优先级传入 models。第一个出错,OpenRouter 试下一个。
resp = client.chat.send(
model="anthropic/claude-sonnet-4.6",
models=["openai/gpt-5.4-mini"], # tried in order if the primary fails
messages=[{"role": "user", "content": "..."}],
)
OpenRouter SDK 把 models 作为一等字段(OpenAI SDK 需经 extra_body 传递,属 OpenRouter 扩展)。回退在上下文超长错误、审核标记、限流和宕机时触发。按实际运行的模型计费,先错的不算。
供应商级故障转移(同一模型内)
模型回退之下还有第二道安全网。单一模型内,所选供应商返回 5xx 或限流时,OpenRouter 自动落到服务该模型的下一家供应商。默认开启(allow_fallbacks: true),过去 30 秒内有故障的供应商自动降权。
经济性上可以放心依赖:失败请求不计费,零补全保险意味着只为完成的运行付费。
故障转移的边界
边界值得记住。中断流式传输不会在部分供应商上停止计费(Bedrock、Groq、Google、Mistral 等,见流式文档),取消的流在那里照样扣费。
故障转移绕得开供应商级故障,绕不开 OpenRouter 自身:2025 年 8 月那次约 50 分钟的数据库事故让整个服务(含回退)全部下线。供应商故障转移真实且自动,但它是韧性层而非 SLA 保证,两端都要规划。
Auto 路由器与使用时机
把请求发给 openrouter/auto,模型选择就交给了 OpenRouter。适合提示词千差万别、最佳模型随请求变化的混合负载——有的请求要强推理,有的要快补全。确切知道要哪个模型时,显式设定。
Auto 路由器的驱动力是市场智慧:把你的提示词分类到任务类型,再按 OpenRouter 社区过去 7 天在该类任务上的聚合消费额对候选排序。
Auto 路由器如何挑选
候选池跟踪实时市场消费而非固定名单。调用后响应的 model 字段告诉你实际应答的是哪一个,无需猜测。
选择可通过请求设置引导。cost_tier 设定消费意愿,从 low(最便宜的能力足够模型)经 medium、high、xhigh 到 max(不计价格选最强模型)。allowed_models 用 anthropic/* 这类通配模式把选择限定在供应商家族内。
{
"model": "openrouter/auto",
"plugins": [
{
"id": "auto-router",
"cost_tier": "max",
"allowed_models": ["anthropic/*", "openai/*"]
}
]
}
定价上没有 Auto Router 附加费,按被选中模型的标准费率计费,与直接调用该模型相同。
Auto Router 对比手动 models 数组
两者都是”路由”,但控制面相反。openrouter/auto 是 OpenRouter 决定模型;models 回退数组是你决定顺序,OpenRouter 只在出错时沿列表走。不知道用户会发什么提示词用 Auto Router;清楚模型偏好、想在其后垫一层容灾用回退数组。
路由器与网关的边界
网关是统一访问点(单端点、认证、限流、可观测),路由器做每请求决策(哪个模型、哪家供应商)。OpenRouter 是你调用的网关,内含决定每次请求由谁处理的路由逻辑。
| 能力 | 路由器 | 网关 | OpenRouter |
|---|---|---|---|
| 每请求模型/供应商决策 | 是 | 仅访问 | 是 |
| 自动故障转移 | 是 | 视情况 | 是 |
| 单一统一端点 | 视情况 | 是 | 是 |
| 托管还是自托管 | 皆可 | 皆可 | 托管 |
LLM 网关指南完整定义了网关层;路由是其中的机制。想要自托管的”网关加路由器”,LiteLLM 是自己跑的选项,OpenRouter 是直接调用的选项。
常见问题
LLM 路由如何工作?路由器坐在你的应用与多个模型、供应商之间,决定每个请求的去向。它做四件事:模型选择、供应商选择、负载均衡、故障转移。你把一个请求发给一个端点,路由器挑选目的地。
OpenRouter 怎么选供应商?默认把过去 30 秒内有重大故障的供应商降权,然后在最低成本的供应商中按价格平方倒数加权挑选,其余留作回退。设置 sort 或 order 覆盖该默认。
LLM 路由器和 LLM 网关有什么区别?网关是统一访问点(单端点、认证、可观测),路由器对每次调用做”哪个模型、哪家供应商”的决策。OpenRouter 两者都是:一个你调用的、同时带路由的网关。
怎么让 OpenRouter 故障转移到别的模型或供应商?模型级回退按优先级传 models 数组(上下文超长错误、审核标记、限流、宕机时触发)。单一模型内的供应商级故障转移默认自动开启(allow_fallbacks: true)。失败请求不计费。
:nitro 和 :floor 是什么?给模型 slug 追加 :nitro 按吞吐优化(等价 provider.sort: "throughput"),:floor 按成本优化(等价 provider.sort: "price")。都只需改模型字符串一行。
Auto Router 收附加费吗?不收。openrouter/auto 选中哪个模型,就按该模型的标准费率计费,没有额外的 Auto Router 费用。
原文信息
- 作者:OpenRouter
- 发布时间:2026-06-12
- 原文标题:How OpenRouter Model Routing Works
原文地址:
暂无评论,快来抢沙发~