Qwen3-1.7B与Flask集成:Web服务接口开发详细步骤
1. 背景介绍:为什么选择Qwen3-1.7B?
在当前大模型快速发展的背景下,轻量级、高响应速度的语言模型正成为构建本地化AI服务的首选。Qwen3(千问3)是阿里巴巴集团于2025年4月29日开源的新一代通义千问大语言模型系列,涵盖6款密集模型和2款混合专家(MoE)架构模型,参数量从0.6B至235B不等。其中,Qwen3-1.7B作为中等规模的密集型模型,在性能与资源消耗之间实现了良好平衡。
它不仅具备较强的语义理解与生成能力,还支持流式输出、思维链推理(CoT)等功能,非常适合部署在中低端GPU或边缘设备上运行。更重要的是,该模型可通过标准OpenAI兼容接口调用,极大简化了与现有框架(如LangChain、LlamaIndex)的集成过程。
本文将重点讲解如何将Qwen3-1.7B 模型与Flask 框架结合,搭建一个可对外提供服务的 Web API 接口,实现自然语言问答、内容生成等基础功能。
2. 环境准备与镜像启动
2.1 获取并启动预置镜像
为了快速部署 Qwen3-1.7B 模型,推荐使用 CSDN 提供的 AI 镜像环境。该镜像已预装 PyTorch、Transformers、vLLM 或 GGUF 加载器等相关依赖,并默认启动了 OpenAI 兼容的服务端口。
操作步骤如下:
- 登录 CSDN星图镜像广场,搜索
Qwen3相关镜像; - 选择包含
Qwen3-1.7B的 GPU 镜像进行部署; - 部署完成后,进入 JupyterLab 环境。
提示:确保你使用的镜像是启用了 vLLM 或 llama.cpp 类似推理引擎的服务模式,这样才能通过
/v1接口暴露 OpenAI 格式的 RESTful API。
2.2 验证本地服务是否正常运行
通常情况下,模型服务会以 FastAPI 启动在8000端口,地址形如:
https://gpu-pod69523bb78b8ef44ff14daa57-8000.web.gpu.csdn.net/v1你可以直接在浏览器访问此链接,查看是否返回 OpenAI 风格的健康检查信息(如{"data": [...]}),确认服务已就绪。
3. 使用 LangChain 调用 Qwen3-1.7B 模型
LangChain 是目前最流行的 LLM 应用开发框架之一,其设计允许开发者以统一方式对接多种模型后端。得益于 Qwen3 支持 OpenAI 接口协议,我们可以通过langchain_openai模块轻松接入。
3.1 安装必要依赖
如果你是在自定义环境中操作,请先安装 LangChain 及相关组件:
pip install langchain langchain-openai注意:部分旧版本可能需要使用
langchain_community中的替代模块,建议保持库版本更新。
3.2 编写调用代码
以下是一个完整的 Python 示例,展示如何初始化ChatOpenAI实例并与 Qwen3-1.7B 进行交互:
from langchain_openai import ChatOpenAI import os chat_model = ChatOpenAI( model="Qwen3-1.7B", temperature=0.5, base_url="https://gpu-pod69523bb78b8ef44ff14daa57-8000.web.gpu.csdn.net/v1", # 替换为你的实际Jupyter服务地址 api_key="EMPTY", # 当前服务无需真实密钥 extra_body={ "enable_thinking": True, # 启用思维链推理 "return_reasoning": True, # 返回中间思考过程 }, streaming=True, # 开启流式输出 ) # 发起一次简单对话 response = chat_model.invoke("你是谁?") print(response.content)参数说明:
| 参数 | 作用 |
|---|---|
model | 指定调用的模型名称,需与后端注册一致 |
temperature | 控制生成随机性,值越高越有创意 |
base_url | 实际部署的服务地址,注意端口号为8000 |
api_key | 此处设为"EMPTY"表示无需认证 |
extra_body | 扩展字段,用于启用高级功能(如 CoT) |
streaming | 是否开启逐字流式返回 |
执行上述代码后,你应该能看到类似如下输出:
我是通义千问3,阿里巴巴研发的大语言模型。我可以回答问题、创作文字,也能表达观点、玩游戏等。同时,如果开启了enable_thinking,部分实现还会返回详细的推理路径(具体取决于服务端支持情况)。
图:在 Jupyter 中成功调用 Qwen3-1.7B 并获得响应
4. 构建 Flask Web 接口
虽然 LangChain 适合做原型验证,但在生产场景中,我们需要将其封装成独立的 Web 服务接口,供前端或其他系统调用。接下来我们将基于 Flask 搭建一个简单的/chat接口。
4.1 项目结构规划
创建如下目录结构:
qwen3-flask-app/ ├── app.py ├── requirements.txt └── config.py4.2 配置文件config.py
# config.py MODEL_NAME = "Qwen3-1.7B" BASE_URL = "https://gpu-pod69523bb78b8ef44ff14daa57-8000.web.gpu.csdn.net/v1" API_KEY = "EMPTY" TEMPERATURE = 0.74.3 主应用app.py
from flask import Flask, request, jsonify from langchain_openai import ChatOpenAI from config import * app = Flask(__name__) # 初始化模型客户端 llm = ChatOpenAI( model=MODEL_NAME, temperature=TEMPERATURE, base_url=BASE_URL, api_key=API_KEY, extra_body={ "enable_thinking": True, "return_reasoning": True, }, streaming=False, # Web接口中可关闭流式,便于JSON返回 ) @app.route('/chat', methods=['POST']) def chat(): data = request.get_json() user_input = data.get('message', '').strip() if not user_input: return jsonify({'error': '请输入有效的问题'}), 400 try: response = llm.invoke(user_input) return jsonify({ 'input': user_input, 'output': response.content.strip(), 'model': MODEL_NAME }) except Exception as e: return jsonify({'error': f'请求失败: {str(e)}'}), 500 @app.route('/health', methods=['GET']) def health(): return jsonify({'status': 'ok', 'model': MODEL_NAME}), 200 if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True)4.4 安装依赖requirements.txt
Flask==3.0.3 langchain==0.2.11 langchain-openai==0.1.144.5 启动服务
在终端运行:
python app.py服务将在http://0.0.0.0:5000启动,你可以通过以下命令测试接口:
curl -X POST http://localhost:5000/chat \ -H "Content-Type: application/json" \ -d '{"message": "请介绍一下你自己"}'预期返回:
{ "input": "请介绍一下你自己", "output": "我是通义千问3,阿里巴巴研发的大语言模型……", "model": "Qwen3-1.7B" }5. 前端简易交互页面(可选)
为了让接口更直观可用,我们可以添加一个简单的 HTML 页面来发送请求。
5.1 创建templates/index.html
<!DOCTYPE html> <html> <head> <title>Qwen3-1.7B 对话界面</title> <style> body { font-family: Arial, sans-serif; padding: 20px; } #chat { border: 1px solid #ccc; height: 300px; overflow-y: scroll; margin-bottom: 10px; padding: 10px; } .user { color: blue; margin: 5px 0; } .bot { color: green; margin: 5px 0; } input, button { padding: 10px; margin: 5px; width: 70%; } </style> </head> <body> <h2>与 Qwen3-1.7B 聊天</h2> <div id="chat"></div> <input type="text" id="userInput" placeholder="输入你的问题..." /> <button onclick="send()">发送</button> <script> function send() { const input = document.getElementById("userInput"); const value = input.value.trim(); if (!value) return; const chat = document.getElementById("chat"); chat.innerHTML += `<div class="user">你: ${value}</div>`; fetch("/chat", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ message: value }) }) .then(res => res.json()) .then(data => { chat.innerHTML += `<div class="bot">Qwen3: ${data.output}</div>`; chat.scrollTop = chat.scrollHeight; }); input.value = ""; } // 回车触发发送 document.getElementById("userInput").addEventListener("keypress", e => { if (e.key === "Enter") send(); }); </script> </body> </html>5.2 修改 Flask 路由支持页面渲染
在app.py中增加:
from flask import render_template @app.route('/') def home(): return render_template('index.html')重启服务后访问http://localhost:5000即可看到图形化聊天界面。
6. 总结
本文详细介绍了如何将Qwen3-1.7B模型与Flask框架结合,构建一个可扩展的 Web 接口服务。整个流程包括:
- 利用 CSDN 星图镜像快速部署 Qwen3-1.7B;
- 通过 LangChain 的
ChatOpenAI接口调用远程模型; - 封装为 RESTful API,支持 POST 请求接收用户输入并返回模型回复;
- 可选地添加前端页面,提升用户体验。
这套方案具有以下优势:
- 低门槛:无需自行加载模型权重,利用已有服务即可快速接入;
- 高兼容性:基于 OpenAI 接口规范,未来可无缝迁移到其他支持该协议的模型;
- 易扩展:可在 Flask 中加入身份验证、限流、日志记录等企业级功能;
- 适合教学与原型开发:非常适合学生、开发者快速验证想法。
下一步你可以尝试:
- 添加流式 SSE 接口,实现“打字机”效果;
- 集成 RAG(检索增强生成),让模型回答基于私有知识库;
- 使用 Docker 容器化部署,提升服务稳定性。
无论你是想做一个智能客服、写作助手,还是自动化报告生成工具,这个基础架构都能为你提供强有力的支撑。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。