Access Multiple AI Models in Your Python Apps Using OpenRouter
TL;DR · AI 摘要
Access Multiple AI Models in Your Python Apps Using OpenRouter - KDnuggets publ: 28-Oct, 2026 - Blog Top Posts About - T...
核心要点
- 主题聚焦:Access Multiple AI Models in Your Python Apps Us
- 来源:KDnuggets,建议结合原文判断细节。
- AI 分析暂不可用,本条为保底评分与摘要。
在Python应用中使用OpenRouter访问多个AI模型 - KDnuggets
publ: 2026年10月28日
- 博客热门文章
- 主题 人工智能 职业建议 计算机视觉 数据工程 数据科学 语言模型 机器学习 MLOps 自然语言处理 编程 Python SQL
- 数据集
- 活动
- 资源 快速参考指南 推荐 技术简报
- 广告
订阅电子报
#header end
/ad_wrapper
在Python应用中使用OpenRouter访问多个AI模型
学习如何通过OpenRouter API快速上手,通过单一API调用多个AI模型,比较响应结果,切换模型,并设置自动回退机制。
作者:
Bala Priya C
,KDnuggets特约编辑兼技术内容专家,2026年10月28日发布于
人工智能
<div class="addthis_native_toolbox"></div>
介绍
假设你正在构建一个支持工单助手,想要在选择模型前比较GPT、Claude和Llama各自处理相同客户消息的方式。通常这意味着需要注册三个不同供应商的服务,学习三种不同的认证方案,并重写三次请求代码才能完成一次对比。
OpenRouter消除了这种重复。它位于数十家供应商之前,通过单一API对外暴露这些模型,因此从一个模型切换到另一个模型只需一行代码修改,而无需全新集成。无论实际处理请求的是哪个供应商,你的Python代码始终保持完全一致。本文将涵盖:
- 创建OpenRouter账户并获取API密钥
- 使用纯Python和requests库向模型发送第一个请求
- 通过修改单个字符串切换模型,无需其他代码改动
- 让OpenRouter自动选择模型,并添加备用模型以提高可靠性
我们将通过逐步构建小型脚本的方式进行演示,从账户设置开始。
先决条件
你不需要任何人工智能或机器学习背景知识即可跟随教程。不过,你需要熟悉基础Python、使用pip安装包,以及在终端中设置环境变量。OpenRouter处理模型集成,因此你的代码只需发送文本并读取响应。
创建OpenRouter账户和API密钥
访问OpenRouter并创建免费账户。登录后,从账户菜单中打开"Keys"部分生成新API密钥。为其命名一个便于识别的名称,例如learning-key,其他设置保持默认。
将密钥保存在安全的位置。将其存储为环境变量,避免意外提交到代码仓库。
在macOS或Linux系统中:
export OPENROUTER_API_KEY="your-key-here"TL;DR:OpenRouter上部分模型可免费试用,因此你可以全程跟随本教程而无需添加支付方式。
更多关于原因和实现方式的说明:OpenRouter通过添加:free后缀标记某些模型;这些模型路由到完全免费的版本,无需支付方式。本教程所有示例均使用这些模型,因此你可以零成本运行全部内容。如果在阅读本教程时某个模型ID停止响应,请查看openrouter.ai/models过滤后的免费模型列表,或使用openrouter/free(我们将在下文介绍该选项,它始终指向当前可用的免费模型)。
mkdir support-bot-demo
cd support-bot-demo
python -m venv .venv
source .venv/bin/activate激活环境后,安装 requests 库。这是你唯一需要的依赖项。OpenRouter 是一个普通的 HTTP API,因此无需特殊软件开发工具包 (SDK) 即可开始使用:
pip install requests注意:OpenRouter 也有官方 SDK。你可以通过 pip 安装 openrouter,它提供的是带类型提示的客户端对象,而不是原始字典。
本教程仅使用 requests 库,这样每个请求都能以纯 JSON 格式显示,便于你学习 API 的结构时清楚看到发送和接收的内容。等你熟悉后,改用 SDK 只需进行小幅调整。
向模型发送第一个请求
无论哪个模型进行回答,发送给 OpenRouter 的每个请求都遵循相同格式:向一个端点发送 POST 请求,请求头中包含 API 密钥,请求体中包含消息列表。以下脚本将客户支持消息发送给模型并打印回复:
import os
import requests
API_URL = "https://openrouter.ai/api/v1/chat/completions"
API_KEY = os.getenv("OPENROUTER_API_KEY")
customer_message = (
"My order #48213 arrived with the wrong charger. "
"I need the correct one before Friday, can you help?"
)
payload = {
"model": "meta-llama/llama-3.2-3b-instruct:free",
"messages": [
{"role": "system", "content": "You are a concise, polite customer support agent."},
{"role": "user", "content": customer_message},
],
}
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
response = requests.post(API_URL, headers=headers, json=payload)
data = response.json()
print(f"Model used: {data['model']}")
print(f"Reply: {data['choices'][0]['message']['content']}")payload 字典就是整个请求:model 告诉 OpenRouter 使用哪个模型,格式为 provider/model-name,messages 采用与任何聊天风格模型相同的 role/content 格式。
系统消息设置一次语气,用户消息是实际的工单文本。响应以 JSON 格式返回,回复文本位于 data["choices"][0]["message"]["content"] —— 与大多数聊天完成 API 返回的结构相同,因为 OpenRouter 将每个提供商的响应标准化为相同的 OpenAI 兼容格式。
在不修改代码的情况下切换模型
由于模型只是 payload 中的一个字符串,比较提供商只需更改一行代码。以下小函数接受模型名称作为参数,因此你可以连续使用不同模型进行调用:
def ask_model(model_name, message):
payload = {
"model": model_name,
"messages": [
{"role": "system", "content": "You are a concise, polite customer support agent."},
{"role": "user", "content": message},
],
}
response = requests.post(API_URL, headers=headers, json=payload)
return response.json()
ticket = "My order #48213 arrived with the wrong charger. I need the correct one before Friday."
for model in ["meta-llama/llama-3.2-3b-instruct:free", "qwen/qwen3-4b:free", "mistralai/mistral-7b-instruct:free"]:
result = ask_model(model, ticket)
reply = result["choices"][0]["message"]["content"]
print(f"--- {model} ---")
print(reply, "\n")ask_model 与第一个脚本中的请求逻辑相同(它复用了该脚本中的 API_URL 和 headers),唯一的区别是将 model_name 作为参数传递,而非硬编码值。循环会用三个不同模型调用三次该函数,并将每个回复打印在对应模型名称旁边。这正是 OpenRouter 在实际应用中的核心优势:你只需调用一次函数三次,而非分别对接三个不同 API。
让 OpenRouter 为你选择免费模型
有时你并不关心具体是哪个模型来回答问题,你只需要一个可用的回复,既不需要自己选择模型,也无需担心付费模型被意外使用。将 model 设置为 openrouter/free 时,这个决策会交由 OpenRouter 的免费模型路由系统处理,它始终从当前可用的免费模型中进行选择:
payload = {
"model": "openrouter/free",
"messages": [{"role": "user", "content": ticket}],
}
response = requests.post(API_URL, headers=headers, json=payload)
data = response.json()
print(f"OpenRouter picked: {data['model']}")这是原型设计时最安全的默认选择:无论当天有哪些免费模型可用,你都不会被收取任何费用。这与 openrouter/auto 的设置不同,后者会根据提示选择最适合的模型,可能包含付费模型。
另外,当你通过名称指定模型时,OpenRouter 通常会有多个提供商托管该模型,你可以通过 provider 字段选择使用哪个提供商。例如,设置 payload["provider"] = {"sort": "price"} 可优先选择价格最低的提供商,或设置 {"sort": "latency"} 优先选择响应最快的提供商。这一点在你使用真实规模的付费模型时尤为重要;对于免费模型影响较小,因为本身就没有需要优化的每 token 成本。
通过备用模型提高可靠性
单个模型可能因提供商故障、速率限制、内容过滤器拒绝请求等原因失败。对于任何超出小型边角项目的应用,你都希望在首次失败时自动启用备份方案,而非让应用崩溃。OpenRouter 通过接受模型列表而非单一模型来支持这一需求:
payload = {
"models": [
"qwen/qwen3-4b:free",
"meta-llama/llama-3.2-3b-instruct:free",
"mistralai/mistral-7b-instruct:free",
],
"messages": [{"role": "user", "content": ticket}],
}
response = requests.post(API_URL, headers=headers, json=payload)
data = response.json()
print(f"Answered by: {data['model']}")
print(data["choices"][0]["message"]["content"])注意这里的键已从 model(单数)改为 models(列表)。OpenRouter 会按顺序尝试列表中的每个模型,并返回第一个成功响应的模型,因此你的代码无需自行实现重试逻辑。你可以根据应用需求对列表进行排序,例如优先使用质量最高的模型,再用更便宜的模型作为后备,或优先使用响应最快的模型,再用更可靠的模型作为后备。
总结
以下是我们在这篇入门文章中涵盖的所有功能及其使用场景概览:
| 功能 | 作用 | 使用场景 | |------|------|----------| | 带有 :free 标签的单个模型字符串 | 指定一个具体的免费模型 | 需要零成本且可预测的模型时 | | 更改 model 值 | 在无需其他代码修改的情况下比较不同模型 | 测试哪个模型最适合你的使用场景时 | | "model": "openrouter/free" | 让 OpenRouter 为你选择任意可用的免费模型 | 需要自动选择可用免费模型时 |
带有保证零成本默认值的快速原型设计
"provider": {"sort": "price"}或
{"sort": "latency"}根据成本或速度为所选模型选择服务提供商
在较大规模上使用付费模型
"models": [...](一个列表)
按顺序尝试每个模型,直到其中一个成功
需要在单个模型失败时保持运行的应用程序
有了这些基础,你可以构建从快速一次性脚本到即使单个服务提供商宕机也能保持在线的支持机器人等各种应用。
一如既往,以下是一些进一步阅读的资源:
- OpenRouter API 快速入门指南 OpenRouter 服务提供商路由文档
继续探索吧!
Bala Priya 是一位基于印度的开发者、教育者和技术作家。她撰写关于编程、数据科学、机器学习和人工智能的内容,专注于将复杂的技术概念转化为实用且易于理解的形式。她创建的教程、操作指南和深度解析帮助开发者构建应用、解决问题并理解复杂的概念。她的技术兴趣包括大型语言模型应用、智能体人工智能、图算法、计算机视觉、可解释人工智能和机器学习系统。当她不写作或编程时,Bala 通常在阅读经典文学、史诗奇幻或科幻作品——身边总有一杯咖啡。她还喜欢谈论书籍、学习新事物,并与开发者社区分享所学内容。
更多相关内容
- OpenRouter:大型语言模型的统一接口
- 如何使用 Llama-Swap 在单台服务器上本地运行多个大型语言模型
- 5 种免费访问编码模型的方法
- 在 Python 中正确访问字典的方法
- ChatLLM 评测:厌倦了多个 AI 工具?这里有一个更智能的方案
- 使用 LiteLLM 为你的大型语言模型应用带来的优势
<hr class="grey-line"><br> <div><h3>我们推荐的 5 门免费课程</h3><br> </div>
Mailchimp for WordPress v4.14.1 - https://wordpress.org/plugins/mailchimp-for-wp/
/ Mailchimp for WordPress 插件
你可以从这里开始编辑。
如果评论已关闭。
<= 上一篇
#content end
<script type="text/javascript">kda_sid_write(kda_sid_n);</script>
最新文章
- 使用 OpenRouter 在 Python 应用中访问多个 AI 模型 这个开源模型能否击败 AI 检测器?让我们本地测试一下 哪些本地语言模型最适合哪些任务 Google Gemini Omni:它实际能做什么、成本如何以及与其他模型的对比 2026 年成为计算机视觉工程师的路线图 使用 OpenAI Agents SDK 在 Python 中构建你的第一个 AI 智能体
热门文章
- 5 个最适合 AI 智能体技能的 GitHub 仓库
- 数据科学家必备的 7 个高级 Python 设计模式
- 使用 OpenAI Agents SDK 在 Python 中构建你的第一个 AI 智能体
- 2026 年你应该尝试的 5 个免费 AI 编码智能体
- 开发者必备的 5 个 Docker 容器
- 可替代付费订阅的 7 个开源 AI 工具
- 2026 年你可以使用的 5 个免费 LLM API 服务提供商
- AI 软件克隆的兴起:为什么 REA 和 ArtCraft 正在病毒式传播
- Google 开源 Harness²:无需重新训练即可自我改进的 AI 智能体
- 使用 Scikit-LLM 进行命名实体识别
#content_wrapper end
© 2026
Guiding Tech 媒体
|
关于
联系方式
广告合作
隐私政策
服务条款
2026 年 10 月 28 日由 bala-priya 发布
blank
不,谢谢!
/.main_wrapper
<script defer type="text/javascript" src="https://s7.addthis.com/js/300/addthis_widget.js#pubid=gpsaddthis"></script>
noptimize
/noptimize