从零搭建本地AI知识库:RAGFlow + Ollama+Qwen 本地部署完整踩坑实录
标签:
RAGFlowOllamaDocker大模型知识库本地部署QwenEmbedding模型
摘要: 作为一名大二学生,我耗时一天完成了RAGFlow+Ollama+Qwen的本地部署。本文记录了从环境配置到最终跑通的完整过程,包含10个真实踩坑案例和解决方案。如果你也想搭建属于自己的本地AI知识库,这篇文章能帮你少走很多弯路!
写在前面
作为一名计算机专业的大二学生,我对AI一直充满好奇。课堂上老师讲过大模型、RAG(检索增强生成)这些概念,但我总觉得"纸上得来终觉浅"——真正动手部署一个本地AI系统,让它能够读取我的文档并回答问题,这才是我想要的"实战体验"。
于是,我决定挑战自己:在本地部署RAGFlow,连接Ollama运行的Qwen3.5:9b模型,再配上BGE-M3作为Embedding模型,搭建一个完全属于自己的知识库问答系统。
听起来很酷,对吧?但实际操作起来,我踩了无数的坑…
一、实践目标
本次实践的核心目标是:
- ✅ 在本地环境成功部署RAGFlow服务
- ✅ 配置Ollama并下载Qwen3.5:9b大语言模型
- ✅ 部署BGE-M3作为Embedding模型用于文档向量化
- ✅ 打通RAGFlow与Ollama的网络连接
- ✅ 实现上传文档、解析、基于知识库的智能问答
二、环境准备
2.1 硬件/软件要求
| 项目 | 配置要求 |
|---|---|
| 操作系统 | Windows 10/11 + WSL2 Ubuntu |
| 内存 | 建议16GB以上 |
| 磁盘空间 | 至少50GB可用空间(模型文件较大) |
| 网络 | 能访问GitHub和Docker Hub(或配置镜像源) |
2.2 需要安装的工具
- Docker Desktop(开启WSL2集成)
- Ollama
- Git
三、完整部署步骤
步骤一:配置Ollama模型存储路径
问题背景:Ollama默认将模型下载到C盘,而C盘空间往往紧张。
踩坑实录:环境变量设置了却无效
我提前设置了环境变量OLLAMA_MODELS=E:\OllamaModels,并通过echo %OLLAMA_MODELS%确认变量正确设置。但奇怪的是,模型仍然下载到了C:\Users\xxx\.ollama\models!
原因分析:
- 用户变量对Ollama后台服务不生效
- 便携版Ollama不读取任何环境变量
- 必须以系统变量方式设置,或通过命令行直接启动
正确操作步骤
方法1:设置系统环境变量(推荐)
# 在"系统属性"->"环境变量"中设置
OLLAMA_MODELS=E:\OllamaModels
方法2:命令行启动(临时)
set OLLAMA_MODELS=E:\OllamaModels && ollama serve
模型存储结构解析
迁移模型时,必须同时复制以下两个文件夹:
E:\OllamaModels\
├── blobs\ # 实际模型数据块(大文件)
└── manifests\ # 模型元数据清单
⚠️ 重要:两个文件夹缺一不可!
迁移步骤:
- 完全退出Ollama
- 将
C:\Users\xxx\.ollama\models下的blobs和manifests剪切到E:\OllamaModels - 设置环境变量
OLLAMA_MODELS=E:\OllamaModels - 重启Ollama验证:
ollama list
步骤二:获取RAGFlow源码
踩坑实录:Git克隆的噩梦
git clone https://github.com/infiniflow/ragflow.git ragflow
这个过程充满了坎坷:
- 速度极慢(16KB/s、33KB/s)
- 频繁卡在
Cloning into '...'无输出 - 报错
fatal: fetch-pack: invalid index-pack output - 即使加了
--depth 1进行浅克隆,也因网络质量差而失败
解决方案汇总
方案1:配置Git代理
# 设置HTTP代理(根据你的代理软件端口调整)
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
# 克隆完成后取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy
方案2:使用国内镜像站
git clone https://ghproxy.net/https://github.com/infiniflow/ragflow.git
方案3:直接下载ZIP包(最稳定)
如果Git克隆实在无法完成,直接下载ZIP包也是可行的:
- 访问 https://github.com/infiniflow/ragflow
- 点击 Code → Download ZIP
- 解压到目标目录
避坑提醒
- 目标文件夹非空时,先清空或删除再克隆
- 中断克隆后,必须手动删除整个仓库文件夹再重试
- 全局代理模式≠Git自动走代理,需要手动配置
步骤三:启动RAGFlow服务
在WSL Ubuntu终端中执行:
cd /mnt/e/ragflow/docker
docker compose -f docker-compose.yml up -d
配置国内镜像源(加速下载)
编辑docker/.env文件,配置国内镜像:
# 使用国内镜像源
RAGFLOW_IMAGE=swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:latest
同时在Docker Desktop设置中添加registry-mirrors:
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
步骤四:准备本地模型
下载Embedding模型
ollama pull bge-m3
踩坑实录:模型下载后无法识别
现象:文件明明在E:\OllamaModels\blobs里,但ollama list只显示qwen3.5:9b,找不到bge-m3。
原因:
- Ollama的模型注册表(manifests)可能丢失或损坏
- 下载过程被中断,残留
.partial碎片文件
解决方案:
- 删除残留文件
# 删除所有.partial文件
find E:\OllamaModels -name "*.partial" -delete
- 手动创建Modelfile注册模型
创建文件Modelfile.bge-m3(无后缀名):
FROM ./blobs/sha256-xxx # 替换为实际的blob文件名
TEMPLATE """
{{ .Prompt }}
"""
PARAMETER temperature 0.7
然后执行注册:
ollama create bge-m3 -f Modelfile.bge-m3
- 验证模型
ollama list
步骤五:配置RAGFlow连接Ollama
这是最关键的一步!很多新手在这里卡很久。
核心问题:网络连通性
RAGFlow运行在Docker容器里,Ollama运行在Windows宿主机,不能用localhost直接连通。
获取WSL2网关IP
在WSL Ubuntu终端中执行:
ip route show default | awk '{print $3}'
输出示例:172.27.96.1
在RAGFlow中添加模型供应商
访问 http://localhost ,进入"模型供应商"设置:
1. 添加LLM模型
| 配置项 | 值 |
|---|---|
| 供应商 | Ollama |
| 模型名称 | qwen3.5:9b |
| 基础URL | http://172.27.96.1:11434 |
| 最大token | 8192 |
2. 添加Embedding模型
| 配置项 | 值 |
|---|---|
| 供应商 | Ollama |
| 模型名称 | bge-m3:latest |
| 基础URL | http://172.27.96.1:11434 |
⚠️ 注意:IP地址必须替换为你自己的WSL网关IP!
步骤六:创建知识库并开始对话
-
新建知识库
- 进入"知识库"页面
- 点击"创建知识库"
- 选择
bge-m3:latest作为Embedding模型
-
上传文档
- 支持PDF、Word、TXT等格式
- 上传后等待解析完成(状态变为"成功")
-
新建对话
- 进入"Chat"页面
- 选择
qwen3.5:9b模型 - 勾选刚才创建的知识库
- 开始提问!
四、十大踩坑实录与解决方案
坑一:Ollama环境变量设置了却无效
| 项目 | 内容 |
|---|---|
| 现象 | 设置了OLLAMA_MODELS=E:\OllamaModels,但模型仍下载到C盘 |
| 原因 | 在"用户变量"中设置,Ollama后台服务读取不到 |
| 解决 | 改用"系统变量",或用命令行set OLLAMA_MODELS=... && ollama serve启动 |
坑二:Ollama便携版不认任何环境变量
| 项目 | 内容 |
|---|---|
| 现象 | 直接从.zip解压运行ollama.exe,所有变量设置无效 |
| 解决 | 使用官方安装程序,或始终通过命令行ollama serve启动 |
坑三:误以为迁移模型会导致无法使用
| 项目 | 内容 |
|---|---|
| 现象 | 担心剪切blobs和manifests后模型损坏 |
| 解决 | 只要两个文件夹完整迁移并正确设置环境变量,模型完全可用 |
坑四:不了解模型存储的"两层结构"
| 项目 | 内容 |
|---|---|
| 现象 | 以为单个文件夹或文件就是模型,迁移时漏掉manifests |
| 解决 | 必须同时迁移blobs和manifests,缺一不可 |
坑五:终端环境混乱
| 项目 | 内容 |
|---|---|
| 表现 | 在Windows CMD里git clone,又在WSL里操作Docker |
| 核心问题 | Docker在WSL2里运行,所有Docker相关命令都应在WSL Ubuntu终端进行 |
| 教训 | 固定使用一个Linux终端(WSL Ubuntu),避免跨环境路径和权限问题 |
坑六:Git和Docker拉取失败
| 项目 | 内容 |
|---|---|
| 表现 | git clone频繁中断,docker compose无法拉取镜像 |
| 原因 | 直接访问GitHub和Docker Hub容易因网络波动导致中断 |
| 解决 | Git使用镜像站或配置代理;Docker配置镜像加速器;必要时直接下载ZIP包 |
坑七:模型下载后无法识别
| 项目 | 内容 |
|---|---|
| 表现 | 文件在blobs里,但ollama list找不到 |
| 原因 | manifests丢失或损坏;下载中断残留.partial文件 |
| 解决 | 删除.partial文件;使用Modelfile手动注册;确保环境变量指向正确路径 |
坑八:Docker虚拟磁盘占用C盘空间
| 项目 | 内容 |
|---|---|
| 表现 | C盘空间被.vhdx文件迅速占用十几GB |
| 原因 | Docker Desktop默认将虚拟硬盘文件放在C盘 |
| 解决 | 执行docker system prune -a清理;通过设置迁移Disk image location到E盘 |
坑九:文件名后缀隐藏问题
| 项目 | 内容 |
|---|---|
| 表现 | 创建Modelfile.bge-m3.txt后重命名,但Windows仍隐藏.txt后缀 |
| 教训 | 处理无扩展名文件时,最好在命令行下进行 |
坑十:RAGFlow连接Ollama的IP地址问题
| 项目 | 内容 |
|---|---|
| 关键点 | RAGFlow运行在Docker里,Ollama运行在Windows宿主机,不能用localhost |
| 正确做法 | 获取WSL2的网关IP作为连接地址:http://<WSL网关IP>:11434 |
五、最佳实践清单
| 要点 | 具体建议 |
|---|---|
| 🔧 固定终端 | 所有Docker操作在WSL Ubuntu里完成 |
| 🌐 防断流 | Git和Docker镜像优先配置国内源或代理 |
| ✅ 查模型 | 下载后用ollama list确认,缺失则检查manifests和残留partial文件 |
| 💾 盘空间 | 及时迁移Docker数据盘和Ollama模型到非系统盘 |
| 🔗 连服务 | Docker访问宿主机不能用localhost,要用WSL网关IP |
| ⚙️ 配环境 | 修改Ollama路径时用"系统变量"而非"用户变量" |
| 📁 懂结构 | 迁移模型时必须同时复制blobs和manifests两个文件夹 |
| 🧹 清残留 | 克隆或下载失败后,手动清理不完整目录再重试 |
六、心路历程
说实话,刚开始的时候我是很兴奋的。想象着自己能在本地跑一个真正的大模型,还能让它读我的文档、回答我的问题,这感觉太酷了!
但很快,现实就给了我当头一棒。
第一个git clone就卡住了——16KB/s的速度,频繁中断,fatal: fetch-pack: invalid index-pack output的错误让我抓狂。然后是Docker镜像拉不动,再然后是模型下载了却识别不了…每一个问题都让我怀疑人生。有好几次我都想放弃了,觉得这东西太难了,可能不适合我这个大二学生。
特别是Ollama模型迁移那次,我明明设置了环境变量,模型还是往C盘跑。我反复检查、重启、甚至重装了Ollama,最后才发现是"用户变量"和"系统变量"的区别!那一刻我才真正理解了环境变量的作用域概念——这是课本上不会教你的实战经验。
但我没有放弃。我开始疯狂查资料、看文档、逛论坛。每解决一个问题,我就有一种"升级打怪"的成就感。当我终于在RAGFlow里看到模型连接成功的绿色提示时,那种激动真的无法用语言形容!
现在回过头看,这些坑其实都是宝贵的经验。它们让我更深入地理解了Docker、WSL、网络配置、环境变量这些概念——这些是课本上学不到的实战知识。
七、结语
这次实践让我深刻体会到:纸上得来终觉浅,绝知此事要躬行。
课本上的知识固然重要,但真正的成长来自于动手实践、踩坑、解决问题的过程。
通过这次经历,我不仅掌握了Ollama在Windows下的路径配置技巧,理解了环境变量针对系统服务和用户会话的不同作用范围,还能够独立完成模型迁移、目录清理和故障排查。
更重要的是,我学会了面对问题时的排查思路:从现象出发,分析可能原因,逐一验证假设,最终找到解决方案。
现在,我已经拥有了一个完全属于自己的本地AI知识库系统。我可以上传任何文档,让它帮我阅读、总结、回答问题。这种感觉,真的太棒了!
参考资源
如果这篇文章对你有帮助,欢迎点赞、收藏、评论交流!有问题也可以在评论区留言,我会尽力解答。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)