知识库总差一口气?给 Dify 的 RAG 加上混合检索和重排序
只靠向量检索,遇到人名、编号、缩写就抓瞎。把关键词检索和重排序补上,准确率往往能立竿见影地上一个台阶。
做企业知识库的人多半都遇到过这个尴尬:语义相近的问题答得挺好,可一旦用户问的是某个具体的产品型号、合同编号、人名或缩写,系统就开始驴唇不对马嘴。这往往不是模型的锅,而是检索方式单一造成的。
向量检索的长处和短板
向量检索的强项是「理解意思」:你问「怎么退货」,它能找到讲「退换货流程」的段落,哪怕用词完全不同。但它的短板也在这:遇到需要精确匹配的东西——一个型号、一串编号、一个专有缩写,它常常会被语义带偏,捞回来一堆「看起来相关、其实没对上」的内容。
关键词检索恰好相反,它认死理,精确匹配是它的强项,但完全不懂语义,换个说法就找不到了。两者各有各的盲区。
混合检索:让两种方式一起上
混合检索(Hybrid Search)的思路很朴素:别二选一,两个一起查。同时走向量索引和关键词索引,把两边的结果合起来。这样既保住了语义理解,又不会在精确匹配上掉链子。Dify 的知识库直接支持向量、全文、混合三种检索模式,切换一下就能用上。
“向量检索负责「听懂你想问啥」,关键词检索负责「一个字都不许错」,合起来才是企业知识库该有的样子。
重排序:把真正相关的顶上来
混合检索捞回来的内容,来自不同的检索方式,相关性参差不齐,直接全塞给模型,里面难免混着噪音。这时候加一层重排序(rerank)就很值:用一个更精细的重排模型,对召回结果按「跟问题到底有多相关」重新打分排序,把最相关的几条顶到最前面,再交给大模型。Cohere Rerank、bge-reranker 这类都是常用的选择。
微软在 Azure AI 上做过对比实验,结论很一致:混合检索叠加重排序,能明显提升文档召回的相关性,问答的全面性和准确度都跟着上来。这也和我们项目里的体感吻合——很多团队卡在「答不准」,加上这两步就缓过来了,根本没动模型。
落地时的小提醒
- 先确认文档解析和切分没问题,检索再强也救不了一开始就读错的内容
- 重排序会增加一点延迟和成本,但通常很值,别为了省这一步牺牲准确率
- 上线后用一批真实问题持续评估,凭数字判断到底有没有提升,别凭感觉
重排序模型怎么选
重排序模型不是越大越好。常见的有 Cohere Rerank 这类闭源 API,效果稳但要联网、按量付费;也有 bge-reranker 这类开源模型,可以私有化部署、数据不出域,对数据敏感的企业更友好。我们一般先用开源的小模型试,效果不够再考虑更强的。延迟敏感的场景,还得权衡重排带来的那点额外耗时——值不值,用真实数据说话。
别忽略元数据过滤
混合检索和重排序之外,还有个常被忽略的提效手段:元数据过滤。给文档打上部门、时间、类型这些标签,检索时先按标签把范围缩小,再做向量和关键词检索,既快又准。比如用户问的是「今年的报销政策」,先用时间标签把旧版本排除掉,后面就不会捞到一堆过期内容来误导模型。这一步几乎零成本,效果却很实在。
这几招叠起来用,RAG 的准确率往往能上好几个台阶,而且全程没动模型。混合检索加重排序,算是 RAG 优化里性价比最高的一档动作:改动不大,见效却快。下次知识库「总差一口气」,先别急着换模型,把这两步补上试试。



