使用OpenRouter在Python应用中接入多个AI模型

💡 原文英文,约1700词,阅读约需6分钟。
📝

内容提要

OpenRouter通过单一API统一接入多家模型提供商,切换模型只需修改一行代码。使用流程为:注册账号获取API密钥;用Python的requests向统一端点发送请求,请求体包含model和messages字段;将模型名作为参数即可对比Llama、Qwen、Mistral等免费模型;将model设为openrouter/free可自动选用免费模型;通过models列表按序尝试备用模型以提升可靠性。

🔎

延伸解读

统一接口如何简化多模型对比

文章通过客服工单助手的例子说明,传统方式需要分别注册多个提供商、学习不同认证并重写请求代码。OpenRouter 将多家模型统一到一个端点,请求体格式一致,切换模型只需修改 model 字符串。这意味着开发者可以用同一套 Python 代码快速对比 Llama、Qwen、Mistral 等模型,而无需维护多套集成逻辑。

免费模型的两种使用策略

文章指出,带 :free 后缀的模型可免费使用,无需绑定支付方式。若指定模型失效,可改用 openrouter/free,它会自动选择当前可用的免费模型,适合快速原型且保证零成本。但需注意,openrouter/free 与 openrouter/auto 不同:后者可能选择付费模型。因此,对成本敏感的场景应明确使用免费路由。

备用模型列表提升可靠性

当单个模型因提供商故障、限流或内容过滤而失败时,应用可能崩溃。OpenRouter 允许将 model 字段改为 models 列表,按顺序尝试每个模型,返回第一个成功的结果。这样开发者无需自行编写重试逻辑,只需根据应用需求排列优先级,例如高质量模型在前、低成本或高可靠模型在后。

提供商排序的适用场景

对于指定名称的模型,OpenRouter 可能有多家提供商托管,可通过 provider 字段设置排序,如按价格或延迟。文章强调,这对免费模型影响不大,因为无按 token 计费成本;但在使用付费模型且流量较大时,选择最便宜或最快的提供商才有实际意义。因此,该功能更适合生产环境中的成本或性能优化。

❓

Q&A

OpenRouter 是什么?它主要解决什么问题?

OpenRouter 是一个位于数十家模型提供商之前的统一 API 层,通过单一 API 暴露这些提供商的模型。它解决了需要分别注册多个提供商、学习不同认证方案并重写请求代码的重复工作,让切换模型只需修改一行代码。

如何获取 OpenRouter 的 API 密钥?

在 OpenRouter 官网注册免费账户,登录后从账户菜单打开 Keys 部分,生成一个新的 API 密钥。给它起一个容易识别的名字(如 learning-key),其他设置保持默认。复制密钥并安全存储为环境变量,避免意外提交到代码仓库。

用 Python 向 OpenRouter 发送请求的基本代码结构是怎样的?

使用 requests 库向 https://openrouter.ai/api/v1/chat/completions 发送 POST 请求。请求头包含 Authorization: Bearer <API_KEY> 和 Content-Type: application/json。请求体是一个 JSON 对象,包含 model 字段(格式为 provider/model-name)和 messages 字段(包含 role 和 content 的消息列表)。响应是 JSON,回复文本在 data['choices'][0]['message']['content'] 中。

如何在不修改其他代码的情况下比较不同模型的输出?

将模型名称作为参数传递给一个函数,该函数内部使用相同的请求逻辑(相同的 API_URL 和 headers),只需改变 payload 中的 model 值。然后循环调用该函数,传入不同的模型名称(如 meta-llama/llama-3.2-3b-instruct:free、qwen/qwen3-4b:free、mistralai/mistral-7b-instruct:free),即可并排比较各模型的回复。

如何让 OpenRouter 自动选择一个免费模型?

将请求体中的 model 字段设置为 openrouter/free。OpenRouter 的 Free Models Router 会自动从当前可用的免费模型中选择一个,确保不会产生费用。这是原型设计时最安全的默认设置。注意这与 openrouter/auto 不同,后者可能选择付费模型。

如何为模型请求添加备用模型以提高可靠性?

在请求体中使用 models 字段(复数)代替 model,提供一个模型列表。OpenRouter 会按顺序尝试每个模型,返回第一个成功的响应。这样你的代码无需自己实现重试逻辑。列表顺序可根据应用需求排列,例如将质量最高的放在前面,或最快的放在前面。

如何根据价格或延迟选择模型提供商?

在请求体中添加 provider 字段,例如设置 payload['provider'] = {'sort': 'price'} 以优先选择最便宜的提供商,或 {'sort': 'latency'} 以优先选择最快的提供商。这主要在使用付费模型且流量较大时有意义,对免费模型影响不大,因为免费模型没有按 token 计费的成本需要优化。

🏷️

标签

➡️

继续阅读