一、问题背景:复杂文档格式如何“拖累”召回效果
近期,我们在一个项目中借助Milvus向量数据库实现RAG召回。业务要求将Excel表格中的数据导入Milvus,同时还需混入Word、Markdown等多种格式的文档。由于Collection的Schema无法按Excel表的列来设计,我们只能将Excel中的每条数据整体向量化,存入content字段,再通过该字段进行向量检索。
然而,问题随之出现:用户查询时使用的关键词与Excel表中的数据完全一致,但召回结果的相似度仅为70%左右,而业务要求却需达到80%以上。
举个例子:
- Excel表中有一条公司规定:
“员工无故迟到早退发现三次以上,则扣三天工资以示惩戒。” - 用户输入的查询为:“迟到早退”
- 从Milvus召回该规定时,相似度仅为77%,未达到业务要求。

为什么相似度这么低?
根本原因在于文档拆分与向量化的方式。由于文档格式复杂,Excel中的整行数据被当作整体进行向量化,其中可能包含大量与查询无关的信息(如编号、备注、其他无关字段),这些“干扰项”导致向量相似度降低。
“在RAG中,文档拆分方式直接影响召回效果,因此文档处理与召回策略同等重要。”
前期文档处理的质量越高,后续召回效果就越理想。但在实际业务中,我们往往难以完美拆分所有文档,因此需要从召回策略上寻找突破口。
---二、解决方案一:降低相似度阈值 + Rerank重排序
核心思路:既然无法通过一次检索达到80%的相似度,那就先降低阈值(例如降至70%),召回更多候选结果,然后借助Rerank重排序模型从这些候选中筛选出真正相关的内容。
操作步骤
- 调整Milvus搜索参数:将
search方法中的metric_type保持为IP或L2,设置params中的radius(相似度下限)为0.70,range_filter可不设,使系统返回相似度大于70%的所有结果。 - 获取候选集:从Milvus中获取前K个(如Top-10)相似度结果。
- 应用Rerank模型:使用交叉编码器(Cross-Encoder)或专门的重排序模型(如bge-reranker)对候选列表进行重新打分,按新得分排序,取Top-N。
优势:
- 无需改变原有数据存储结构,实现简单便捷。
- Rerank能有效消除向量化带来的干扰,显著提升最终结果的相关性。
小提示:如果降低阈值后召回结果过多,可适当提高Top-K值(如取20~30条),确保Rerank有足够多的候选。同时,Rerank模型的计算成本较高,建议在离线或异步场景下使用,或控制候选集大小。
常见问题
Q:降低相似度阈值后,会不会召回大量无关数据,影响最终效果?
A:会。但正是Rerank发挥作用的时机——它会对所有候选进行精细排序,将真正相关的结果排在最前面。只要Rerank模型训练良好,无关内容会被有效过滤。如果发现噪声依然较多,可以尝试调整Top-K数量,或提高Rerank模型的得分阈值。
---三、解决方案二:多路召回 + Rerank重排序
核心思路:既然文档格式混杂导致向量干扰,那就在文档处理阶段将不同格式的文档分开存储到不同的Collection中(例如excel_collection、word_collection、markdown_collection),然后针对每种Collection分别进行召回,最后将各路召回结果合并,再进行Rerank重排序。
操作步骤
- 文档预处理:将Excel、Word、Markdown等文档按来源拆分,分别提取文本并向量化,存入独立的Milvus Collection。确保同一Collection内文档格式统一,减少干扰。
- 多路召回:对用户输入的Query,同时向每个Collection发起检索,各自返回Top-K结果。
- 合并与去重:将各路结果合并为一个列表,根据doc_id进行去重。
- Rerank重排序:与方案一相同,使用Rerank模型对所有候选重新打分并排序。
优势:
- 不同文档之间的干扰降至最低,局部召回效果更佳。
- 适合大数据量场景,可针对每种文档类型进行调优(如Excel用表格解析、Word用段落拆分)。
小提示:多路召回时,每路返回的结果数量可根据文档总量动态调整。例如,Excel集合数据量大但字段冗余,可只返回Top-5;Word文档内容精炼,可返回Top-10。最终合并后的候选集建议控制在20~30条以内,以保障Rerank效率。
常见问题
Q:多路召回的“路”太多,会不会导致检索延迟显著增加?
A:是的,每次检索都需要访问多个Collection,延迟会线性增加。可以采取以下优化措施:
- 使用Milvus的多副本或分布式查询并行处理各Collection。
- 对频繁查询的Collection进行缓存。
- 通过业务规则预判用户可能查询的文档类型,只发起部分路由(例如用户明确指明“查看公司规定”则只查Excel)。
四、总结:两条路径,一个目标
在RAG系统中,解决召回准确率低的问题,归根结底离不开两种途径:
- 前期文档处理:提升文档拆分与向量化的质量,减少干扰(如多路召回、精细化分块)。
- 后期召回策略:优化检索和排序逻辑(如降低阈值+Rerank、多路召回+Rerank)。
需要注意的是,召回准确性往往与检索速度呈负相关。在数据量较大的情况下,您需要根据业务场景平衡速度与质量:
- 对实时性要求高的场景(如在线客服),优先选择方案一(降低阈值+Rerank),并控制候选集大小。
- 对准确性要求极高的场景(如法律条文检索),可采用方案二(多路召回+Rerank),配合离线缓存降低延迟。
希望本文的案例与方案能帮助您解决RAG召回中的相似度瓶颈。如果您在实践中遇到其他问题,欢迎在评论区留言交流。
