Qwen2.5-7B-Instruct代码实例:Python调用vLLM API + Chainlit UI二次开发

张开发
2026/4/16 12:22:31 15 分钟阅读

分享文章

Qwen2.5-7B-Instruct代码实例:Python调用vLLM API + Chainlit UI二次开发
Qwen2.5-7B-Instruct代码实例Python调用vLLM API Chainlit UI二次开发1. 项目概述与核心价值今天我们来聊聊如何用Python快速搭建一个基于Qwen2.5-7B-Instruct模型的智能对话应用。这个方案结合了vLLM的高效推理能力和Chainlit的简洁界面让你在10分钟内就能拥有自己的AI助手。为什么选择这个方案部署简单vLLM提供了一键式模型服务无需复杂配置界面友好Chainlit让Web界面开发变得像写Python脚本一样简单性能优秀Qwen2.5-7B-Instruct在编程和数学任务上表现突出多语言支持支持中文、英文等29种语言适合各种应用场景这个教程特别适合想要快速验证AI想法、构建原型或者学习大模型集成的开发者。即使你没有深厚的前端经验也能轻松上手。2. 环境准备与依赖安装在开始之前我们需要准备好运行环境。以下是所需的软件和库系统要求Python 3.8或更高版本至少16GB内存推荐32GBNVIDIA GPU推荐RTX 3090或更高安装必要的Python包# 创建虚拟环境可选但推荐 python -m venv qwen-env source qwen-env/bin/activate # Linux/Mac # 或者 qwen-env\Scripts\activate # Windows # 安装核心依赖 pip install vllm pip install chainlit pip install requests验证安装import vllm import chainlit import requests print(所有依赖安装成功)如果上面的代码能正常运行说明环境已经准备就绪。接下来我们开始部署模型服务。3. vLLM模型服务部署vLLM是一个高效的大语言模型推理引擎它能显著提升生成速度并降低内存使用。我们来部署Qwen2.5-7B-Instruct模型服务。启动vLLM服务# 使用以下命令启动模型服务 python -m vllm.entrypoints.api_server \ --model Qwen/Qwen2.5-7B-Instruct \ --host 0.0.0.0 \ --port 8000 \ --dtype auto这个命令会做以下几件事从Hugging Face下载Qwen2.5-7B-Instruct模型首次运行需要下载时间启动一个HTTP API服务在8000端口自动选择合适的数据类型来优化性能等待模型加载 模型加载需要一些时间具体取决于你的网络速度和硬件性能。当你在终端看到类似下面的输出时说明服务已经就绪INFO 07-15 14:30:12 api_server.py:140] Starting API server... INFO 07-15 14:32:45 api_server.py:150] Model loaded successfully INFO 07-15 14:32:45 api_server.py:155] API server ready at http://0.0.0.0:8000测试API服务 服务启动后我们可以用简单的Python代码测试一下import requests # 测试API是否正常 response requests.get(http://localhost:8000/v1/models) print(API状态:, response.status_code) print(模型信息:, response.json())如果返回状态码200和模型信息说明vLLM服务已经正常运行。4. Chainlit前端界面开发Chainlit是一个专门为AI应用设计的Python框架让你用很少的代码就能创建漂亮的Web界面。我们来构建一个简单的聊天界面。创建Chainlit应用 创建一个名为app.py的文件添加以下代码import chainlit as cl import requests import json # vLLM API配置 VLLM_API_URL http://localhost:8000/v1/chat/completions cl.on_chat_start async def start_chat(): # 初始化聊天设置 await cl.Message( content你好我是基于Qwen2.5-7B-Instruct的AI助手有什么可以帮你的吗, authorAI助手 ).send() cl.on_message async def main(message: cl.Message): # 显示用户消息 user_msg cl.Message(content, author用户) await user_msg.send() # 准备API请求 payload { model: Qwen/Qwen2.5-7B-Instruct, messages: [ {role: system, content: 你是一个有帮助的AI助手用中文回答用户问题。}, {role: user, content: message.content} ], max_tokens: 1024, temperature: 0.7 } # 发送请求到vLLM API try: response requests.post( VLLM_API_URL, jsonpayload, headers{Content-Type: application/json} ) if response.status_code 200: result response.json() ai_response result[choices][0][message][content] # 显示AI回复 await cl.Message( contentai_response, authorAI助手 ).send() else: await cl.Message( contentf请求失败状态码: {response.status_code}, author系统 ).send() except Exception as e: await cl.Message( contentf发生错误: {str(e)}, author系统 ).send()启动Chainlit应用# 启动Chainlit界面 chainlit run app.py -w这个命令会启动一个本地Web服务器通常在http://localhost:8001。打开浏览器访问这个地址就能看到聊天界面了。5. 完整代码示例与功能扩展现在我们把所有代码整合起来并添加一些实用功能。完整的app.py代码import chainlit as cl import requests import json from typing import Dict, List # 配置参数 VLLM_API_URL http://localhost:8000/v1/chat/completions MODEL_NAME Qwen/Qwen2.5-7B-Instruct class QwenChatBot: def __init__(self): self.conversation_history [] async def send_to_vllm(self, user_input: str) - str: 发送请求到vLLM API并获取回复 # 添加当前对话到历史 self.conversation_history.append({role: user, content: user_input}) # 构建请求数据保留最近10轮对话 recent_history self.conversation_history[-10:] if len(self.conversation_history) 10 else self.conversation_history messages [ {role: system, content: 你是一个有帮助的AI助手用中文回答用户问题。} ] recent_history payload { model: MODEL_NAME, messages: messages, max_tokens: 1024, temperature: 0.7, top_p: 0.9 } try: response requests.post( VLLM_API_URL, jsonpayload, headers{Content-Type: application/json}, timeout30 ) if response.status_code 200: result response.json() ai_response result[choices][0][message][content] # 添加AI回复到历史 self.conversation_history.append({role: assistant, content: ai_response}) return ai_response else: return fAPI请求失败状态码: {response.status_code} except requests.exceptions.Timeout: return 请求超时请稍后再试 except Exception as e: return f发生错误: {str(e)} # 创建全局聊天机器人实例 chat_bot QwenChatBot() cl.on_chat_start async def start_chat(): # 欢迎消息 welcome_msg 欢迎使用Qwen2.5-7B-Instruct聊天助手 我可以帮助你 - 回答各种知识问题 - 协助编程和代码编写 - 进行多语言翻译 - 生成创意内容 请随时向我提问 await cl.Message(contentwelcome_msg, authorAI助手).send() cl.on_message async def handle_message(message: cl.Message): # 显示用户消息 user_msg cl.Message(contentmessage.content, author用户) await user_msg.send() # 显示思考中的状态 thinking_msg cl.Message(content思考中..., authorAI助手) await thinking_msg.send() # 获取AI回复 ai_response await chat_bot.send_to_vllm(message.content) # 更新消息内容 thinking_msg.content ai_response await thinking_msg.update() cl.on_chat_end async def end_chat(): # 清理资源 chat_bot.conversation_history.clear()功能扩展建议 如果你想进一步扩展这个应用可以考虑添加以下功能文件上传支持让用户上传文档并进行问答对话历史保存将聊天记录保存到数据库多模型切换支持切换不同的AI模型流式输出实现打字机效果的逐字输出用户认证添加登录和权限管理6. 常见问题与解决方案在开发和使用过程中你可能会遇到一些问题。这里列出了一些常见问题及其解决方法问题1vLLM服务启动失败# 错误信息CUDA out of memory # 解决方法减少批处理大小或使用更小的模型 python -m vllm.entrypoints.api_server \ --model Qwen/Qwen2.5-7B-Instruct \ --host 0.0.0.0 \ --port 8000 \ --dtype auto \ --max-num-seqs 4 # 减少并发数问题2Chainlit连接超时# 在代码中添加重试机制 import time from retrying import retry retry(stop_max_attempt_number3, wait_fixed2000) def call_vllm_api(payload): response requests.post(VLLM_API_URL, jsonpayload, timeout30) return response问题3模型响应速度慢# 调整生成参数优化速度 payload { model: MODEL_NAME, messages: messages, max_tokens: 512, # 减少生成长度 temperature: 0.7, top_p: 0.9, stream: True # 启用流式输出 }问题4内存不足如果遇到内存不足的问题可以尝试以下优化使用--dtype half来减少内存使用启用量化支持如果vLLM版本支持增加系统交换空间7. 总结通过这个教程我们成功搭建了一个基于Qwen2.5-7B-Instruct模型的智能对话应用。这个方案有以下几个优点技术亮点使用vLLM提供高性能的模型推理服务通过Chainlit快速构建美观的Web界面完整的Python实现代码简洁易懂支持多轮对话和历史记录实用价值快速原型开发适合验证AI想法和概念学习工具帮助理解大模型集成的基本原理可扩展性强可以轻松添加新功能和集成其他服务下一步建议 如果你想要进一步探索可以考虑尝试不同的Qwen2.5模型尺寸如14B、72B版本集成其他AI服务如语音识别、图像生成部署到云服务器提供公开访问添加用户管理和对话历史功能这个项目展示了如何用现代AI工具链快速构建实用应用希望它能成为你AI开发之旅的一个良好起点。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章