跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Python 调用通义千问 Qwen2.5 模型完整流程

通义千问 Qwen2.5 模型支持多种部署方式,包括本地推理与云端 API。了基于 Python 的集成流程,涵盖环境搭建、模型加载(Transformers)、流式生成、API 调用(DashScope/OpenAI 兼容)及函数调用能力。内容包含 vLLM 部署优化、参数配置详解及常见错误处理方案,适合开发者快速上手应用。

WenxuanMa发布于 2025/1/17更新于 2026/10/2499 浏览
Python 调用通义千问 Qwen2.5 模型完整流程

Qwen2.5 模型简介

1.1 模型概述

Qwen2.5 是阿里云推出的一款超大规模语言模型,基于达摩院在自然语言处理领域的研究积累。该系列采用了更先进的算法和优化的模型结构,能够更准确地理解和生成自然语言、代码及表格等文本。除了基础的文本生成和问答能力,Qwen2.5 还支持针对不同场景的定制化需求。

1.2 模型特点

  • 强大的归纳和理解能力:处理文本分类、生成、情感分析等多种 NLP 任务。
  • 高效的推理能力:在多个基准测试中表现优异,具备较强的竞争力。
  • 丰富的应用场景:适用于智能客服、内容生成、代码辅助等领域。
  • 灵活的定制化需求:支持扩展和定制,提供个性化服务。

1.3 模型版本分类

Qwen2.5 系列包含多个版本,用户可根据任务复杂度选择:

  • Qwen2.5-14B/32B:基础与增强版本,分别适用于中等及复杂任务。
  • Qwen2.5-Plus/Turbo:针对推理速度和成本优化,适合不同性能需求的场景。

环境准备

在开始之前,需确保 Python 环境已配置好必要的依赖库。

2.1 安装核心库

使用 pip 安装 PyTorch、Transformers 及 HTTP 请求库:

pip install torch transformers requests accelerate sentencepiece
  • torch:深度学习计算框架,支持 GPU 加速。
  • transformers:Hugging Face 提供的模型加载工具。
  • accelerate & sentencepiece:用于模型推理加速和分词处理。

2.2 获取模型资源

可通过 Hugging Face 下载模型文件,或直接通过代码自动缓存。

from transformers import AutoModel, AutoTokenizer
model_name = "Qwen/Qwen2.5-7B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)

若需手动下载 GGUF 格式文件(如 Qwen2.5-14B-Instruct-Q5_K_M.gguf),可使用 curl 命令获取。

模型加载与部署

3.1 加载模型与分词器

推荐使用 AutoModelForCausalLM 加载指令微调后的模型,并自动适配设备。

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "Qwen/Qwen2.5-7B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype="auto",
    device_map="auto"
)

device_map="auto" 会自动将模型层分配到可用的 CPU 或 GPU 上。

3.2 设备部署策略

如需显式指定设备,可结合 PyTorch 进行判断:

import torch
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

推理过程

4.1 构建输入数据

Qwen2.5 采用对话模板格式,需构建包含 system、user 角色的消息列表。

messages = [
    {"role": "system", "content": "请逐步推理,最终答案放入 \boxed{} 中。"},
    {"role": "user", "content": "Find the value of x that satisfies 4x + 5 = 6x + 7."}
]

4.2 生成输出

应用聊天模板后送入模型生成,注意处理 token 长度。

text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
model_inputs = tokenizer([text], return_tensors="pt").to(device)

generated_ids = model.generate(**model_inputs, max_new_tokens=512)
generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(response)

4.3 流式生成

对于实时反馈场景,可使用 TextStreamer 实现逐字输出。

from transformers import TextStreamer
streamer = TextStreamer(tokenizer, skip_special_tokens=True)
model.generate(**model_inputs, max_new_tokens=512, streamer=streamer)

API 调用方案

5.1 DashScope SDK 调用

阿里云 DashScope 提供了官方 SDK,便于集成。

from dashscope import Generation

Generation.api_key = "your_api_key_here"
response = Generation.call(
    model="qwen2.5-7b-instruct",
    messages=[{"role": "user", "content": "你好,通义千问!"}],
    max_tokens=100,
    temperature=0.7
)
print(response.output.text)

5.2 OpenAI 兼容接口

部分本地部署或第三方服务支持 OpenAI 协议,可直接复用相关客户端。

import requests

url = "http://localhost:8000/v1/chat/completions"
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer your_api_key_here"
}
data = {
    "model": "Qwen/Qwen2.5-7B-Instruct",
    "messages": [{"role": "user", "content": "请介绍大语言模型。"}],
    "temperature": 0.7,
    "max_tokens": 512
}
response = requests.post(url, headers=headers, json=data)
print(response.json()["choices"][0]["message"]["content"])

5.3 密钥管理

建议将 AccessKey ID 和 Secret 存储在环境变量中,避免硬编码在代码里。

import os
os.environ['ALIYUN_ACCESS_KEY_ID'] = 'your_access_key_id'
os.environ['ALIYUN_ACCESS_KEY_SECRET'] = 'your_access_key_secret'

部署与优化

6.1 vLLM 部署

vLLM 能显著提升推理吞吐量,适合高并发场景。

from vllm import LLM, SamplingParams

