Dify搭建RAG知识库:从零开始的完整教程

---

title: Dify搭建RAG知识库:从零开始的完整教程

date: 2026-05-21

categories: [AI, Agent, 教程]

tags: [Dify, RAG, 知识库, AI教程, 大模型]

---


Dify搭建RAG知识库:从零开始的完整教程


> 本文首发于 Agent评测站,一个独立AI智能体工具评测平台。文章同步发布于CSDN、知乎,欢迎收藏讨论。


前段时间需要给公司内部做一个文档问答系统,调研了几个方案后选了Dify。原因很简单:它把RAG的各个环节包装成了可视化操作,不需要从头写向量检索的代码。


这篇文章记录完整的搭建过程,踩过的坑和最终跑通的配置。如果你也在考虑用Dify做知识库,可以照着走一遍。


先搞清楚:RAG到底是什么


RAG(Retrieval-Augmented Generation)说白了就是:用户提问 → 先去知识库搜相关段落 → 把段落塞给大模型 → 大模型基于搜到的内容回答


相比直接问大模型,RAG有两个明显好处:


  1. 回答基于你的私有文档,不是大模型训练数据里的公开信息
  2. 可以随时更新知识,不用重新训练模型

但实现起来有几个环节容易出问题,后面会讲到。


环境准备


我用的部署方式是 Docker Compose,这是最省事的。


服务器要求


  • 2核4GB以上的机器(我自己用4核8G,跑起来比较从容)
  • Docker 和 Docker Compose 已安装
  • 有公网IP或者内网能访问就行

部署Dify


# 下载Dify
git clone https://github.com/langgenius/dify.git
cd dify/docker

# 复制环境变量
cp .env.example .env

# 启动(需要几分钟拉取镜像)
docker compose up -d

启动后访问 http://你的IP:80,设置管理员账号,进入主界面。


这一步一般不会出问题。我第一次卡住是因为服务器内存只有2G,MySQL启动失败。加了1G swap解决了:


# 如果内存不够,加swap
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

创建知识库


登录Dify后,左侧点「知识库」→「创建知识库」:


  1. 上传文档:支持 PDF、TXT、Markdown、HTML、DOCX。我主要用的是技术文档PDF和Markdown。上传时文件不要太大,单文件超过15MB容易超时。
  2. 选择分段模式:默认是固定分块(500 tokens一段)。如果文档结构清晰(有标题层级),可以用「父子分段」,效果更好。
  3. 选择 Embedding 模型:我用的 text-embedding-3-small(OpenAI),效果均衡。如果用国产模型可以用 bge-large-zh-v1.5(BAAI开源的,中文效果好,且免费)。
  4. 索引方式:选「高质量」模式(向量检索),不要用「经济」模式(关键词检索),精度差太多。

踩坑记录:第一次我直接传了一个200页的PDF,Dify处理了10分钟没反应。后来改成按章节拆成多个小文件上传,速度快了很多。


配置应用


知识库建好后,创建一个「聊天助手」类型的应用:


  1. 左侧点「工作室」→「创建应用」→「聊天助手」
  2. 在提示词编辑器里选上刚才创建的知识库
  3. 关键的配置参数在这里:

检索参数调优


这是最折腾的部分,直接影响回答质量。我反复调了几轮才找到比较合适的配置:


检索策略:选「混合检索」(向量相似度 + 关键词匹配各算各的,再合并排序)。只用向量检索的话,遇到专业术语缩写经常搜不到。


精确度(Score Threshold):默认是0.5,我调到0.45。设太高会漏掉一些相关但用词不完全匹配的段落,设太低又会混入不相关的信息。


召回数量(Top K):从默认的3调到5。少于3条信息来源不够,多了超过5条大模型上下文会被无关信息干扰。


开启Rerank:如果预算允许,建议加一个Rerank模型(Dify支持Cohere的rerank接口)。不加也能用,但加了之后排在前面的结果相关度高很多。这个不是必须的,免费方案可以跳过。


提示词设置


系统提示词我改成了这样,比默认的简洁:


你是一个基于内部文档的知识助手。回答时:
1. 优先使用知识库中检索到的内容作答
2. 如果检索到的内容不足以回答问题,直接说"知识库中没有相关信息"
3. 不要凭空编造信息
4. 保持回答简洁,控制在3-5个要点内
5. 引用具体的文档来源

几个常见问题的解决办法


问题1:回答总是"知识库中没有相关信息"


最常见的原因是分段太大。一篇文档被切分成几个大段,用户问的细节正好在段的边界上,没被检索到。


解决:把分段大小从500降到300 tokens,重叠比例从0调到10%。


问题2:回答内容是对的,但引用了不相关的来源


这是 Top K 设太高了。K=5 但可能只有2条是相关的,另外3条是凑数的。Rerank 能解决这个问题。


问题3:PDF里的表格识别不出来


Dify默认的PDF解析对表格支持不好。我的做法是:把PDF里有表格的部分截成图片,单独上传,在文档描述里标注"第X页表格"。或者直接用Markdown重建表格内容再上传。


问题4:中文分词效果差


有些专业术语(比如"参数服务器""梯度检查点")被切碎了。在 Dify 的「分段设置」里可以自定义分隔符,加上这些长词作为不可分割的短语。


实际使用效果


这个系统上线后让团队查技术文档的效率提高了很多。之前查一个参数要翻几十页PDF,现在直接问就行。当然也不是完美的——遇到非常冷门的问题或者新版本刚更新的内容,知识库里没有,还是会回答不了。


总的来说,Dify做RAG知识库确实省事,尤其是不想写代码的团队。但有几个点要注意:文档质量决定回答质量(输入垃圾输出垃圾)、需要定期更新知识库内容、参数量大的模型(如GPT-4)比小模型效果好很多。


---


如果你对具体的配置参数有疑问,欢迎在评论区留言讨论。