OpenRouter 统一AI模型API¶
一句话说明: OpenRouter 是一个统一网关,让你用一个 API Key 调用 OpenAI、Anthropic、Google、Meta 等数十家模型提供商的 LLM。
为什么要学¶
- 面试加分 — 展示你理解多模型路由、成本控制、fallback 策略等生产级 LLM 工程实践
- 实用性 — 一个入口切换模型,无需分别注册/付费/管理多个 API Key
- 成本优化 — 自动比价、按 token 计费透明,适合团队预算管理
- 快速验证 — 同一 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. 充值或绑定支付方式
快速上手¶
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 Unauthorized | API Key 无效或过期 | 检查 Key 是否正确,是否有余额 |
429 Rate Limited | 请求频率超限 | 加 retry + exponential backoff |
model not found | 模型 ID 拼写错误 | 到 openrouter.ai/models 查正确 ID |
| 响应很慢 | 模型本身慢或队列拥堵 | 尝试切换到同级别的备选模型 |
| 计费比预期高 | 选了昂贵模型或 prompt 太长 | 检查 model pricing,压缩 context |
面试高频考点¶
- OpenRouter 和直接调用 OpenAI API 有什么区别?
统一入口、统一计费、模型切换只改一个字段、内置 fallback
如何在生产环境中做模型路由决策?
- 按任务复杂度分级(简单任务用便宜模型,复杂任务用强模型)
按延迟要求选模型、按成本预算设限
Fallback 策略的意义?
- 高可用:单一模型宕机时服务不中断
自动降级比人工切换快得多
如何控制 LLM 调用成本?
token 预算设置、模型分级路由、prompt 压缩、缓存重复请求
OpenRouter 的兼容性设计有什么好处?
- 兼容 OpenAI SDK 格式,迁移零成本,生态工具直接复用