llm = LLM(model="path/to/qwen2.5")
sampling_params = SamplingParams(temperature=0.8, top_p=0.9)
prompts = ["Hello, how are you?"]
outputs = llm.generate(prompts, sampling_params)
for output in outputs:
    print(output.text)

6.2 SGLang 与 Ollama

SGLang 支持多种部署模式,Ollama 则适合本地快速运行。

# Ollama 示例
from ollama import Model
model = Model(model_path="qwen2.5")
response = model.generate(prompt="Hello", options={"temperature": 0.8})
print(response["response"])

6.3 多 GPU 分布式

对于超大参数模型,可使用 Distributed PyTorch 进行多卡并行。

import torch.distributed as dist
from torch.nn.parallel import DistributedDataParallel as DDP
# 初始化进程组并包裹模型

函数调用能力

Qwen2.5 支持通过特定模板触发外部函数调用,适用于需要实时数据或执行操作的场景。

7.1 Qwen-Agent 方式

使用 Qwen-Agent 框架可简化函数定义与调用流程。

from qwen_agent.llm import get_chat_model

llm = get_chat_model({
    "model": "Qwen/Qwen2.5-7B-Instruct",
    "model_server": "http://localhost:8000/v1",
    "api_key": "EMPTY"
})

functions = [{"name": "get_weather", "description": "查询天气", "parameters": {...}}]
messages = [{"role": "user", "content": "旧金山现在天气如何?"}]

for responses in llm.chat(messages=messages, functions=functions):
    if fn_call := responses.get("function_call"):
        # 执行实际函数逻辑并返回结果
        pass

7.2 Transformers 原生支持

利用 apply_chat_template 构建包含工具调用的输入。

text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
# 后续生成逻辑同上

常见问题排查

8.1 API 错误处理

网络波动或密钥失效常导致调用失败,建议增加重试机制。

from retry import retry

@retry(tries=3, delay=2)
def call_api(url, headers):
    response = requests.get(url, headers=headers)
    response.raise_for_status()
    return response.json()

8.2 性能优化

  • 缓存:对固定查询结果使用 lru_cache。
  • 批量处理:合并多个请求以减少网络开销。
  • 异步 IO:使用 aiohttp 处理高并发请求。

8.3 参数调优

  • temperature:控制随机性,范围 [0, 2)。
  • top_p:核采样阈值,影响多样性。
  • max_tokens:限制生成长度。

参考示例

以下是一个完整的本地推理脚本,整合了加载、推理与输出。

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "Qwen/Qwen2.5-7B-Instruct"
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype="auto", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)

prompt = "请给我一个关于大型语言模型的简短介绍。"
messages = [{"role": "user", "content": prompt}]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)

model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(**model_inputs, max_new_tokens=512)
generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

print(response)

目录

  1. Qwen2.5 模型简介
  2. 1.1 模型概述
  3. 1.2 模型特点
  4. 1.3 模型版本分类
  5. 环境准备
  6. 2.1 安装核心库
  7. 2.2 获取模型资源
  8. 模型加载与部署
  9. 3.1 加载模型与分词器
  10. 3.2 设备部署策略
  11. 推理过程
  12. 4.1 构建输入数据
  13. 4.2 生成输出
  14. 4.3 流式生成
  15. API 调用方案
  16. 5.1 DashScope SDK 调用
  17. 5.2 OpenAI 兼容接口
  18. 5.3 密钥管理
  19. 部署与优化
  20. 6.1 vLLM 部署
  21. 6.2 SGLang 与 Ollama
  22. Ollama 示例
  23. 6.3 多 GPU 分布式
  24. 初始化进程组并包裹模型
  25. 函数调用能力
  26. 7.1 Qwen-Agent 方式
  27. 7.2 Transformers 原生支持
  28. 后续生成逻辑同上
  29. 常见问题排查
  30. 8.1 API 错误处理
  31. 8.2 性能优化
  32. 8.3 参数调优
  33. 参考示例

更多推荐文章

查看全部
  • C++ 输入输出操作详解:从基础流到文件处理
  • FPGA 开发环境搭建:Quartus II 13.1 与 ModelSim 安装配置指南
  • 深度解析Python.NET:C#调用Python函数的5个关键陷阱
  • DeepFace 结合 OpenCV 实现实时情绪分析
  • 英伟达GTC 2026:黄仁勋发布新推理芯片与Rubin架构,AI智能体时代开启
  • OpenClaw 集成飞书机器人配置与部署
  • Ubuntu 22.04/24.04 安装 ROS2 教程(Humble / Jazzy)
  • 堆排序算法详解
  • 上手 Git:VSCode + Gitee 实战指南
  • 《Agent Runtime 工程化》为什么你的 Agent Demo 永远上不了生产?
  • Copilot Pro 使用指南:模型选择与配额管理策略
  • VS Code 远程连接服务器后 GitHub Copilot 无法使用的解决方案
  • Unity-MCP 实战指南:用 AI 直接操控 Unity 编辑器
  • DeepSeek 各版本说明与优缺点分析
  • 前端监控实践:错误、性能与用户行为追踪
  • Stable Diffusion 秋叶 ComfyUI 整合包部署指南
  • llama.cpp 本地部署性能调优:从启动瓶颈到推理效率优化
  • 黑客技术零基础入门学习指南
  • 前端文件上传处理最佳实践与优化方案
  • AI 绘画报错:CheckpointLoaderSimple 模型缺失修复

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online