资讯详情

资讯详情

从0到1:Windows 本地部署 Qwen3 + Flask 接口(RAG 学习路线第1周踩坑实录)

硬件i5-9300H / 16GB 内存 / GTX 16504GB 显存 系统WindowsPowerShell 关键词Ollama、Qwen3、Flask、虚拟环境、RAG 入门前言最近在转型做 AI 应用开发给自己定了一条 11 周的学习路线前 6 周手写 RAG 的每一个环节后 5 周补上 Dify/Coze、LangChain、Agent 等企业岗位常用的技能。这篇文章记录第 1 周的完整过程从装环境到跑通第一个接口包括我踩过的所有坑。如果你也是 Windows 小显存显卡希望能帮你少走弯路。一、学习路线与技术栈技术栈Qwen3 Embeddingbge Milvus bge-reranker Python Flask。阶段内容第 1 周环境搭建跑通本地模型和最小 Flask 接口第 2 周文档切片与向量化Embedding第 3 周向量数据库 Milvus Lite第 4 周Reranker 重排序第 5 周组装完整 RAG 流程第 6 周Flask 整合成完整应用第 7-11 周Dify/Coze、AI 编程工具、LangChain、Agent 与 Function Calling、进阶第 1 周目标安装 Ollama拉取 Qwen3 小模型在命令行跑通搭好 Python 虚拟环境写一个 Flask 接口实现“接收问题 → 调用本地模型 → 返回回答”。二、安装 OllamaOllama 是在本地运行大模型的工具一条命令就能下载并运行模型。浏览器打开官网ollama.com点击顶部的Download选择 Windows。有两种安装方式PowerShell 一行命令irm https://ollama.com/install.ps1 | iex或点击Download manually下载OllamaSetup.exe双击安装更适合新手。装完后重新打开一个终端验证ollama --version显示版本号就成功了。踩坑 1我一开始直接复制了带中文标点的网址结果打开的是 404 页面。网址后面紧跟中文逗号时有些界面会把逗号也算进链接。遇到 404直接去官网首页点 Download 即可。把模型存储位置改到 D 盘强烈建议Ollama 默认把模型存在C:\Users\用户名\.ollama\models。我的 C 盘只剩 29GB而后面要下 Qwen3、Embedding、Reranker加起来十几 GB所以趁还没下载先改位置新建文件夹D:\ollama\models。搜索“编辑系统环境变量”打开“环境变量”在用户变量里新建变量名OLLAMA_MODELS变量值D:\ollama\models完全退出 Ollama右下角托盘图标右键 Quit重新启动。三、安装 Python建议使用Python 3.12。后面要用到的 Milvus Lite、sentence-transformers 等库对 3.13 以上的版本适配可能还不完善。到 python.org 的 Downloads 页面下载 3.12 系列的Windows installer (64-bit)。安装时第一个界面最下面一定要勾选 “Add python.exe to PATH”再点 Install Now。装完后关掉所有终端重新打开验证python --version四、创建项目和虚拟环境踩坑 4PowerShell 默认落在C:\WINDOWS\system32在这里mkdir会提示“拒绝访问”。原因是 PowerShell 以管理员身份打开了。关掉用普通权限重新打开并把项目放到 D 盘。D: mkdir rag-learning cd rag-learning python -m venv venv venv\Scripts\activate pip install flask requests -i https://pypi.tuna.tsinghua.edu.cn/simple逐条解释D:PowerShell 里切换盘符直接输盘符即可不用cd。python -m venv venv创建虚拟环境两个 venv 都不能少。第一个是 Python 自带的模块名第二个是文件夹名。我一开始只打了前半截报错the following arguments are required: ENV_DIR。venv\Scripts\activate激活虚拟环境成功后提示符前会出现(venv)。pip install ... -i 清华镜像国内下载依赖更快。为什么要用虚拟环境每个项目一套独立的 Python 依赖互不冲突类似前端项目里各自的node_modules。如果激活时提示“禁止运行脚本”执行下面这条提示时输入YSet-ExecutionPolicy -Scope CurrentUser RemoteSigned安装完成后用pip list确认能看到Flask和requests就对了。五、拉取模型并在命令行跑通4GB 显存跑不动 8B 的模型所以先用Qwen3-1.7B约 1.4GB能完整放进显存速度快ollama pull qwen3:1.7b ollama run qwen3:1.7b出现后输入“你好”模型就能回答了。输入/bye退出。Qwen3 的“思考模式”你会发现模型回答前会先输出一大段Thinking... ...done thinking.这是 Qwen3 的思考模式先推理再给出答案。做问答时太慢、太啰嗦可以在聊天界面里关掉/set nothink # 关闭思考模式 /set think # 重新打开注意里只能和模型聊天不能运行python app.py这类命令要先/bye退出到 PowerShell。我就在这里犯过错。想确认显卡有没有用上在对话时另开终端运行ollama ps看PROCESSOR一栏是否显示100% GPU。六、写第一个 Flask 接口在D:\rag-learning下新建app.pyfrom flask import Flask, request, jsonify import requests app Flask(__name__) OLLAMA_URL http://localhost:11434/api/chat app.post(/ask) def ask(): q request.json.get(question, ) resp requests.post(OLLAMA_URL, json{ model: qwen3:1.7b, messages: [{role: user, content: q}], stream: False, think: False, options: {temperature: 0.7, top_p: 0.9} }) return jsonify({answer: resp.json()[message][content]}) if __name__ __main__: app.run(port5000, debugTrue)代码逻辑很简单Flask 起一个/ask接口收到问题后转发给本地 Ollama 的/api/chat再把模型的回答返回。几个参数的含义stream: False一次性返回完整回答流式输出留到后面再做。think: False关闭 Qwen3 的思考输出只返回最终回答。temperature控制随机性越低越稳定越高越发散。top_p核采样限制候选词的累计概率范围。踩坑 5cant open file app.py。报错的意思是文件不存在要么没创建要么当前目录不对。用dir确认一下app.py在不在当前目录。七、运行并测试窗口 1保持(venv)状态启动服务python app.py看到Running on http://127.0.0.1:5000就启动成功了。这个窗口会一直占用不要关也不要在里面输别的命令。窗口 2另开一个 PowerShell不需要进 venv作为“客户端”发请求Invoke-RestMethod -Uri http://localhost:5000/ask -Method Post -ContentType application/json -Body {question:用一句话解释RAG}此处贴测试结果截图看到answer里有回答就说明整条链路通了请求 → Flask → Ollama → Qwen3 → 返回。踩坑 6PowerShell 里的curl不是真正的 curl。它是Invoke-WebRequest的别名语法和网上教程里的 Linux curl 不一样所以这里用Invoke-RestMethod。八、踩坑汇总现象原因与处理官网打开 404链接带了中文标点从官网首页点 Downloadpython没反应应用执行别名占位程序拦截或漏勾 PATH搜到的 python 在企业微信目录里软件自带的内置 Python不要用自己装mkdir拒绝访问在 system32 里改用普通权限并切到 D 盘venv命令报ENV_DIR缺失少打了最后的文件夹名应为python -m venv venvactivate 禁止运行脚本Set-ExecutionPolicy -Scope CurrentUser RemoteSigned里运行 python 无效要先/bye退出聊天界面cant open file app.py文件没创建或目录不对用dir检查模型回答前一大段思考Qwen3 思考模式接口里用think: False关闭九、每次开始学习的固定三步D: cd rag-learning venv\Scripts\activate十、小结与下周计划第 1 周的核心收获是搞清楚“模型是怎么被调用的”本地模型通过 Ollama 暴露一个 HTTP 接口我们的 Flask 程序只是一个转发层。后面做 RAG本质上就是在这个转发层里先检索资料、拼进 prompt再调用模型。接下来还有两件事用不同的temperature和top_p比如 0.1、0.7、1.5对同一个问题各问几次观察回答的稳定性差异再用 system prompt 设定角色看回答风格的变化。进入第 2 周文档切片与向量化用 bge 模型把文本变成向量。如果这篇文章对你有帮助欢迎点赞收藏。后续每周的实践记录我会继续更新。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →