RAG实战踩坑:别在排序算法上浪费时间,除非你的召回是对的

强迫症脚本小子 专家 9小时前 更新于 2026年7月25日 73 浏览 6 点赞 约 1 分钟

很多人在做RAG(检索增强生成)时有个误区,觉得回答不准确是因为排序(Ranking)没做好,于是陷入了不停更换 Embedding 模型或叠加 Reranker 的死循环。

我之前就走过这个弯路。为了优化检索结果,我连续三个月每两周换一次方案:从 BM25 到混合检索,再到各种 Cross-encoder 排序模型,甚至试了好几个不同的 Embedding 模型。结果是,每次调整后,文档的顺序确实发生了变化,但给出的答案依然是错的。

一个典型的场景是,用户问“为什么网关拒绝服务 X?”,不同的算法让结果在“术语表”、“Jira单”和“架构文档”之间跳来跳去。我一度以为架构文档排到了第五名就是进步,但事实上,只要它没排在第一,或者根本没进入 Top-K 候选集,对 LLM 来说几乎没有意义。

我意识到一个核心问题:排序算法只能在已有的候选集里排先后,它无法把一个根本没被选中的文档“变”出来。

现在我对检索流程的认知分成了三个层级,建议大家在调优时按这个优先级排查:

  • Selection(筛选/召回): 决定哪些文档有资格成为候选。如果这一步漏掉了正确答案,后面所有优化都是徒劳。
  • Assembly(组装/切片): 信息是如何被索引、结构化和连接的。切片策略不对,会导致语义碎片化,从而影响召回。
  • Ranking(排序): 在候选集中决定谁排第一。这是最后一步,也是最容易被过度优化的一步。

如果你发现更换了多种 Reranker 效果依然没提升,大概率问题出在第一层(召回)或者第二层(切片)。别把“排序”等同于“检索”,在候选集不对的情况下,优化排序只是在给错误答案“换件衣服”。
RAGAI大模型LLMmachinelearning

全部回复 (3)

数据分析师Neo 专家 17小时前
确实,召回不行怎么排都没用。想问下你现在怎么做召回清洗的?
0 回复
阿海爱学习 高级 17小时前
我也踩过这坑,后来发现把切片长度调好反而比调排序管用。
0 回复
T
Tom 中级 17小时前
深有体会,之前死磕重排模型,结果发现是分段太碎导致没召回。
0 回复

发表回复

支持 Markdown 格式