用 OpenRouter 一把钥匙开所有模型的大门:统一 API、智能路由与故障回退

2026-06-09 33 预计阅读时间: 1 分钟
来源: realpython.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:7 分钟

对接一个大模型 API 已经够烦了——不同厂商的端点、认证方式、请求格式各不相同。当你的应用需要同时调用 GPT-4o、Claude、Gemini、Mistral 等多个模型时,维护成本直线上升。OpenRouter 的思路很简单:一个端点、一个 key,路由到上百个模型,还自带故障回退和提供商策略。下面拆解它的核心机制,并给出可直接跑的 Python 代码。

统一端点:一个 URL 搞定所有模型

OpenRouter 的 API 兼容 OpenAI 的 /v1/chat/completions 格式,这意味着你现有的 OpenAI SDK 或 HTTP 客户端几乎不用改,只需要换 base_urlapi_key。模型通过 model 字段指定,格式为 provider/model-name,比如 openai/gpt-4oanthropic/claude-3.5-sonnet

关键区别在于:你不再需要为每个提供商单独注册账号和 key。OpenRouter 在背后代理转发,计费也统一结算。

智能路由与提供商策略

OpenRouter 不只是个代理,它提供了几种路由策略来决定请求发给哪个提供商实例:

  • Priority:按你设定的优先级列表依次尝试,首选提供商不可用时自动降级到下一个。
  • Cost:在满足模型要求的前提下,优先选最便宜的提供商实例。
  • Fallback only:只在首选提供商失败时才启用回退,平时不切换。

这些策略通过请求体中的 provider 字段控制。比如你想优先用 Anthropic 官方实例、回退到其他托管 Claude 的提供商,几行配置就能搞定。

故障回退:让应用不因单点故障挂掉

大模型 API 的可用性并不完美——限流、宕机、区域性故障都遇到过。OpenRouter 的回退机制分两层:

  1. 提供商级回退:同一模型可能有多个提供商(比如 Claude 既有 Anthropic 官方也有 AWS Bedrock 托管),首选失败后自动切换。
  2. 模型级回退:你可以在 model 字段用 : 串联多个模型作为回退链,比如 anthropic/claude-3.5-sonnet:openai/gpt-4o,Claude 全线不可用时降级到 GPT-4o。

第二层是写应用时最实用的——用户不会因为某个模型临时下线而拿到报错。

实战:Python 调用 OpenRouter 并配置回退链

以下代码使用 openai Python SDK(只需改 base_url),演示如何调用 OpenRouter、指定模型回退链、以及设置提供商策略。先安装依赖:

pip install openai

然后运行:

from openai import OpenAI

# 替换为你自己的 OpenRouter API key
# 获取地址:https://openrouter.ai/keys
client = OpenAI(
    base_url="https://openrouter.ai/api/v1",
    api_key="YOUR_OPENROUTER_KEY",
)

# 模型回退链:首选 Claude 3.5 Sonnet,不可用时降级到 GPT-4o
# 提供商策略:优先选 Anthropic 官方,允许回退到其他 Claude 提供商
response = client.chat.completions.create(
    model="anthropic/claude-3.5-sonnet:openai/gpt-4o",
    messages=[
        {"role": "user", "content": "用一句话解释什么是向量数据库"}
    ],
    extra_body={
        "provider": {
            "order": ["Anthropic"],          # 提供商优先级
            "allow_fallbacks": True,         # 允许提供商级回退
            "data_collection": "deny",       # 拒绝提供商用于训练
        },
    },
)

print(f"使用模型: {response.model}")
print(f"回答内容: {response.choices[0].message.content}")

几点说明:

  • model 字段中的 : 语法是 OpenRouter 扩展,OpenAI SDK 原生不支持,所以能正常传递是因为 SDK 不校验该字段。
  • extra_body 中的 provider 配置也是 OpenRouter 扩展参数,SDK 会原样放进请求体。
  • data_collection: "deny" 确保你的请求内容不会被模型提供商用于训练——这对生产环境很重要。
  • response.model 会返回实际使用的模型标识,你可以据此判断回退是否生效。

如果你想看更底层的 HTTP 请求,也可以直接用 requests

import requests, json

resp = requests.post(
    "https://openrouter.ai/api/v1/chat/completions",
    headers={
        "Authorization": "Bearer YOUR_OPENROUTER_KEY",
        "Content-Type": "application/json",
    },
    json={
        "model": "anthropic/claude-3.5-sonnet:openai/gpt-4o",
        "messages": [{"role": "user", "content": "什么是 RAG?"}],
        "provider": {
            "order": ["Anthropic"],
            "allow_fallbacks": True,
        },
    },
)
print(json.dumps(resp.json(), indent=2))

选用 OpenRouter 前的几件事

检查项 说明
计费透明度 OpenRouter 按各模型原价加小额手续费计费, dashboard 可查看每次请求的实际花费和使用的提供商。
延迟代价 多一层代理意味着多一次网络跳转,对延迟敏感的场景(实时对话)需要实测对比直连。
合规与数据 不同提供商的数据政策不同,data_collection 参数可控制,但需逐模型确认。
回退链设计 回退模型的能力应与首选模型接近,否则用户体验会突变。Claude → GPT-4o 是合理降级;Claude → GPT-3.5 就不是。
Key 安全 OpenRouter key 能访问所有模型,权限比单一提供商 key 更大,务必做好密钥管理。

适合用 OpenRouter 的场景:需要多模型 A/B 测试、想用回退链提升可用性、不想逐个对接各家 API。不太适合的场景:对延迟极度敏感、只固定用一个模型且该模型 API 稳定——这时候直连更简单。

一句话总结:OpenRouter 把"多模型接入"从 N 个 SDK 的维护问题,变成了一个 model 字段的配置问题。回退链和提供商策略让这个配置不只是方便,还更可靠。


相关推荐