Python 调用大模型完整方案
Python 调用大模型完整全方案(4大类场景,从极简开箱到私有化本地部署,覆盖你AIOps场景)
分类总览
- API调用公有云模型(通义千问/文心一言/GPT/DeepSeek,零显卡,最快上手)
- 调用开源模型推理服务(vLLM/Ollama 封装HTTP接口,本地GPU部署后远程调用,生产主流)
- 本地直接加载模型(Transformers原生)(单脚本跑模型,调试、RAG开发)
- 轻量化一键工具 Ollama(极简本地运行,无需配置CUDA,适合测试)
一、方式1:调用云厂商大模型API(无GPU,纯网络请求)
所有厂商统一风格:HTTP请求 + API Key,Python用requests调用,兼容OpenAI格式。
示例1:兼容OpenAI接口(DeepSeek/通义千问/智谱都支持)
安装依赖
pip install openai
代码
from openai import OpenAI
# 初始化客户端,替换为实际 key和厂商地址
client = OpenAI(
api_key="sk-xxxxxxxxxxxxxxxxxxxx",
base_url="https://api.deepseek.com/v1" # 不同厂商更换地址
)
def llm_chat(prompt: str):
resp = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "你是专业SRE运维专家,回答简洁"},
{"role": "user", "content": prompt}
],
temperature=0.1, # 越低回答越稳定,运维场景设0~0.3
max_tokens=1024
)
return resp.choices[0].message.content
# 测试:AIOps运维提问
res = llm_chat("GPU XID 79错误是什么原因,如何修复")
print(res)
主流厂商base_url对照
- DeepSeek:
https://api.deepseek.com/v1 - 阿里通义:
https://dashscope.aliyuncs.com/compatible-mode/v1 - 智谱AI:
https://open.bigmodel.cn/api/paas/v4 - OpenAI:
https://api.openai.com/v1
示例2:原生requests不依赖SDK
import requests
import json
API_KEY = "xxx"
URL = "https://api.deepseek.com/v1/chat/completions"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
data = {
"model": "deepseek-chat",
"messages": [{"role":"user","content":"解释K8s Operator作用"}]
}
res = requests.post(URL, headers=headers, json=data)
print(res.json()["choices"][0]["message"]["content"])
二、方式2:本地GPU部署推理服务(vLLM)+Python远程调用(生产推荐,AIOps方案使用)
流程
- GPU服务器部署vLLM,启动OpenAI兼容HTTP服务
- 任意机器Python通过OpenAI SDK调用,支持批量、流式、多卡并行
步骤1:服务端启动vLLM(GPU机器执行)
pip install vllm
# 启动Qwen14B 4bit量化服务,端口8000
vllm serve Qwen/Qwen-14B-Chat-AWQ \
--quantization awq \
--gpu-memory-utilization 0.9 \
--port 8000 \
--host 0.0.0.0
步骤2:Python客户端调用(任意机器)
from openai import OpenAI
# 指向本地vLLM服务地址
client = OpenAI(
api_key="dummy", # vLLM本地服务随便填
base_url="http://GPU服务器IP:8000/v1"
)
def ask_agent(question):
r = client.chat.completions.create(
model="Qwen/Qwen-14B-Chat-AWQ",
messages=[
{"role":"system","content":"运维AIOps智能助手,分析GPU、K8s故障"},
{"role":"user","content": question}
],
stream=False # True开启流式逐字返回
)
return r.choices[0].message.content
print(ask_agent("写一段dcgm python代码读取GPU温度"))
流式输出(实时打印回答,聊天机器人必备)
stream = client.chat.completions.create(
model="Qwen/Qwen-14B-Chat-AWQ",
messages=[{"role":"user","content":"介绍反向传播"}],
stream=True
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
三、方式3:Transformers 本地直接加载模型(单脚本,调试/RAG开发)
不需要启动服务,Python脚本直接加载权重到GPU,适合本地测试、嵌入模型、RAG检索。
依赖安装
pip install torch transformers accelerate bitsandbytes sentencepiece
完整代码(4bit量化,24G单卡可跑Qwen14B)
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
# 4bit量化配置,减少显存占用
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_use_double_quant=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16
)
model_name = "Qwen/Qwen-14B-Chat"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
quantization_config=bnb_config,
device_map="auto", # 自动分配GPU
torch_dtype=torch.bfloat16
)
def local_llm(prompt: str):
messages = [
{"role": "system", "content": "运维专家"},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer([text], return_tensors="pt").to("cuda")
with torch.no_grad(): # 推理关闭梯度,省显存
outputs = model.generate(
**inputs,
max_new_tokens=800,
temperature=0.1
)
# 去除输入prompt,只打印新生成内容
res = tokenizer.decode(outputs[0][len(inputs["input_ids"][0]):], skip_special_tokens=True)
return res
print(local_llm("DCGM和pynvml区别"))
优缺点
- 优点:无网络、可自定义模型加载逻辑、方便微调、嵌入RAG
- 缺点:每次脚本启动要重新加载模型,多进程重复占用显存,不适合多服务并发
四、方式4:Ollama 极简本地调用(新手测试,一行启动模型)
1. 安装Ollama,拉取模型
# 终端拉取7B模型
ollama pull qwen:14b
# 后台自动启动服务 localhost:11434
2. Python调用
pip install ollama
import ollama
resp = ollama.chat(
model="qwen:14b",
messages=[{"role": "user", "content":"解释K8s Operator开发流程"}]
)
print(resp["message"]["content"])
- 优势:自动管理GPU显存、量化、依赖,零配置;
- 劣势:生产大规模集群不推荐,并发性能弱于vLLM。
五、四种方案适用场景对比(贴合AIOps项目)
| 方案 | 硬件要求 | 并发能力 | 适用场景 |
| 云API调用 | 不需要GPU | 高,按量付费 | 快速原型、无GPU测试环境 |
| vLLM推理服务 | GPU(A100/4090 24G+) | 极高,支持多并发批量 | 生产AIOps平台、SRE Agent后端 |
| Transformers本地加载 | GPU | 单脚本单并发 | 本地调试、RAG向量检索、模型微调实验 |
| Ollama | GPU | 低 | 个人学习、临时测试 |
六、拓展:集成进SRE-Agent(LangChain/LangGraph)
你之前做运维Agent框架,统一封装LLM调用层,切换模型不用改业务代码:
pip install langchain langchain-openai
from langchain_openai import ChatOpenAI
# 统一封装,切换vLLM/云端API只改参数
def get_llm():
return ChatOpenAI(
model="Qwen/Qwen-14B-Chat-AWQ",
base_url="http://127.0.0.1:8000/v1",
api_key="dummy",
temperature=0
)
llm = get_llm()
res = llm.invoke("自动分析GPU OOM故障")
print(res.content)
结合LangGraph即可实现具备工具调用、故障排查能力的运维Agent。
七、常见踩坑
- 本地模型OOM显存不足:开启4/8bit量化、
device_map="auto"、减小max_new_tokens; - vLLM调用404:检查端口、host是否0.0.0.0、base_url末尾带
/v1; - 推理速度慢:使用vLLM替代原生Transformers,开启AWQ量化;
- 云端API超时:增加timeout,批量拆分长请求。
