Ollama + BGE-M3:构建本地RAG的检索与生成分离实践
简介:面向AI应用开发者与知识库智能体搭建者,这份代码包提供基于Ollama与BGE-M3的对接方案,涵盖大语言模型部署、嵌入模型接入、Vllm与Dify集成,以及本地DeepSeek模型的编排使用。资源共4个文件,压缩包体积仅8KB,包含Markdown说明、HTML展示页面、inscode配置和gitignore文件,结构简洁,便于快速对照实践。其中重点梳理了Ollama安装配置、模型文件目录修改、端口号调整、模型选择下载与测试,以及Dify集成过程中的常见报错与解决办法,适合在本地环境复现知识库智能体时参考排错。目前已有193人学习/下载,对于希望低成本搭建本地智能体并理解模型协作原理的开发者,这份小巧的代码包能提供具体落地路径与学习指引,既能快速上手实践,也有助于系统掌握本地大模型与嵌入模型组合应用的关键环节。 做本地知识库问答,最让人上头的往往不是把大模型跑起来,而是让“检索”和“生成”两条链路真正打通。我大半年都在折腾 Ollama 和各类嵌入模型,最终稳定下来的一套组合就是 Ollama + BGE-M3:Ollama 负责对话模型的管理和推理,BGE-M3 负责把文档和问题映射成向量,两边通过本地 HTTP 服务对接。这篇帖子会把完整方案、可复制的代码、以及我踩过的坑都摆出来,适合已经接触过 Ollama、准备把 RAG 落地到本机或内网的读者。如果你刚装好 Ollama,还在为“模型下载慢”“不知道选哪个 embedding 模型”发愁,这一篇也能帮你少走半天的弯路。方案整体不复杂,但按这个思路拆开后,后面加向量库、加 rerank 都会顺很多。
1. 为什么是BGE-M3 + Ollama:先把“检索”和“生成”拆开
很多人在本地 RAG 上翻车,不是模型不好,而是把检索和生成两件事揉成了一团。检索要解决的是“哪几段文档和这个问题最相关”,生成要解决的是“把这些文档组织成一句人话”。前者本质是向量相似度计算,后者本质是语言模型推理,它们本来就应该由不同组件承担。
1.1 本地RAG的常见误区:让一个模型同时干两件事
最典型的做法是什么都往 Ollama 里塞。Ollama 确实能跑 embedding 模型,比如 nomic-embed-text、mxbai-embed-large,也能跑对话模型。但 embedding 模型的生态和对话模型差很多,Ollama 官方模型库里给的选项有限,中文效果尤其一般。于是很多人拉了个 qwen2.5 就让它“自己找资料、自己回答”,结果是模型一本正经地编,因为对话模型在生成时根本没有可靠的外部知识来源。RAG 的意义就在于把“读资料”这一步从生成模型里剥离出来,单独交给检索系统,这正是我坚持用 BGE-M3 做检索侧、用 Ollama 只做生成侧的原因。
1.2 为什么BGE-M3没有出现在Ollama模型库
BGE-M3 是 BAAI 开源的多语言文本向量模型,最大 8192 token,输出 1024 维 dense 向量,中文效果好,这些特性让它很适合做中文知识库底座。但它不是一个标准 GGUF 对话模型,Ollama 官方模型库并没有把它作为 embedding 模型内置。你当然可以手动把 BGE-M3 转成 GGUF 再 create 进 Ollama,但我试下来会遇到 tokenizer 对齐和接口返回格式的问题,ROI 很低。更稳的路径是:BGE-M3 独立起一个 Python 服务,Ollama 只跑对话模型,两边用 HTTP 通信。
| 方案 | 输出维度 | 中文效果 | 部署复杂度 | 适用场景 |
|---|---|---|---|---|
| BGE-M3 独立服务 | 1024 | 优 | 中等 | 中文知识库、长文本检索 |
| Ollama + nomic-embed-text | 768 | 一般 | 低 | 快速验证、英文/代码为主 |
| Ollama + mxbai-embed-large | 1024 | 一般 | 低 | 简单英文 RAG |
1.3 这套对接方案的整体结构
最终形态是这样:一个 Flask 服务在 6006 端口接收文本,返回 BGE-M3 向量;Ollama 服务在 11434 端口提供对话补全;中间的自研管道先把 query 向量化,再从文档库里做余弦相似度召回,最后把命中的段落拼成 prompt 交给 Ollama。这样拆开至少有三个好处:第一,嵌入模型升级不影响对话模型,反之亦然;第二,每个环节可以单独用 curl 验证,哪里出了问题一眼就看出来;第三,以后接 Chroma、FAISS 只需替换检索那一段,生成侧完全不用动。
2. 环境准备与模型搬运:安装Ollama、GPU配置、BGE-M3获取
2.1 安装Ollama与下载慢的实用对策
Windows 就直接去官网下安装包,装完托盘里能看到 Ollama 服务。Linux 执行下面这条命令:
curl -fsSL https://ollama.com/install.sh | sh如果你撞上“下载太慢”,我实测最有效的办法不是反复重试ollama pull,而是改用“本地导入 GGUF”的路线。先去模型社区下载目标模型的 GGUF 文件,比如 qwen2.5 的 4bit 量化版,再写一个 Modelfile:
FROM ./qwen2.5-7b-instruct-q4_k_m.gguf然后执行ollama create qwen2.5:7b -f Modelfile。这个方式能断点续传,下载工具也更可靠。关于 ollama
本文还有配套的精品资源,点击获取
