1. 为什么要在Mac M1上折腾DeepSeek+RAGFlow?
如果你和我一样,是个喜欢在本地捣鼓AI应用的Mac用户,尤其是用的还是M1、M2或者M3这类Apple Silicon芯片,那你肯定懂我的感受。网上教程一大堆,但十有八九都是针对Windows或者Intel芯片Mac的,照着做不是这里报错就是那里卡住,折腾半天最后只能对着屏幕叹气。我当初想在本地方便地搭建一个个人知识库,能上传自己的文档、PDF,然后像聊天一样问它问题,DeepSeek模型+RAGFlow这个组合听起来简直完美。但真动手了才发现,从环境配置到模型运行,每一步都可能是个“坑”。
我断断续续搞了快半年,中间无数次想放弃。一开始是RAGFlow的Docker镜像对macOS,特别是ARM架构的适配不行,拉取镜像就直接报错。后来官方慢慢更新,加上自己摸索出一些土办法,总算让它在我的M1 MacBook Air(只有8GB内存!)上流畅跑起来了。这篇文章,就是我把自己踩过的所有坑、试过的所有有效方法,重新梳理了一遍,写成的一份实战指南。目标很简单:让你不用再经历我那种“从入门到放弃”的痛苦,能跟着步骤,相对顺利地在你的Mac上把DeepSeek和RAGFlow跑起来,搭建一个属于你自己的、离线的智能知识库。
整个过程会涉及到几个核心部分:首先是基础环境搭建,包括Homebrew、Git和Docker Desktop for Mac的正确安装与配置;其次是解决Docker在ARM架构Mac上的兼容性问题,这是最大的拦路虎;然后是内存和网络这两个“隐形杀手”的优化;最后是模型的选择与配置,如何在有限的资源下选择最合适的模型。我会把每个环节的具体命令、配置文件怎么改、遇到错误怎么解决,都掰开揉碎了讲清楚。咱们不聊虚的,直接上干货。
2. 战前准备:给你的Mac M1打好基础
工欲善其事,必先利其器。在开始部署之前,我们需要确保Mac上的基础环境是OK的。别小看这一步,很多后续的玄学报错,根源都出在这里。
2.1 安装必备的“软件包管理器”:Homebrew
Homebrew是macOS上不可或缺的包管理器,我们可以用它来安装后面需要的Git等工具。安装命令很简单,打开你的“终端”(Terminal),输入下面这行命令:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"输入后按回车,根据提示操作即可。这里有个小细节,因为网络环境问题,有时候直接运行上面的命令会卡住或者报错。如果遇到这种情况,不用慌,可以多试几次,或者尝试切换网络环境。安装完成后,可以运行brew -v来检查是否安装成功,它会显示Homebrew的版本号。
接下来,我们用Homebrew安装Git,这是下载RAGFlow源代码所必需的:
brew install git同样,安装完后用git --version验证一下。
2.2 安装与配置Docker Desktop for Mac
这是整个部署中最关键、也最容易出问题的一环。切记,一定要去Docker官网下载适用于Apple Silicon芯片的Docker Desktop版本。直接搜索“Docker Desktop for Mac Apple Silicon”就能找到。安装Intel版本会导致后续的镜像完全无法运行。
安装完成后,打开Docker Desktop应用。第一次启动可能会要求进行一些权限配置,按照提示操作就行。我建议在Docker Desktop的设置(Preferences)里,做两个调整:
- 资源分配:在“Resources”选项卡里,根据你电脑的内存情况,适当调高分配给Docker的内存和CPU。我的Mac只有8GB内存,我给了Docker 4GB,Swap也调到了2GB,这样能保证基础服务运行。
- 镜像加速:在“Docker Engine”配置里,可以添加国内的镜像加速器地址,这能极大提升拉取镜像的速度。具体地址可以搜索“Docker镜像加速”获取。
确保Docker Desktop的状态栏图标显示为“Docker Desktop is running”,再进行下一步。
3. 攻克最大难关:Docker镜像的ARM兼容性问题
一切准备就绪,我们开始拉取和运行RAGFlow。按照官方或大多数教程,你会进入项目目录,然后运行docker-compose up -d之类的命令。但在M1/M2 Mac上,你很可能会迎面撞上第一个,也是最经典的错误:
no matching manifest for linux/arm64/v8 in the manifest list entries这个错误的意思是,Docker在公共仓库里找不到适用于你电脑ARM64架构的镜像文件。很多开源项目默认提供的Docker镜像是为Linux/amd64(即传统的Intel/AMD芯片)架构构建的。这就是我们遇到的第一个“坑”。
解决方法不是去等官方更新,而是主动告诉Docker:“请用兼容模式运行这个镜像”。具体操作如下:
首先,我们需要获取RAGFlow的源代码。在终端里,找一个你喜欢的目录(比如~/Downloads),执行:
git clone https://github.com/infiniflow/ragflow.git cd ragflow进入项目后,关键的修改在docker/docker-compose.yml这个文件里。你需要用文本编辑器(比如VS Code,或者Mac自带的TextEdit)打开它。找到你需要运行的服务部分(通常是ragflow或server这类核心服务),在它的配置块里,在ports和volumes配置项之间,手动添加一行:
platform: linux/amd64举个例子,修改后的一部分配置可能看起来像这样:
services: ragflow: image: infiniflow/ragflow:latest platform: linux/amd64 # <--- 就是添加这一行! ports: - "80:80" volumes: - ./data:/app/data # ... 其他配置这行配置的作用是强制Docker使用linux/amd64(Intel架构)的兼容层来运行这个容器。虽然效率上不是原生ARM那么高,但它是确保能跑起来的“救命稻草”。保存文件后,我们再使用一个更通用的命令来启动(注意命令中的细微差别):
docker compose -f docker/docker-compose.yml up -d这个docker compose(中间没有横杠)是较新版本Docker的命令。执行后,终端会开始拉取镜像并启动容器。看到所有容器状态都显示为“done”或没有报错退出,就成功了一大半。你可以通过docker ps命令查看正在运行的容器。
4. 内存与网络:两个影响体验的“隐形杀手”
当容器成功跑起来,在浏览器输入http://localhost或http://localhost:80却打不开页面,或者页面卡顿、模型加载失败时,问题往往出在内存和网络上。
4.1 内存优化:小内存Mac的生存之道
我的MacBook Air只有8GB统一内存,既要跑系统、Docker容器,还要运行大语言模型,非常吃力。最初我试图运行7B参数的DeepSeek模型,直接导致电脑卡死,Ollama(一个本地运行模型的工具)频繁崩溃。
解决方案是“降级”模型。对于个人知识库这种对推理深度要求不是极端高的场景,小参数模型完全够用,而且响应速度更快。我最终选择了1.5B参数版本的DeepSeek模型,效果依然不错。通过Ollama运行小模型:
ollama pull deepseek-coder:1.5b # 或者 deepseek-llm:1.5b,根据你需要选择同时,务必在Docker Desktop的设置里,把内存限制调低一些,给系统和其他应用留出余地。一个稳定的、能持续运行的系统,远比一个动不动就崩溃的“大模型”要有用得多。
4.2 网络配置:解决连接拒绝与解析缓慢
第二个常见问题是网络连接错误,比如在RAGFlow界面配置模型时,出现[Errno 111] Connection refused,或者知识库文档解析速度奇慢无比。
首先,解决Ollama连接问题。在RAGFlow的“模型提供商”设置里,添加Ollama作为Chat模型后端时,URL不要填localhost:11434。因为在Docker容器内部,localhost指的是容器自己,而不是宿主机(你的Mac)。正确的填法是:
http://host.docker.internal:11434这个特殊的域名host.docker.internal会被Docker解析为宿主机的IP地址,从而让容器内的RAGFlow能访问到你Mac本机上运行的Ollama服务。
其次,优化知识库文档解析速度。RAGFlow在解析文档(比如PDF、Word)时,需要用到Embedding模型(嵌入模型)将文本转化为向量。Ollama自带的nomic-embed-text模型在某些硬件上可能比较慢。我亲测一个更优的选择是bge-m3模型,它在精度和速度上平衡得更好。
操作步骤是:
- 先停止正在运行的RAGFlow服务(在ragflow项目目录下):
docker compose -f docker/docker-compose.yml down - 拉取
bge-m3模型:ollama pull bge-m3 - 重新启动RAGFlow服务:
docker compose -f docker/docker-compose.yml up -d - 在RAGFlow网页的知识库设置里,将解析模型(Embedding Model)从默认的
nomic-embed-text切换为bge-m3。
这个改动之后,我解析一个几十页的PDF文档,速度从之前的十几分钟缩短到了两三分钟,提升非常明显。
5. 模型选择与系统配置实战
环境搭好了,服务跑通了,最后一步就是让整个系统“聪明”起来,即正确配置DeepSeek模型和RAGFlow的知识库。
5.1 在Ollama中管理你的模型
Ollama是我们本地运行模型的引擎。除了上面提到的拉取模型,你还需要知道如何管理它们。
- 查看已下载模型:
ollama list - 运行一个模型进行对话测试:
ollama run deepseek-coder:1.5b - 删除一个模型:
ollama rm <模型名>
我建议在Ollama中只保留你真正会用到的1-2个模型,比如一个1.5B的Chat模型和一个bge-m3嵌入模型,节省宝贵的磁盘和内存空间。
5.2 RAGFlow网页端的关键配置
打开http://localhost,进入RAGFlow界面。有几个配置点至关重要:
模型提供商设置:在系统设置里,找到“模型提供商”或“Model Providers”。添加一个Ollama类型的提供商。
- 名称:可以自定义,比如“Local-Ollama”。
- 类型:选择“Ollama”。
- URL:务必填写
http://host.docker.internal:11434,这是打通容器和宿主机的关键。 - 然后选择你之前在Ollama中拉取的Chat模型,比如
deepseek-coder:1.5b。
知识库模型设置:创建或编辑一个知识库时,会有两个模型设置:
- 系统模型:这里选择你刚刚在“模型提供商”里配置好的那个Ollama Chat模型(如
deepseek-coder:1.5b)。它负责最终的对话生成。 - 解析模型(Embedding Model):不要在这里选!这是一个我踩过的坑。这个下拉框可能无法正确获取到Ollama里的嵌入模型。正确的方法是,在知识库的“设置”或“高级选项”里,寻找“Embedding Model”的配置项,手动输入模型名称,比如
bge-m3。这样RAGFlow才会在解析文档时使用你指定的、更高效的模型。
- 系统模型:这里选择你刚刚在“模型提供商”里配置好的那个Ollama Chat模型(如
5.3 日常使用与维护心得
系统跑起来之后,日常使用就简单了。但Mac用户有个习惯——不关机,只合盖睡眠。这可能会导致Docker容器在长期运行后出现一些诡异的问题,或者Ollama服务意外停止。
我的经验是,如果某天发现RAGFlow网页打不开,或者对话报错,可以按这个顺序排查:
- 检查Docker Desktop:确保它正在运行(菜单栏图标是绿色的)。
- 检查Ollama:在终端运行
ollama serve确保服务在后台跑着。 - 重启容器:在RAGFlow项目目录下,执行重启命令:
这能解决大部分因长期运行导致的内部状态问题。docker compose -f docker/docker-compose.yml down docker compose -f docker/docker-compose.yml up -d
另外,关于上传文件,我个人的体验是,.txt和.md格式的文件解析成功率最高,格式也最干净。复杂的PDF或Word文档,有时会解析出一些乱码或格式错误。对于重要文档,可以先尝试转成纯文本格式再上传,效果会更好。
最后,别忘了享受成果。当你能把一堆凌乱的技术文档、学习笔记、会议纪要通过这个自己搭建的系统,用自然语言快速查询、归纳总结时,那种成就感和便利性,远超过前期折腾所付出的那点时间。整个过程虽然踩坑不少,但每一个问题的解决,都让你对这套技术的理解更深一层。现在,你的Mac M1不再只是一台普通的电脑,它成了一个拥有私人AI助理的智能工作站。