OpenRouter 实战指南:统一接口调用 500+ AI 模型
一、OpenRouter 是什么?
OpenRouter 本质上是一个AI 模型 API 聚合平台。你可以把它想象成一个万能插座,只需要一个 API 密钥和统一的接口规范,就能直接调用来自 OpenAI、Anthropic、Google、Mistral 等 50+ 家厂商的 500+ 主流 AI 模型。这其中还包含了 50+ 个可免费使用的模型。
在实际开发中,它的核心优势非常明显:
- 统一接口:彻底告别适配不同厂商 API 格式的麻烦
- 灵活切换:改一行代码就能换模型,方便对比测试效果
- 成本优化:系统能自动帮你选择最经济的模型方案
- 自动故障转移:主模型挂了会自动切备用,保障服务稳定性
特别是免费模型资源,对于学习新技术或快速验证原型非常友好。
二、准备工作:注册与密钥获取
1. 注册账号
首先访问官网 https://openrouter.ai,点击 Sign Up 注册。支持 Google 账号快速登录,也可以用邮箱注册。记得完成邮箱验证后再登录。
2. 启用免费模型(关键步骤)
很多开发者容易忽略这一步,导致无法使用免费模型。必须手动开启隐私设置:
- 点击右上角头像进入 Settings(设置)
- 找到 Privacy(隐私)选项
- 勾选 Agree to the free models data policy(同意免费模型数据政策)
- 保存设置
3. 创建 API 密钥
- 同样在头像菜单下选择 API Keys
- 点击 Create Key 创建新密钥
- 输入名称,可选设置额度限制防止意外消耗
- 复制密钥并妥善保存,因为一旦关闭页面就再也看不到完整密钥了
三、三种核心调用方式(Python)
方式 1:使用 OpenAI SDK(推荐)
OpenRouter 完美兼容 OpenAI 的接口协议,所以直接用 OpenAI 的官方 SDK 是最稳妥的方案,兼容性最好。
先安装依赖:
pip install openai python-dotenv
基础案例:调用 GPT-3.5-turbo
import os
from openai import OpenAI
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
# 配置 OpenRouter 客户端
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=os.getenv("OPENROUTER_API_KEY"),
default_headers={
"HTTP-Referer": "https://your-website.com", # 可选,用于排行榜展示
"X-Title": "Your App Name" # 可选,应用名称
}
)
async def main():
# 发送请求
completion = await client.chat.completions.create(
model="openai/gpt-3.5-turbo",
messages=[{"role": "user", "content": "用一句话解释什么是人工智能?"}]
)
# 输出结果
print(completion.choices[0].message.content)
if __name__ == "__main__":
import asyncio
asyncio.run(main())
方式 2:直接 API 调用(无依赖)
如果你不想引入额外库,或者场景比较轻量,直接发 HTTP 请求也很简单。
import requests
import os
import json
from dotenv import load_dotenv
load_dotenv()
url = "https://openrouter.ai/api/v1/chat/completions"
headers = {
"Authorization": f"Bearer {os.getenv('OPENROUTER_API_KEY')}",
"Content-Type": "application/json",
"HTTP-Referer": "https://your-website.com", # 可选
"X-Title": "Your App Name" # 可选
}
data = {
"model": "deepseek/deepseek-r1-distill-llama-70b:free", # 免费模型
"messages": [{"role": "user", "content": "推荐 3 本 Python 入门书籍"}]
}
# 发送 POST 请求
response = requests.post(url, headers=headers, data=json.dumps(data))
result = response.json()
# 输出结果
print(result["choices"][0]["message"]["content"])
方式 3:使用 OpenRouter Python SDK(Beta 版)
官方也提供了自己的 SDK,适合喜欢原生体验的开发者。
pip install openrouter
from openrouter import OpenRouter
import os
from dotenv import load_dotenv
load_dotenv()
# 初始化客户端
client = OpenRouter(
api_key=os.getenv("OPENROUTER_API_KEY"),
base_url="https://openrouter.ai/api/v1"
)
async def main():
# 发送请求
response = await client.chat.completions.create(
model="mistralai/mistral-7b-instruct:free", # 免费模型
messages=[{"role": "user", "content": "什么是大语言模型?"}]
)
# 输出结果
print(response.choices[0].message.content)
if __name__ == "__main__":
import asyncio
asyncio.run(main())
四、7 个实战案例,覆盖主流应用场景
案例 1:免费模型调用(零成本学习)
OpenRouter 提供多个免费模型,名称通常带 :free 后缀。比如 DeepSeek、Mistral 的部分版本。
async def free_model_demo():
completion = await client.chat.completions.create(
model="mistralai/mistral-7b-instruct:free", # 选择免费模型
messages=[{"role": "user", "content": "写一首关于程序员的短诗"}]
)
print("免费模型结果:")
print(completion.choices[0].message.content)
asyncio.run(free_model_demo())
案例 2:流式响应(实时显示结果)
做聊天应用时,流式响应能显著提升用户体验,让用户感觉 AI 在实时思考。
async def streaming_demo():
print("AI 正在思考,将实时显示结果:")
stream = await client.chat.completions.create(
model="openai/gpt-3.5-turbo",
messages=[{"role": "user", "content": "解释什么是流式响应?"}],
stream=True # 启用流式
)
async for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
asyncio.run(streaming_demo())
案例 3:多轮对话(上下文记忆)
维护好 messages 列表是实现连续对话的关键,把历史回复追加进去即可。
async def multi_turn_demo():
# 初始化对话历史
messages = [
{"role": "system", "content": "你是一个友好的助手,擅长解释技术概念"},
{"role": "user", "content": "什么是 OpenRouter?"}
]
# 第一轮对话
response = await client.chat.completions.create(
model="anthropic/claude-3-haiku",
messages=messages
)
assistant_msg = response.choices[0].message
print("AI:", assistant_msg.content)
# 添加 AI 回复到对话历史
messages.append(assistant_msg)
# 第二轮对话(基于上下文)
messages.append({"role": "user", "content": "它和直接调用 OpenAI API 有什么区别?"})
response2 = await client.chat.completions.create(
model="anthropic/claude-3-haiku",
messages=messages
)
print("AI:", response2.choices[0].message.content)
asyncio.run(multi_turn_demo())
案例 4:代码生成与解释
调用专门针对代码优化的模型,比如 DeepSeek Coder,生成效率更高。
async def code_generation_demo():
prompt = """
写一个 Python 函数,实现以下功能:
1. 接收一个列表作为输入
2. 计算列表中所有偶数的平方和
3. 返回结果
4. 添加详细注释
"""
response = await client.chat.completions.create(
model="deepseek/deepseek-coder-6.7b-instruct:free", # 免费代码模型
messages=[{"role": "user", "content": prompt}],
temperature=0.3 # 降低随机性,提高代码准确性
)
print("生成的代码:")
print(response.choices[0].message.content)
asyncio.run(code_generation_demo())
案例 5:模型对比测试
有时候不确定哪个模型效果好,可以快速遍历几个模型对比输出。
async def model_comparison_demo():
prompt = "解释量子计算的基本原理,用简单易懂的语言"
models = ["openai/gpt-3.5-turbo", "anthropic/claude-3-haiku", "mistralai/mistral-7b-instruct:free"]
for model in models:
print(f"\n===== {model} =====")
response = await client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}]
)
print(response.choices[0].message.content[:200] + "...") # 显示前 200 字符
asyncio.run(model_comparison_demo())
案例 6:参数调优
通过调整 temperature 和 max_tokens 等参数,可以控制输出的风格和长度。
async def parameter_tuning_demo():
messages = [{"role": "user", "content": "写一个关于太空探索的故事"}]
# 高随机性(创意故事)
print("=== 高随机性(temperature=0.9)===")
response1 = await client.chat.completions.create(
model="openai/gpt-3.5-turbo",
messages=messages,
temperature=0.9, # 0-2,越高越随机
max_tokens=200 # 限制最大长度
)
print(response1.choices[0].message.content)
# 低随机性(结构化输出)
print("\n=== 低随机性(temperature=0.1)===")
response2 = await client.chat.completions.create(
model="openai/gpt-3.5-turbo",
messages=messages,
temperature=0.1,
max_tokens=200,
top_p=0.1 # 核采样,0-1,越小越集中
)
print(response2.choices[0].message.content)
asyncio.run(parameter_tuning_demo())
案例 7:工具调用
通过 MCP(Model Context Protocol)或标准 Tool Calling 机制,可以让 AI 调用外部 API,比如查天气。
async def tool_calling_demo():
# 定义可用工具
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的天气信息",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称"}
},
"required": ["city"]
}
}
}]
response = await client.chat.completions.create(
model="openai/gpt-3.5-turbo",
messages=[{"role": "user", "content": "北京今天的天气怎么样?"}],
tools=tools,
tool_choice="auto" # 自动选择工具
)
# 处理工具调用请求
tool_calls = response.choices[0].message.tool_calls
if tool_calls:
print("需要调用工具:", tool_calls[0].function.name)
# 这里可以添加调用外部天气 API 的逻辑
# 然后将结果返回给模型继续生成回复
asyncio.run(tool_calling_demo())
五、常见问题与最佳实践
常见问题排查
- 免费模型无法使用:大概率是隐私设置没开,回去检查是否勾选了免费模型数据政策。
- API 调用失败:
- 检查 API 密钥是否正确且未过期
- 确认模型名称拼写无误(可在官网 Models 页面查询)
- 检查账户余额(免费模型也有频率限制)
- 响应缓慢:尝试切换到其他模型,或者适当减少
max_tokens的输出长度。
最佳实践建议
- 环境变量管理:千万别把密钥硬编码在代码里,用
.env文件存储。 - 错误处理:加上
try-except捕获网络异常或认证错误,避免程序崩溃。 - 模型选择策略:
- 原型开发:优先用免费模型省钱
- 生产环境:根据任务复杂度选付费模型
- 成本敏感:Mistral、DeepSeek 性价比通常不错
- 对话管理:合理截断对话历史,避免 token 消耗过快。
- 监控与优化:定期查看控制台统计,根据实际使用情况调整模型参数。
六、进阶方向
掌握基础后,还可以往这些方向深入:
- 批量处理:并发处理多个请求,提升吞吐量
- 自定义路由:根据任务类型自动选择最优模型
- 缓存机制:对常见查询结果做缓存,减少重复调用
- 多模态:尝试调用支持图像生成的模型(如 DALL-E、Stable Diffusion)
- 应用部署:将 OpenRouter 集成到 Web 后端、桌面程序或移动端应用中
总结
OpenRouter 让 AI 开发变得前所未有的简单。你只需专注于业务逻辑,无需关心底层模型的复杂性。通过上面的 7 个案例,你已经掌握了从基础调用到高级功能的核心技能。现在,开始用一个 API 探索 500+ AI 模型的无限可能吧!


