「实战指南」使用 Python 调用大模型(LLM)

目录

前言

1. 原生HTTP请求方式

1.1 核心特点

1.2 关键代码分析

1.3 优势和适用场景

 1.4 完整代码

2. 封装式API调用

2.1 核心特点

2.2 关键代码分析

2.3 优势和适用场景

2.4 完整代码 

3. OpenAI SDK方式

3.1 核心特点

3.2 关键代码分析

3.3 优势和适用场景

3.4 完整代码 

4. 传统OpenAI库方式

4.1 核心特点

4.2 关键代码分析

4.3 优势和适用场景

4.4 完整代码 

5. 对比分析

总结


前言

随着大语言模型(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 # 本地服务的 API 端点 url = "http://127.0.0.1:6790/v1/chat/completions" # 请求头 headers = { "Content-Type": "application/json", #"Authorization": "Bearer your_api_key" # 如果需要的话 } # 请求体 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, } # 发送 POST 请求 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 完整代码 

# -*- coding: utf-8 -*- # @Author : yuan # @Time : 2025/7/22 5:20 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"} # # prompt = f"<|im_start|>system\n{system_text}<|im_end|>\n<|im_start|>user\n{query_text}<|im_end|><|im_start|>assistant\n" 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()['choices'][0]['text'] 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") # print(answer) for i in range(len(prompt_list)): print(answer['choices'][i]['text']) 

3. OpenAI SDK方式

3.1 核心特点

- 使用官方的OpenAI Python SDK

- 调用第三方API服务(chataiapi.com)

- 支持多种模型(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 完整代码 

#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 极简化的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": [ # {"type": "text", "text": test_message} # ]} # ] # 构建消息列表 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__": # API配置 openai_api_key = "sk-WVoD66MR7b" openai_api_base = "https://www.api.com/v1" model_name = "gpt-4o" # gemini-2.5-pro gpt-4o Claude 3.5 Sonnet o3-mini # 初始化客户端 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 = "sk-WVoD66MR" 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 # 设置 API 密钥(如果本地服务需要) openai.api_key = "sk-WVoD66MR7bx" # 设置 API 基础 URL 为本地模型服务的地址 # openai.api_base = "http://127.0.0.1:6790/v1" openai.api_base = "https://www.chataiapi.com/v1" # 指定要使用的模型名称 # model_name = "/models/Qwen2___5-32B-Instruct-AWQ" 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密钥的安全性和错误处理的完整性。在实际项目中,建议根据项目规模和团队技术栈做出合理选择。

Read more

【开源工具】深度解析:Python+PyQt5打造微信多开神器 - 原理剖析与完整实现

【开源工具】深度解析:Python+PyQt5打造微信多开神器 - 原理剖析与完整实现

🚀【开源工具】深度解析:Python+PyQt5打造微信多开神器 - 原理剖析与完整实现 🌈 个人主页:创客白泽 - ZEEKLOG博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,热情源自每一个灵感闪现的夜晚。愿以开源之火,点亮前行之路。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多人哦 📖 前言 微信作为国民级IM工具,但官方始终未提供多开功能。本文将深入讲解如何利用Python+PyQt5开发跨平台微信多开助手,突破官方限制。不同于网上简单的多开脚本,本项目实现了: * 自动化路径探测 * 可视化操作界面 * 多模式多开机制 * 完整的异常处理体系 🎯 一、功能全景 1.1 核心功能矩阵 功能模块技术实现亮点智能路径探测注册表查询+全盘扫描支持99%的安装场景可视化交互PyQt5自定义UI组件媲美原生应用的体验多开引擎子进程管理+沙盒隔离支持三种多开模式配置持久化QSettings序列化自动记忆用户偏好 1.2 技术栈深度 图形界面PyQt5多线程搜索跨进程通信注册表操作子进程管理

By Ne0inhk
【Python基础:语法第一课】Python 基础语法详解:变量、类型、动态特性与运算符实战,构建完整的编程基础认知体系

【Python基础:语法第一课】Python 基础语法详解:变量、类型、动态特性与运算符实战,构建完整的编程基础认知体系

🎬 个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》 ⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平 🎬 艾莉丝的简介: 文章目录 * 1 ~> 常量和表达式 * 2 ~> 变量和类型 * 2.1 变量是什么 * 2.2 变量的语法 * 2.2.1 定义变量 * 2.2.2 使用变量 * 2.3 变量的类型:对于不同种类的变量作出区分 * 2.3.1 整数 * 2.

By Ne0inhk
【Python库和代码案例:第二课】一边写“鼓励师”给自己打气,一边写“学生管理”鞭策别人:Python拿捏了

【Python库和代码案例:第二课】一边写“鼓励师”给自己打气,一边写“学生管理”鞭策别人:Python拿捏了

🎬 个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录》 《Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享》 ⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平 🎬 艾莉丝的简介: 文章目录 * 3 ~> 第三方库 * 3.5 代码示例:“程序猿鼓励师” * 3.5.1 安装第三方依赖 * 3.5.2 准备音频文件 * 3.5.3 编写代码 * 3.5.4 改进代码 * 3.5.5 操作流程 * 3.5.

By Ne0inhk