技术 · 熟练

答不准的时候,先别急着换重排器

同一批题、同一个模型,差 14 分的是「再检索一次」这个动作
检索回来的东西不准,最常见的两个补救是「换个更强的模型」和「加个重排器」。有一组 824 道多跳题的对照实验给出了第三个答案:18 条 RAG 管线里最好的那条只有 78.9%,而同一个模型、同一批文档,把「检索一次就生成」改成「检索 → 读 → 再检索 → 生成」,准确率到 92.7%。这一页不教调参,只给一个先后顺序:先看有没有第二次检索,再谈重排器 —— 因为在这组实验里,小重排器让最好的管线掉了 9 分,大重排器几乎没帮上忙。
方法 · 一图看懂
1
先确认它只检索了一次 — 管线若是「检索→拼上下文→生成」一条直线,模型没有任何机会说「我还得再看一处」
2
给它一次再检索 — 读完第一轮结果后允许它提第二个问题、再取一次;这 14 分就来自这一步
3
重排器放到第二次之后 — 它只重排已有候选;候选里没有正确段落时,它只能把错的排整齐
4
用同一批题做对照 — 换结构不换题:同模型、同文档、同一批问题,只改「一次 / 两次」,差量才数得出来
原理 · 为什么有效
为什么「再检索一次」比「排得更好」值钱 —— 排序只在已有候选里挑;而多跳问题的答案,第一轮根本不在候选里。检索一次时,你交给模型的是「最像这个问题的那几段」;允许它读完再问一次,它才有机会把「第一段里提到的那个名词」当成新线索去找。这不是模型变聪明了,是搜索空间被你放开了。反过来说,重排器只重排已经拿回来的东西 —— 候选里没有正确段落时,它只能把错的排得更整齐。这也解释了小重排器为什么会掉分:它把「看起来相关」的段落顶上来,挤掉了本来能提供线索的那几段。
适用场景
适用:自己的知识库问答、内部文档检索、多跳问题(答案要串两三个文档才拼得出来)。⛔ 不适用:单跳事实查询(「某条政策的生效日期」)、候选本身就只有十几段的小库 —— 那时多一轮检索只是多一次调用,差量接近零。
自测 · 5 问
我的管线里,模型读完第一轮结果后,还能不能再提一个检索请求?
上一次「答不准」,是候选里根本没有正确段落,还是正确段落在第 8 位没被排上来?
我加重排器之前,量过它的差量吗(同一批题,加与不加各跑一遍)?
我的对照实验,是不是只改了「检索次数」这一个变量?
我用的题,是真实用户问过的,还是我自己编的?
怎么上手 · 验证步骤
今晚就能做的一件事:从最近答错的十个问题里挑三个多跳的,把「检索一次」和「允许再检索一次」各跑一遍,记下答对几个。差量为 0 的那类问题,先别动管线;差量明显的,再回去看重排器要不要留。
自检动作:把第一轮检索回来的五段原文打印出来,只问一句 —— 正确答案在不在这五段里?不在 ⇒ 你缺的是第二次检索;在但模型没用上 ⇒ 那才是排序或提示词的问题。两种情况修法完全不同,先用这一句把它们分开。
[C级]r/LocalLLaMA《We benchmarked 18 RAG pipelines against an agent loop on FRAMES》(824 道多跳题 · 同模型同嵌入同文档 · 最佳 RAG 管线 78.9% · agent loop 92.7% · 小 reranker 使最佳管线掉 9 分 · 大 reranker 几乎无帮助) [C级]Dauntless Systems 每日摘要 2026-10-02(转述同组对照:差量来自结构而非模型 · 检索一次就生成是最弱配置) 同类:RAG 答不准,从哪开始排查? · 工具返回的那一坨,别让它住进上下文
继续往下读
同级:工具返回的那一坨,别让它住进上下文 下一级:上下文爆掉,压缩不是第一步 随机一篇