AI

Python 调用大模型完整方案

·13 分钟阅读·4852 字

Python 调用云厂商 API、本地推理服务和 Agent 编排的大模型接入方案

📋 目录

Python 调用大模型完整方案

Python 调用大模型完整全方案(4大类场景,从极简开箱到私有化本地部署,覆盖你AIOps场景)

分类总览

  1. API调用公有云模型(通义千问/文心一言/GPT/DeepSeek,零显卡,最快上手)
  2. 调用开源模型推理服务(vLLM/Ollama 封装HTTP接口,本地GPU部署后远程调用,生产主流)
  3. 本地直接加载模型(Transformers原生)(单脚本跑模型,调试、RAG开发)
  4. 轻量化一键工具 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方案使用)

流程

  1. GPU服务器部署vLLM,启动OpenAI兼容HTTP服务
  2. 任意机器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向量检索、模型微调实验
OllamaGPU低个人学习、临时测试

六、拓展:集成进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。


七、常见踩坑

  1. 本地模型OOM显存不足:开启4/8bit量化、device_map="auto"、减小max_new_tokens;
  2. vLLM调用404:检查端口、host是否0.0.0.0、base_url末尾带/v1;
  3. 推理速度慢:使用vLLM替代原生Transformers,开启AWQ量化;
  4. 云端API超时:增加timeout,批量拆分长请求。
Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro