Dify中RAG通过文档预处理(语义切块)、向量化索引(嵌入模型+向量库)、三步检索(查询向量→ANN搜索→重排序)及生成约束(引用溯源+未命中禁编造)四步实现精准问答。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要让Dify中的大模型回答准确、不编造、还能用上你上传的最新PDF或内部文档,必须搞懂RAG在Dify里是怎么一步步把知识“塞”进模型嘴里的。这不是简单丢个文件就完事,而是从文档切片、向量化、检索匹配到最终生成,环环相扣,漏掉一步就可能返回错误答案。
文档预处理:切块不是随便分段
第一步是把原始文档(PDF/Word/TXT)拆成语义连贯的小片段。Dify默认按512 token切分,但关键在于不能切断句子或表格结构。例如一段景区开放时间说明:“周一至周五 8:00–17:00,周六日及节假日 8:00–18:00”,若在“周五”后硬切,后半句被单独索引,检索“节假日开放时间”时就无法召回完整信息。
手动上传前,建议先用文本编辑器检查是否含乱码、页眉页脚、扫描PDF的OCR错字——这些噪声会直接污染向量表示。
这一步操作起来很简单,直接把文件拖进Dify知识库上传区即可,系统自动触发解析流程。
向量化与索引构建:让文字变成可搜索的“坐标”
方法一:Dify内置嵌入模型自动处理
上传完成后,Dify调用默认嵌入模型(如bge-m3)将每个文本块转为高维向量,并存入内置向量数据库(Chroma)。无需配置,等待状态栏显示“已就绪”即可进入下一步。
方法二:自定义嵌入模型(高级用户)
进入【知识库】→【设置】→【嵌入模型】,切换为本地部署的BGE或OpenAI text-embedding-3-small。注意:更换模型后必须重新处理全部文档,否则新旧向量混存会导致检索失效。
向量数据库不支持SQL式查询,它只认“相似度”。余弦值越接近1.0,语义越贴近。比如用户问“退票怎么扣钱”,即使文档写的是“门票退款手续费”,也能靠向量空间距离被捞出来。
检索阶段:三步锁定最相关片段
第一步:用户输入问题,Dify实时调用同一嵌入模型,将其转为查询向量。
第二步:在向量库中执行近邻搜索(ANN),默认返回top-3最相似文本块。
第三步:对结果做重排序(Rerank),使用交叉编码器二次打分,把真正语义匹配的片段往前顶——这步能显著压低关键词巧合匹配(如“苹果手机”搜出“苹果园介绍”)的误召率。
检索结果不会原样输出,而是作为上下文拼接到系统提示词末尾,格式为:```【参考信息】{文本块1} {文本块2}…```。
生成阶段:模型只许“照着念”,不许“自己编”
系统将原始问题 + 【参考信息】块 + 预设Prompt(含角色、格式、禁令)一并喂给LLM。Dify默认启用“引用溯源”开关,生成答案中每个事实性陈述都会标注来源块编号。
若检索未命中任何片段,且Prompt中设置了“未检索到则回复‘请咨询人工客服’”,模型绝不会强行编造。这是抑制幻觉最关键的闸门。
这一步不可跳过:必须在应用编排中开启【启用RAG】并绑定对应知识库,否则所有输入都走纯LLM路径,完全不触碰你传的文档。


















