当前位置: 首页 > news >正文

告别 OpenAI SDK:如何使用 Python requests 库调用大模型 API(例如百度的ernie-4.5-turbo)

在许多开发环境中,由于网络限制、依赖冲突或追求轻量化等原因,我们可能无法或不愿直接使用官方提供的 openai Python 包。但这并不意味着我们无法与 OpenAI 兼容的大模型 API 进行交互。本文将详细介绍如何使用 Python 中无处不在的 requests 库,来完成对大模型服务的非流式(一次性)调用。

背景

当我们需要与一个遵循 OpenAI API 规范的语言模型(例如 GPT 系列或像文心一言这样提供兼容接口的模型)进行通信时,requests 库提供了一种最直接、最底层的控制方式。我们只需要手动构造 HTTP 请求,就能实现与官方 SDK 相同的功能。

本文将以一个具体的非流式(stream=False)调用为例,展示从构建请求到解析响应的全过程。

准备工作

在开始之前,请确保你已经安装了 requests 库。如果没有,可以通过 pip 轻松安装

  1. API 端点 URL (Endpoint URL):这是你要请求的服务器地址。
  2. API 密钥 (API Key):用于身份验证的凭证。

分步实现

第一步:导入库与定义常量

我们首先导入 requestsjson 库,并定义好 API 的基本信息。

注意: 直接在代码中硬编码 API Key 是一个非常不安全的做法。在生产环境中,强烈建议使用环境变量来管理此类敏感信息。

import requests
import json
import os# --- 安全地获取敏感信息 ---
# 建议从环境变量中读取 API Key
# 例如: export MY_API_KEY="你的API Key"
API_KEY = os.getenv("MY_API_KEY", "YOUR_API_KEY_HERE") 
# API 服务的基础 URL
BASE_URL = "https://aistudio.baidu.com/llm/lmapi/v3" # 此处以 aistudio 为例# 拼接成完整的请求 URL
API_URL = f"{BASE_URL}/chat/completions"

第二步:构造 HTTP 请求头 (Headers)

请求头包含了元数据,其中最重要的是 Content-TypeAuthorization

  • Content-Type: application/json:告诉服务器我们发送的数据是 JSON 格式。
  • Authorization: Bearer YOUR_API_KEY:这是 OpenAI 兼容 API 标准的身份验证方式。
headers = {'Content-Type': 'application/json','Authorization': f'Bearer {API_KEY}'
}

第三步:构造请求体 (Payload)

请求体是我们要发送给 API 的核心数据,它是一个 JSON 对象。我们将模型的参数,如模型名称、对话历史、温度等,都放在这个对象里。

对于非流式请求,请确保 stream 参数为 False 或直接省略。

# 构造请求体数据
data = {"model": "ernie-4.5-turbo-128k-preview","messages": [{"role": "user","content": "你好,请问你是谁?"},{"role": "assistant","content": "您好,我是一个AI大模型。"},{"role": "user","content": "请用 Python 写一个简单的 Hello World 程序。"}],"stream": False,  # 关键:设置为 False 或省略此行以进行非流式请求# 其他可选参数"temperature": 0.8,"top_p": 0.8,"max_completion_tokens": 1024,
}

第四步:发送请求并处理响应

一切准备就绪后,我们使用 requests.post() 方法发送请求。由于是非流式请求,程序会在此处阻塞,直到服务器处理完成并返回完整的响应。

一个健壮的程序应该包含完善的错误处理。

try:# 发送 POST 请求,requests 会自动将 data 字典转为 JSON 字符串response = requests.post(API_URL, headers=headers, json=data)# 检查 HTTP 状态码,如果请求失败(如 4xx, 5xx),则会抛出异常response.raise_for_status()# 将返回的 JSON 响应解析为 Python 字典response_data = response.json()# 从响应中提取模型生成的内容# 非流式响应的路径通常是 choices[0].message.contentif response_data.get("choices"):message_content = response_data["choices"][0]["message"]["content"]print("模型回答:")print(message_content)else:print("未能获取到有效的回答,服务器响应如下:")print(response_data)except requests.exceptions.RequestException as e:print(f"网络请求时发生错误: {e}")
except json.JSONDecodeError:print("无法解析服务器响应为 JSON 格式。")print("服务器原始响应:", response.text)
except KeyError:print("响应的 JSON 结构不符合预期,无法找到所需内容。")print("服务器原始响应:", response_data)

