跳到主要内容Python 调用大模型(LLM)的四种方式 | 极客日志PythonAI算法
Python 调用大模型(LLM)的四种方式
使用 Python 调用大语言模型(LLM)的四种主要方式:原生 HTTP 请求、封装式 API 调用、OpenAI SDK 以及传统 OpenAI 库。文章对比了各方式的灵活性、易用性和适用场景,帮助开发者根据项目需求选择合适的集成方案。
监控大屏11K 浏览 前言
随着大语言模型(LLM)在各类任务中的强大表现,从问答系统到代码生成,从写作助手到数据分析,越来越多的开发者和研究人员希望将这些模型集成到自己的工作流程或产品中。Python 作为最主流的 AI 开发语言,提供了丰富的生态工具,能够灵活、高效地调用各类大模型。
本篇博客旨在帮助开发者掌握不同的 API 调用方式来与各种 LLM 服务进行交互。本文分析了四种不同的 LLM API 调用脚本,涵盖了从最基础的 HTTP 请求到高级 SDK 的使用方法。
1. 原生 HTTP 请求方式
1.1 核心特点
- 使用 Python 的
requests 库直接发送 HTTP 请求
调用本地部署的 Qwen 模型采用 OpenAI 兼容的 API 格式1.2 关键代码分析
data = {
"model": "/models/Qwen2___5-32B-Instruct-AWQ",
"messages": [
{"role": "user", "content": "分析当前全球经济形势,并提出你的见解"}
],
"max_tokens": 2048,
"temperature": 0.7,
"top_k": 1,
"top_p": 0.75,
}
1.3 优势和适用场景
- 灵活性最高,可以完全自定义请求参数
- 不依赖特定 SDK,减少依赖
- 适合需要精确控制请求细节的场景
- 自定义 LLM 服务调用
- 需要特殊请求头或认证方式
- 对性能要求较高的生产环境
1.4 完整代码
import requests
import json
url = "http://127.0.0.1:6790/v1/chat/completions"
headers = {
"Content-Type": "application/json",
}
data = {
"model": "/models/Qwen2___5-32B-Instruct-AWQ",
"messages": [
{"role": "user", "content": "分析当前全球经济形势,并提出你的见解"}
],
"max_tokens": 2048,
"temperature": 0.7,
"top_k": 1,
"top_p": 0.75,
}
response = requests.post(url, headers=headers, data=json.dumps(data))
if response.status_code == 200:
response_data = response.json()
print(response_data['choices'][0]['message']['content'])
else:
print(f"请求失败,状态码:{response.status_code}")
print(response.text)
2. 封装式 API 调用
2.1 核心特点
- 将 API 调用逻辑封装成函数
- 支持多种模型选择(qwen2.5_32b_awq, qwen2.5_7b_awq)
- 使用 completion API 而非 chat completion API
2.2 关键代码分析
def llm_inference(prompt_list: list, model_name: str):
if model_name == "qwen2.5_32b_awq":
llm_server = {
"server_url": "http://127.0.0.1:6790/v1/completions",
"path": "/psd/models/Qwen2___5-32B-Instruct-AWQ"
}
2.3 优势和适用场景
- 代码复用性好,便于维护
- 支持多模型切换
- 统一的错误处理机制
- 需要频繁切换不同模型的场景
- 批量处理多个请求
- 作为其他项目的依赖模块
2.4 完整代码
import requests
import json
def llm_inference(prompt_list: list, model_name: str):
if model_name == "qwen2.5_32b_awq":
llm_server = {
"server_url": "http://127.0.0.1:6790/v1/completions",
"path": "/models/Qwen2___5-32B-Instruct-AWQ"
}
elif model_name == "qwen2.5_7b_awq":
llm_server = {
"server_url": "http://127.0.0.1:6791/v1/completions",
"path": "/models/Qwen2___5-7B-Instruct-AWQ"
}
else:
llm_server = {
"server_url": "http://127.0.0.1:6790/v1/completions",
"path": "/models/Qwen2___5-32B-Instruct-AWQ"
}
rewrite_server_url = llm_server["server_url"]
rewrite_server_headers = {'Content-Type': 'application/json'}
rewrite_server_data = {
'model': llm_server["path"],
'prompt': prompt_list,
'max_tokens': 4096,
'top_k': 1,
'top_p': 0.75,
'temperature': 0,
'stop': ["<|im_end|>"]
}
response = requests.post(rewrite_server_url, headers=rewrite_server_headers, data=json.dumps(rewrite_server_data))
return response.json()
if __name__ == "__main__":
prompt_list = [
f"<|im_start|>system\n{'你是围城智能机器人'}<|im_end|>\n<|im_start|>user\n{'你是谁'}<|im_end|><|im_start|>assistant\n"
]
answer = llm_inference(prompt_list, "qwen2.5_32b_awq")
for i in range(len(prompt_list)):
print(answer['choices'][i]['text'])
3. OpenAI SDK 方式
3.1 核心特点
- 使用官方的 OpenAI Python SDK
- 调用第三方 API 服务
- 支持多种模型(GPT-4o, Gemini-2.5-pro 等)
3.2 关键代码分析
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
response = client.chat.completions.create(
model=model_name,
messages=messages,
temperature=0.0
)
3.3 优势和适用场景
- 使用官方 SDK,稳定性高
- 自动处理认证和请求格式
- 支持流式响应等高级功能
- 调用 OpenAI 官方或兼容 API
- 需要 SDK 提供的便利功能
- 快速原型开发
3.4 完整代码
""" 极简化的 API 请求测试脚本 只保留发送请求的核心功能 """
from openai import OpenAI
def send_test_request(client, model_name, test_message="im testing, response me latter 'test' only"):
""" 发送测试请求
Args:
client: OpenAI 客户端
model_name: 模型名称
test_message: 测试消息
Returns:
str: 响应内容
"""
messages = [{"role": "user", "content": "你叫什么名字!"}]
response = client.chat.completions.create(
model=model_name,
messages=messages,
temperature=0.0
)
print(f"Response: {response}")
return response.choices[0].message.content
if __name__ == "__main__":
openai_api_key = "YOUR_API_KEY"
openai_api_base = "https://www.api.com/v1"
model_name = "gpt-4o"
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
test_message = "你好"
try:
response_content = send_test_request(client, model_name, test_message)
print(f"Success! Response content: {response_content}")
except Exception as e:
print(f"Error: {e}")
4. 传统 OpenAI 库方式
4.1 核心特点
- 使用传统的
openai 库(非 SDK)
- 支持本地和远程 API 调用
- 简洁的 API 调用方式
4.2 关键代码分析
openai.api_key = "YOUR_API_KEY"
openai.api_base = "https://www.api.com/v1"
response = openai.ChatCompletion.create(
model=model_name,
messages=[{"role": "user", "content": "你叫什么名字!"}],
max_tokens=512,
temperature=0.7
)
4.3 优势和适用场景
- 代码简洁,易于理解
- 兼容性好,支持多种 API 服务
- 学习成本低
4.4 完整代码
import openai
openai.api_key = "YOUR_API_KEY"
openai.api_base = "https://www.chataiapi.com/v1"
model_name = "gemini-2.5-pro"
response = openai.ChatCompletion.create(
model=model_name,
messages=[{"role": "user", "content": "你叫什么名字!"}],
max_tokens=512,
temperature=0.7
)
print("response:", response)
print(response['choices'][0]['message']['content'])
5. 对比分析
| 特性 | llm_request.py | api_inference.py | llm_openai.py | llm_request_local.py |
|---|
| 灵活性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| 易用性 | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 可维护性 | ⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 功能丰富度 | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 学习成本 | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
总结
这四种调用方式各有特色,适用于不同的开发场景。开发者应该根据具体需求选择合适的方式:
- 追求灵活性:选择原生 HTTP 请求
- 追求可维护性:选择封装函数
- 追求功能丰富:选择 OpenAI SDK
- 追求简单易用:选择传统 OpenAI 库
无论选择哪种方式,都要注意 API 密钥的安全性和错误处理的完整性。在实际项目中,建议根据项目规模和团队技术栈做出合理选择。
微信扫一扫,关注极客日志
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online