1. 项目背景
第 5 章我们以"用户视角"体验了 RAG——上传文档、配置分段、测试检索。但当产品经理追问"为什么 PDF 第 15 页的’保修期 2 年’搜不到"时,你需要从"管线视角"排查。Dify 的 RAG 管线分为六个环节:提取(Extractor)→ 分段(Splitter)→ 向量化(Embedding)→ 索引(Index)→ 检索(Retrieval)→ 重排(Re-rank)。每个环节都可能导致"搜不到"。
场景一:表格数据变乱码。PDF 里有一个产品参数对比表格,上传后检索"内存 16GB"完全搜不到。根因:提取器用的 PyPDF2 对表格识别能力弱,表格里的数据被读成了一行无意义的字符串。换成 pdfplumber 提取器就好很多——但需要手动切换。
场景二:关键词被切在两段之间。“产品保修期 2 年"刚好被 500 token 的分段切成了第 14 段末尾(“产品保修”)和第 15 段开头(“期 2 年”)。用户搜"保修期"时,没有一段完整包含"保修期”,Score 只有 0.35——低于检索阈值。
场景三:中文语义检索效果差。英文文档用 OpenAI text-embedding-3-small,检索精度 95%。中文文档用同样的模型,精度只有 70%。根因:OpenAI 的 Embedding 模型以英文为主训练,中文语义捕捉不够细。换成中文优化的 BGE-M3,精度回升到 92%。
本章从源码视角逐一拆解 RAG 管线的六个环节,帮你建立"搜不到→定位到管线环节→修复"的精确排查能力。