运行以上代码,如果一切正常,你将一次性看到模型生成的完整回答。

输出结果:

总结

通过使用 requests 库,我们完全绕开了对 openai SDK 的依赖,实现了与大模型 API 的直接通信。这种方法的优点是:

  • 零额外依赖requests 几乎是 Python 环境的标配。
  • 完全控制:你可以精细控制请求的每一个细节,包括超时、代理等。
  • 环境通用:适用于任何不支持特定 SDK 的受限环境。


文章转载自:

http://wc8oi7qa.qypjk.cn
http://LtR4yHf6.qypjk.cn
http://qH2kA5xI.qypjk.cn
http://34sDSXHo.qypjk.cn
http://GK8ZZmPQ.qypjk.cn
http://xsjzqACS.qypjk.cn
http://AvWJCQZR.qypjk.cn
http://ZpQqo1QG.qypjk.cn
http://ZdGppdah.qypjk.cn
http://9tiGdCcJ.qypjk.cn
http://87tT3jO6.qypjk.cn
http://JZLOsXsX.qypjk.cn
http://9wP4KMGa.qypjk.cn
http://CwObDEok.qypjk.cn
http://DTX4wTE7.qypjk.cn
http://erWozNA4.qypjk.cn
http://GqqVtipt.qypjk.cn
http://nXdrd0Wz.qypjk.cn
http://sFAzRXL5.qypjk.cn
http://kYLfqULQ.qypjk.cn
http://M7kOhO9P.qypjk.cn
http://1MgPEheY.qypjk.cn
http://hfVHHWDW.qypjk.cn
http://FbZjBzWo.qypjk.cn
http://WMSYcndf.qypjk.cn
http://X9W4glbr.qypjk.cn
http://BEvbD8Cc.qypjk.cn
http://cvZtL9uv.qypjk.cn
http://h9HJjReY.qypjk.cn
http://OfcQ14pC.qypjk.cn
http://www.dtcms.com/a/368104.html

相关文章:

  • 《sklearn机器学习——聚类性能指数》同质性,完整性和 V-measure
  • C#海康车牌识别实战指南带源码
  • 五、Docker 核心技术:容器数据持久化之数据卷
  • (计算机网络)DNS解析流程及两种途径
  • 3-8〔OSCP ◈ 研记〕❘ WEB应用攻击▸REST API枚举
  • Tabby使用sftp上传文件服务器ssh一直断开
  • 解密大语言模型推理:输入处理背后的数学与工程实践
  • python 自动化在web领域应用
  • FDTD_3 d mie_仿真
  • Electron 安全性最佳实践:防范常见漏洞
  • SAP ERP公有云详解:各版本功能对比与选型
  • Linux:进程信号理解
  • 深度学习:Dropout 技术
  • Linux 磁盘扩容及分区相关操作实践
  • 【前端】使用Vercel部署前端项目,api转发到后端服务器
  • 【ARDUINO】ESP8266的AT指令返回内容集合
  • Netty从0到1系列之Netty整体架构、入门程序
  • 实战记录:H3C路由器IS-IS Level-1邻居建立与路由发布
  • iOS 抓包工具有哪些?常见问题与对应解决方案
  • 【Linux】网络安全管理:SELinux 和 防火墙联合使用 | Redhat
  • Boost搜索引擎 网络库与前端(4)
  • 服务器硬盘“Unconfigured Bad“状态解决方案
  • 警惕!你和ChatGPT的对话,可能正在制造分布式妄想
  • 中天互联:AI 重塑制造,解锁智能生产新效能​
  • 如何制造一个AI Agent:从“人工智障”到“人工智能”的奇幻漂流
  • 鼓励员工提出建议,激发参与感——制造企业软件应用升级的密钥
  • 2025世界职校技能大赛总决赛争夺赛汽车制造与维修赛道比赛资讯
  • LeetCode 240: 搜索二维矩阵 II - 算法详解(秒懂系列
  • [特殊字符] AI时代依然不可或缺:精通后端开发的10个GitHub宝藏仓库
  • 【MFC】对话框节点属性:Condition(条件)