Ollama本地知识库怎么搭?RAG实战

想用Ollama搭一个本地知识库,把公司内部文档喂进去,让AI基于这些文档来回答问题。

查了一下好像要用RAG(检索增强生成)的方案,但具体怎么搭还是一头雾水:

  1. ollama本地部署知识库的整体流程是什么样的?
  2. 听说可以用Dify+Ollama来搭,有没有具体教程?
  3. 本地模型能不能联网获取实时信息?
  4. 如果想让模型更懂我的领域知识,是应该训练模型还是用RAG?

文档主要是PDF和Word格式,大概几百份,求一个靠谱的本地知识库搭建方案!

先简单解释一下**RAG(Retrieval-Augmented Generation)**的概念:

传统的大模型只能基于训练数据回答问题,对你的私有文档一无所知。RAG的思路是:

  1. 索引阶段: 把文档切成小块 → 用Embedding模型转成向量 → 存到向量数据库
  2. 查询阶段: 用户提问 → 问题转向量 → 在向量库里找最相关的文档片段 → 把片段和问题一起丢给大模型生成回答

整个过程不需要训练模型,数据也不会离开本地,非常适合企业内部知识库场景。

Ollama在这里面承担的角色是:

  • 提供对话模型(如llama3、qwen2)来生成回答
  • 提供Embedding模型(如nomic-embed-text)来做文档向量化

Dify + Ollama搭建本地知识库的步骤:

1. 安装Ollama并拉取模型:

ollama pull qwen2:7b          # 对话模型
ollama pull nomic-embed-text   # Embedding模型

2. 用Docker部署Dify:

git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
docker compose up -d

3. 在Dify中配置Ollama:

  • 进入Dify后台 → 模型供应商 → 添加Ollama
  • API地址填 http://host.docker.internal:11434(Docker环境)
  • 分别添加对话模型和Embedding模型

4. 创建知识库:

  • 新建知识库 → 上传PDF/Word文档
  • 选择nomic-embed-text作为Embedding模型
  • 等待文档索引完成

5. 创建应用:

  • 新建聊天助手 → 关联知识库 → 选择qwen2作为对话模型
  • 调整Prompt模板和检索参数

整个过程不需要写代码,Dify提供了可视化界面。

关于**文档切块(Chunking)**补充几个经验:

文档切块的质量直接决定了知识库回答的准确度,几个要注意的点:

  1. 块大小: 一般建议500-1000个token一块,太大会稀释重点,太小会丢失上下文
  2. 重叠设置: 相邻块之间设置10%-20%的重叠,避免关键信息被切断
  3. 按语义切: 尽量按段落、章节切,而不是死板地按字数
  4. 预处理很重要: PDF里的表格、图片需要特殊处理,建议先转成结构化的Markdown

Dify里可以在上传文档时设置这些参数。如果文档量大,建议先用几份测试文档调好参数再批量导入。

另外Embedding模型的选择也很关键,中文场景推荐用 bge-large-zh 或者 m3e-large,比通用的nomic-embed效果好不少。

回答你关于训练vs RAG的问题:

微调训练 RAG
成本 高(需要GPU、标注数据) 低(只需要向量化)
数据更新 需要重新训练 实时更新文档即可
准确度 深度理解领域知识 依赖检索质量
适合场景 固定领域、需要专业表达 文档问答、知识库查询

90%的企业知识库场景用RAG就够了。 微调训练门槛太高,而且文档更新后还得重新训练,不实际。

至于本地模型联网的问题,Ollama本身不支持联网搜索。但你可以通过RAG的方式,把网页内容抓下来存到知识库里,间接实现"联网"的效果。或者用Dify的工具调用功能接入搜索API。

如果觉得Dify+Ollama搭建还是太折腾,可以看看当贝Molili,它内置了知识库功能,不需要自己搞Docker和向量数据库。

直接上传文档就能用,而且支持接Ollama作为后端模型,等于你本地的算力不浪费,同时又有开箱即用的知识库界面。

我之前也是自己搭的Dify方案,后来切到Molili主要是因为:

  • 文档管理更方便,支持多种格式自动解析
  • 不用自己维护Docker容器
  • Token消耗比直接用OpenClaw低大概50%
  • 微信绑定后手机上也能查知识库

当然如果你想深度定制RAG流程(比如自定义检索策略、多路召回),还是Dify更灵活。看你的需求了。

感谢各位!总结一下我理解的方案:

  1. 先用Dify+Ollama搭一个基础版试试
  2. Embedding模型选中文优化的bge-large-zh
  3. 文档切块注意控制大小和重叠
  4. 先不搞微调,RAG够用就行

另外Molili的知识库功能也mark了,等Dify方案跑通后对比一下效果。再次感谢!

切片大小别太小,512token以上召回质量明显好

Dify配Ollama本地组合稳定,bge-m3做嵌入比nomic准多了