标签: RAGFlow Ollama Docker 大模型 知识库 本地部署 Qwen Embedding模型

摘要: 作为一名大二学生,我耗时一天完成了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\      # 模型元数据清单

⚠️ 重要:两个文件夹缺一不可!

迁移步骤:

  1. 完全退出Ollama
  2. C:\Users\xxx\.ollama\models下的blobsmanifests剪切到E:\OllamaModels
  3. 设置环境变量OLLAMA_MODELS=E:\OllamaModels
  4. 重启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包也是可行的:

  1. 访问 https://github.com/infiniflow/ragflow
  2. 点击 Code → Download ZIP
  3. 解压到目标目录
避坑提醒
  • 目标文件夹非空时,先清空或删除再克隆
  • 中断克隆后,必须手动删除整个仓库文件夹再重试
  • 全局代理模式≠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碎片文件

解决方案

  1. 删除残留文件
# 删除所有.partial文件
find E:\OllamaModels -name "*.partial" -delete
  1. 手动创建Modelfile注册模型

创建文件Modelfile.bge-m3(无后缀名):

FROM ./blobs/sha256-xxx  # 替换为实际的blob文件名

TEMPLATE """
{{ .Prompt }}
"""

PARAMETER temperature 0.7

然后执行注册:

ollama create bge-m3 -f Modelfile.bge-m3
  1. 验证模型
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!


步骤六:创建知识库并开始对话

  1. 新建知识库

    • 进入"知识库"页面
    • 点击"创建知识库"
    • 选择bge-m3:latest作为Embedding模型
  2. 上传文档

    • 支持PDF、Word、TXT等格式
    • 上传后等待解析完成(状态变为"成功")
  3. 新建对话

    • 进入"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知识库系统。我可以上传任何文档,让它帮我阅读、总结、回答问题。这种感觉,真的太棒了!


参考资源


如果这篇文章对你有帮助,欢迎点赞、收藏、评论交流!有问题也可以在评论区留言,我会尽力解答。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