OpenRouter 技术综述:统一模型 API、Provider 路由与企业接入¶
OpenRouter 提供一个统一的托管 API,让应用通过同一套凭据和请求格式访问不同厂商的模型。它同时维护模型目录、对接多个推理 Provider、执行路由与故障切换,并把用量汇总到一套账单和观测界面中。
它最适合解决两个问题:第一,应用需要快速试用和切换多家模型;第二,同一个模型存在多个推理 Provider,希望根据可用性、价格或性能选择上游。它并不管理企业 Kubernetes 集群里的 GPU Pod,也不能代替集群内的 AIBrix、KServe 或推理引擎。
可以把它理解为一个模型服务市场。同一个模型像同一款商品,可能由不同 Provider 负责交付;OpenRouter 根据库存、价格、速度和规则选择交付方。跨模型 Fallback 则相当于缺货时换成另一款商品,虽然请求还能完成,能力和结果可能已经发生变化。
OpenRouter 官方模型目录目前覆盖数百个模型,模型元数据包括上下文长度、输入输出模态、价格、支持参数和 Provider 信息。客户端主要使用 OpenAI-compatible Chat Completions,也可以使用 Responses、Anthropic Messages、Embedding、图像、音频和视频等接口。
如果需要先了解整个产品类别,可以配合阅读大模型 API 中转器与 LLM Gateway 综述;集群内推理实例调度则见AI Gateway、推理路由与流量治理。
1. 先理解 Model 和 Provider¶
OpenRouter 把“模型”和“提供这个模型算力的端点”分成两层:
- Model 表示模型身份,例如
openai/gpt-5.2。模型决定基础能力、上下文窗口和参数语义。 - Provider 表示实际承载推理的供应商或云端点。同一模型可能同时由模型厂商、云平台和第三方推理平台提供。
- OpenRouter 根据请求约束,从可用 Provider 中选出一个端点,完成协议适配、鉴权、转发、计量和响应标准化。
flowchart LR
A[应用 / Agent / OpenWebUI] --> B[OpenRouter 统一 API]
B --> C[模型与参数校验]
C --> D[隐私、价格与能力过滤]
D --> E[Provider 排序与健康判断]
E --> F1[模型厂商 API]
E --> F2[公有云模型服务]
E --> F3[第三方推理 Provider]
F1 --> G[统一响应、Usage 与账单]
F2 --> G
F3 --> G
G --> A
模型路由和 Provider 路由也要分开理解:
| 路由层次 | 输入 | 结果 | 语义变化 |
|---|---|---|---|
| Provider 路由 | 一个模型、多个可用端点 | 选择承载该模型的 Provider | 通常较小,但量化、区域和服务等级仍可能不同 |
| Model Fallback | 按顺序给出多个模型 | 前一个失败后改用后一个 | 可能明显改变质量、工具调用、上下文和费用 |
| Auto Router | 给出目标或候选范围 | 路由器自动选择模型与 Provider | 模型本身可能变化,必须用业务评测约束 |
OpenRouter 默认会在同模型的优质 Provider 之间做负载均衡,以提高可用性。应用也可以固定 Provider、关闭 Fallback,或按价格、吞吐与延迟排序。Provider Routing 文档说明,延迟和吞吐偏好使用近五分钟窗口的百分位统计;这些数据适合动态筛选,不能替代自己的端到端 SLO。
2. 最小接入只需要改 Base URL¶
现有 OpenAI Python SDK 可以直接复用:
import os
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=os.environ["OPENROUTER_API_KEY"],
default_headers={
"HTTP-Referer": "https://example.com",
"X-OpenRouter-Title": "Internal AI Assistant",
"X-OpenRouter-Metadata": "enabled",
},
)
response = client.chat.completions.create(
model="openai/gpt-5.2",
messages=[
{"role": "user", "content": "解释 Kubernetes Pod 的生命周期。"}
],
temperature=0,
max_completion_tokens=512,
)
print(response.model)
print(response.choices[0].message.content)
print(response.usage)
Authorization: Bearer ... 才是 API 鉴权。HTTP-Referer 和 X-OpenRouter-Title 用于应用归属与统计,可以按需设置。X-OpenRouter-Metadata: enabled 会要求响应返回路由元数据,便于确认实际使用的 Provider 和路由过程。
生产代码还应保存响应的模型、Usage、路由元数据和 X-Generation-Id。配置了 Model Fallback 后,最终模型可能与首选模型不同;只记录客户端请求的模型名会让质量回归和费用对账失真。
3. Provider 路由怎么控制¶
下面的请求要求 Provider 完整支持请求参数,优先考虑吞吐,同时排除会收集数据的端点并启用 ZDR:
{
"model": "openai/gpt-5.2",
"messages": [
{"role": "user", "content": "Review this deployment manifest."}
],
"tools": [],
"provider": {
"sort": "throughput",
"allow_fallbacks": true,
"require_parameters": true,
"data_collection": "deny",
"zdr": true
}
}
常用控制项如下:
| 字段 | 作用 | 生产注意点 |
|---|---|---|
order |
按指定顺序尝试 Provider | 配合 allow_fallbacks=false 才能严格限制到列表 |
only / ignore |
Provider 白名单或排除列表 | 白名单过窄会降低故障恢复能力 |
sort |
按 price、throughput 或 latency 排序 |
动态指标会变化,应记录实际路由结果 |
allow_fallbacks |
是否允许后备 Provider | 默认开启;合规场景需要确认后备端点也满足政策 |
require_parameters |
只选支持全部请求参数的端点 | Tool Call、JSON Schema 和多模态请求建议开启 |
max_price |
限制可接受的最高价格 | 防止 Fallback 意外进入高价端点 |
data_collection |
是否允许可能收集数据的 Provider | 敏感请求应在账户策略和单请求两层限制 |
zdr |
仅使用 Zero Data Retention 端点 | Provider 数量会减少,应测试无匹配端点时的错误处理 |
preferred_min_throughput |
偏好达到吞吐门槛的端点 | 是偏好条件,仍要结合官方当前路由规则确认降级行为 |
preferred_max_latency |
偏好低于延迟门槛的端点 | 不能保证应用侧网络和完整 E2E 延迟 |
同模型 Fallback 与跨模型 Fallback¶
同模型、不同 Provider 的 Fallback 主要解决限流、宕机和容量波动。跨模型 Fallback 使用 models 数组指定候选顺序,例如:
{
"models": [
"openai/gpt-5.2",
"anthropic/claude-sonnet-4.5"
],
"messages": [
{"role": "user", "content": "生成一份变更风险清单。"}
]
}
Model Fallback 文档列出的触发条件包括限流、服务不可用、上下文长度错误和内容审核拒绝。请求按最终实际使用的模型计费,响应 model 字段会给出最终模型。
跨模型切换属于业务降级。两个模型即使都支持 Tool Call,工具名、参数稳定性、推理字段和安全边界也可能不同。上线前应使用同一套业务 Eval 验证每个候选模型,并为不能降级的请求关闭跨模型 Fallback。
4. Prompt Cache 与会话亲和¶
长 System Prompt、RAG 文档和多轮 Agent 会重复发送大量前缀。OpenRouter 可以转发不同 Provider 的 Prompt Cache 参数,并使用 Provider Sticky Routing 提高 Cache 命中率。
Prompt Caching 文档说明,显式提供 session_id 后,同一会话会尽量继续路由到相同的模型与 Provider。Sticky 端点不可用时仍可切换到后备端点。
{
"model": "anthropic/claude-sonnet-4.5",
"session_id": "ticket-20260914-001",
"cache_control": {"type": "ephemeral"},
"messages": [
{"role": "system", "content": "这里是需要重复使用的长背景资料……"},
{"role": "user", "content": "先总结风险。"}
]
}
Prompt Cache 由最终 Provider 实现,各家的最小可缓存长度、写入价格、读取折扣和 TTL 不同。应用应同时观察 cached_tokens、实际成本和 Provider 变化。手工设置 provider.order 时,显式顺序会覆盖自动 Sticky 策略。
5. 费用和 BYOK¶
OpenRouter 支持两种主要用法:
- 购买 OpenRouter Credits:由 OpenRouter 统一结算各 Provider 的推理费用。
- BYOK:把自己的 OpenAI、Anthropic、Bedrock、Vertex 等 Provider 凭据配置到 Workspace,由 OpenRouter 继续负责统一接口与路由。
根据 2026-09-14 的官方价格页,Pay-as-you-go 平台费为充值额的 5.5%;模型推理价格按 Provider 标价结算。BYOK 的免费额度按“标价推理金额”计算,Pay-as-you-go 和 Business 当前为每月 25,000 美元,Enterprise 当前为每月 200,000 美元,超出后收取 5%。这些条款变化较快,预算和采购材料应引用当日价格页,避免把旧 FAQ 中按请求数计算的说明写进长期配置。
BYOK 不等于请求绕过 OpenRouter。请求仍经过 OpenRouter 数据面,只是最终 Provider 使用企业自己的凭据和额度。若要求流量只能走自有账户,还要在 BYOK 设置中关闭 Shared Capacity Fallback,并用 provider.only 等策略限制端点。
成本治理至少记录:
- 输入、输出、Reasoning、Cache 读写和多模态单位;
- 最终模型、Provider、服务等级与单次费用;
- Fallback 前后的失败尝试和费用归属;
- API Key、Workspace、用户、环境和业务标签;
- 每日预算、异常增速、余额阈值和自动充值状态。
免费模型适合功能试用。免费额度的速率与日请求数有限,也可能因共享容量波动,不应作为生产容量基线。
6. 数据到底经过哪里¶
OpenRouter 路径至少涉及应用、OpenRouter 和最终 Provider 三方。选择托管聚合平台时,隐私评审应检查每一跳,不能只看模型厂商的政策。
OpenRouter 数据收集说明称,Prompt 和 Response 内容默认不在 OpenRouter 留存,主动开启 Input & Output Logging 或允许平台使用内容时例外;Token、延迟、模型和费用等请求元数据会被保存用于统计。Provider Logging 文档也强调,不同 Provider 有各自的数据保留和训练政策。
生产环境建议同时落实四层控制:
- 在组织或 Workspace 层关闭不符合要求的数据收集选项;
- 用 Guardrail 限制模型、Provider、预算和 ZDR;
- 敏感请求在
provider中再次声明data_collection: deny与zdr: true; - 发请求前在企业内部完成密钥、个人信息和受监管字段的识别与脱敏。
ZDR 的含义是 Provider 不持久保存请求内容。它不等于数据不离开企业网络,也不等于无需数据跨境、供应商合同和访问控制评审。需要区域驻留的企业客户可以评估 OpenRouter 的 US/EU in-region 入口,但仍要确认所选模型、Provider 和合同范围。
7. 可观测性应该看什么¶
OpenRouter Activity 和 Logs 可以按模型、Provider 与 API Key 查看请求。Broadcast 还能把 Trace 异步发送到 OpenTelemetry Collector、Grafana Cloud、Datadog、Langfuse、S3 等目标。Broadcast 文档支持 Privacy Mode,只发送 Token、费用、时间和路由元数据,不发送 Prompt 与模型输出。
企业看板建议至少包含:
| 维度 | 指标 |
|---|---|
| 可用性 | 成功率、429/5xx、无可用 Provider、Fallback 次数 |
| 性能 | TTFT、E2E、输出 tok/s、流式中断率 |
| 成本 | 每请求费用、每任务费用、输入/输出/Cache/Reasoning 成本 |
| 路由 | 请求模型、最终模型、Provider、区域、服务等级 |
| 配额 | RPM、TPM、并发、Key 预算、Workspace 预算、余额 |
| 质量 | 业务 Eval 得分、Tool Call 成功率、结构化输出合格率 |
flowchart LR
APP[业务 Pod] --> IG[企业内部 AI Gateway]
IG --> OR[OpenRouter]
OR --> P[外部 Provider]
IG -. Prometheus .-> GP[Grafana]
OR -. Broadcast / OTLP .-> OC[OpenTelemetry Collector]
OC --> GP
OC --> LF[Langfuse / Trace 存储]
内部网关的指标和 OpenRouter Trace 需要用统一的 trace_id 或 session_id 关联。否则只能看到“网关慢”和“Provider 慢”两张独立图,无法判断耗时发生在哪一跳。
8. 与直接 API、自建 Gateway 怎么选¶
| 方案 | 接入速度 | 多模型与多 Provider | 数据链路控制 | 集群内 GPU 调度 | 运维责任 |
|---|---|---|---|---|---|
| 直接调用模型厂商 | 快 | 每家单独接入 | 较直接 | 无 | 应用维护多套 SDK、Key 与账单 |
| OpenRouter | 很快 | 强,统一目录、结算与路由 | 依赖托管平台和最终 Provider | 无 | 平台托管,应用负责策略和回归 |
| 自建 LiteLLM/Higress 等 Gateway | 中等 | 取决于适配器和配置 | 企业掌握入口、Key 与日志 | 通常只到服务级路由 | 企业负责 HA、升级、数据库和观测 |
| AIBrix/Inference Gateway | 中等 | 主要面向自建模型 | 企业可控 | 强,可感知实例、负载和缓存 | 企业负责 Kubernetes 与 GPU 服务 |
个人开发、模型评测和需要快速覆盖多家 API 的产品,OpenRouter 的接入效率很高。公司代码、客户数据或稳定生产业务应重点评估合同、区域、Provider 白名单、ZDR、SLA 和退出方案。
企业也可以采用两层入口:内部 AI Gateway 负责员工身份、租户、脱敏、预算和审计,再把部分模型转到 OpenRouter,把自建模型转到 AIBrix 或 vLLM/SGLang。这样应用只连接公司入口,外部平台的 Key、路由策略和替换过程不会散落到每个业务仓库。
9. Kubernetes 中的推荐接法¶
OpenRouter 本身是托管服务,Kubernetes 侧主要部署调用方或企业内部 Gateway:
Ingress / Service Mesh
│
▼
Internal AI Gateway
├─ SSO / JWT / ServiceAccount 身份
├─ 模型别名、预算、限流和审计
├─ Prompt 脱敏与出站策略
└─ Trace / Prometheus
│
├────────► OpenRouter ──► 外部 Provider
│
└────────► AIBrix ──────► vLLM / SGLang
落地时注意:
- OpenRouter Key 放入 Secret 或外部密钥系统,只由服务端 Pod 读取;浏览器和公开前端不能持有长期 Key。
- 使用稳定的内部模型别名,由 Gateway 映射到具体 OpenRouter Model/Provider 策略。
- 用 NetworkPolicy、Egress Gateway 或防火墙限制出站域名,并记录 DNS、TLS 和代理失败。
- 为 OpenRouter 请求分别设置连接超时、首 Token 超时和总超时;客户端重试与网关重试只能有一个权威层。
- Pod 终止时传播客户端取消,避免用户已断开后外部模型继续生成和计费。
- HPA 不应只看请求数。长上下文 Agent 的连接时间和费用远高于短 Chat,应结合活跃流、Token 和延迟扩缩容内部 Gateway。
- 预留直接 Provider 或自建模型的应急路径,并定期演练 OpenRouter 不可用、余额不足和 Provider 全部不匹配。
10. 上线前验证清单¶
协议¶
- 普通 Chat、完整 SSE、取消和超时;
- Tool Call、并行工具、JSON Schema 和 Reasoning 字段;
- 图片、音频或文件等实际使用的模态;
- 最大 Context、最大输出和不同 Provider 的参数支持;
response.model、路由元数据、Usage 与 Generation ID。
路由¶
- 给首选 Provider 注入 429、5xx、超时和不可用;
- 验证
only、ignore、ZDR、数据政策与价格上限; - 核对 Fallback 最终模型,以及业务是否接受输出变化;
- 检查
require_parameters=true后 Tool Call 和结构化输出不会落到不兼容端点; - 长会话验证
session_id、Provider Sticky 与 Prompt Cache 命中。
安全与费用¶
- Key 轮换、吊销、最小权限和泄漏告警;
- Workspace 与业务 Key 的日/月预算;
- Prompt 日志、Broadcast 和第三方观测平台的数据范围;
- OpenRouter 记录、内部网关 Usage 与账单抽样对账;
- 数据驻留、DPA、Provider 条款和离职/项目下线后的数据删除流程。
11. 适合与不适合的场景¶
OpenRouter 适合快速试用多模型、减少 SDK 适配、统一小团队账单,以及为同模型获得多 Provider 的容量和故障切换。对于模型评测平台和 Agent 原型,它可以显著缩短接入时间。
当业务要求所有数据留在私网、需要直接控制供应商合同与容量、必须调度自己的 GPU,或者已有成熟的企业 Gateway 和多云模型账户时,自建入口通常更合适。此时仍可以把 OpenRouter 作为受控的补充上游,而不是让每个应用直接持有平台 Key。
OpenRouter 的核心价值是把“接模型”变成一个统一接口,把“选哪个推理端点”变成可配置策略。真正进入生产后,仍然需要企业自己定义模型准入、质量评测、数据边界、成本预算和故障降级。