跳转至

OpenRouter 统一AI模型API

一句话说明: OpenRouter 是一个统一网关,让你用一个 API Key 调用 OpenAI、Anthropic、Google、Meta 等数十家模型提供商的 LLM。


为什么要学

  1. 面试加分 — 展示你理解多模型路由、成本控制、fallback 策略等生产级 LLM 工程实践
  2. 实用性 — 一个入口切换模型,无需分别注册/付费/管理多个 API Key
  3. 成本优化 — 自动比价、按 token 计费透明,适合团队预算管理
  4. 快速验证 — 同一 prompt 多模型对比,选出最优模型上线

核心概念详解

统一网关 (Unified Gateway)

白话: OpenRouter 就像一个"模型商城的收银台"——你不用去每家店单独结账,统一在这里下单即可。

特性直接调用各厂 API通过 OpenRouter
API Key 数量每家一个只需 1 个
计费方式各厂独立统一账单
模型切换改 endpoint + key只改 model 字段
Fallback自己实现内置支持

模型路由 (Model Routing)

白话: 你告诉 OpenRouter "我要用 Claude",它帮你把请求转发到 Anthropic 的服务器,中间做鉴权、计费、限流。

路由策略: - 指定模型anthropic/claude-sonnet-4-20250514 精确路由 - 自动路由openrouter/auto 根据 prompt 复杂度自动选模型 - Fallback 链:首选模型不可用时自动降级

信用额度与计费

白话: 你先充值(或绑卡),每次调用按模型的 token 单价扣费,比直接调用可能便宜(批量折扣)也可能略贵(中间商加成)。


安装与配置

# 无需安装 SDK,直接用任何 HTTP 客户端
# Python 推荐用 openai SDK(兼容 OpenAI 格式)
pip install openai

# 或用 requests
pip install requests

获取 API Key: 1. 访问 https://openrouter.ai 注册账号 2. 进入 Dashboard → Keys → Create Key 3. 充值或绑定支付方式

# 设置环境变量
export OPENROUTER_API_KEY="sk-or-v1-xxxxxxxxxxxx"

快速上手

5 分钟最小示例(Python + openai SDK)

from openai import OpenAI

client = OpenAI(
    base_url="https://openrouter.ai/api/v1",
    api_key="sk-or-v1-xxxxxxxxxxxx",  # 你的 OpenRouter Key
)

response = client.chat.completions.create(
    model="anthropic/claude-sonnet-4-20250514",  # 任意切换模型
    messages=[
        {"role": "user", "content": "用一句话解释什么是 RAG"}
    ],
)

print(response.choices[0].message.content)

用 curl 直接调用

curl https://openrouter.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $OPENROUTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/gemini-2.5-pro-preview-06-05",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

进阶用法

1. 多模型对比测试

models = [
    "openai/gpt-4o",
    "anthropic/claude-sonnet-4-20250514",
    "google/gemini-2.5-pro-preview-06-05",
    "meta-llama/llama-4-maverick",
]

prompt = "解释 Transformer 的 self-attention 机制"

for model in models:
    resp = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": prompt}],
        max_tokens=200,
    )
    print(f"\n{'='*40}\n{model}:\n{resp.choices[0].message.content}")

2. Fallback 与路由控制

# 使用 route 参数指定 fallback
response = client.chat.completions.create(
    model="anthropic/claude-sonnet-4-20250514",
    messages=[{"role": "user", "content": "Hi"}],
    extra_body={
        "route": "fallback",  # 模型不可用时自动降级
        "models": [
            "anthropic/claude-sonnet-4-20250514",
            "openai/gpt-4o",
            "google/gemini-2.5-pro-preview-06-05",
        ]
    }
)

3. 流式输出 (Streaming)

stream = client.chat.completions.create(
    model="anthropic/claude-sonnet-4-20250514",
    messages=[{"role": "user", "content": "写一首关于编程的诗"}],
    stream=True,
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

4. 成本追踪

# 响应中包含 usage 信息
print(f"输入 tokens: {response.usage.prompt_tokens}")
print(f"输出 tokens: {response.usage.completion_tokens}")
# 通过 Dashboard 查看详细账单和每日消耗趋势

5. 与 LangChain 集成

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="anthropic/claude-sonnet-4-20250514",
    openai_api_key="sk-or-v1-xxxxxxxxxxxx",
    openai_api_base="https://openrouter.ai/api/v1",
)

result = llm.invoke("什么是向量数据库?")
print(result.content)

常见问题与排错

问题原因解决方案
401 UnauthorizedAPI Key 无效或过期检查 Key 是否正确,是否有余额
429 Rate Limited请求频率超限加 retry + exponential backoff
model not found模型 ID 拼写错误到 openrouter.ai/models 查正确 ID
响应很慢模型本身慢或队列拥堵尝试切换到同级别的备选模型
计费比预期高选了昂贵模型或 prompt 太长检查 model pricing,压缩 context

面试高频考点

  1. OpenRouter 和直接调用 OpenAI API 有什么区别?
  2. 统一入口、统一计费、模型切换只改一个字段、内置 fallback

  3. 如何在生产环境中做模型路由决策?

  4. 按任务复杂度分级(简单任务用便宜模型,复杂任务用强模型)
  5. 按延迟要求选模型、按成本预算设限

  6. Fallback 策略的意义?

  7. 高可用:单一模型宕机时服务不中断
  8. 自动降级比人工切换快得多

  9. 如何控制 LLM 调用成本?

  10. token 预算设置、模型分级路由、prompt 压缩、缓存重复请求

  11. OpenRouter 的兼容性设计有什么好处?

  12. 兼容 OpenAI SDK 格式,迁移零成本,生态工具直接复用

参考资源