【RAG 学习笔记 03】Rerank 与查询改写:把「它退款怎么算」救回来的两招 这是 RAG 学习笔记的第 3 篇讲两个提升答案质量的关键环节Rerank重排序和查询改写。它们解决的是两类不同的失败Rerank 解决对的文档没排前面查询改写解决用户的问题本身不适合检索。本系列导航00 开篇用「开卷考试」理解 RAG 与我的学习方法01 Chunking 切块与 Embedding 选型02 在线链路七步走与混合检索 RRF03 Rerank 与查询改写本篇04 工程化延迟、缓存、成本与权限05 评测调优与三个进阶架构一、Rerank召回像海选Rerank 像面试为什么需要 Rerank召回阶段是双塔粗排Query 和 Doc独立编码交互不充分Rerank 是 Cross-EncoderQuery 和 Doc拼接后联合编码注意力机制能捕捉词级交互精度更高但慢。类比召回像海选从 1000 人里选出 50 个可能合适的Rerank 像面试从 50 个里精挑 5 个最合适的。举例法律合同 RAG——正确文档在召回 Top-50 里排第 35Rerank 后提升到第 2答案正确率从0.62 提升到 0.89。典型流程与延迟控制召回 Top-50 → Rerank 取 Top-5~10 → 生成延迟控制只精排 Top-20p95 延迟约 35ms。这里体现的还是一个熟悉的工程思想用贵但准的模型只处理少量候选。前面粗排负责别漏这里精排负责排对成本花在刀刃上。图图以向量粗召回为例查询与文档独立编码后快速检索候选再由Cross-Encoder对查询与候选文档联合打分并排序。文档向量通常可离线预计算精排只能处理已有候选召回遗漏需上游改进候选卡片数量仅作示意。二、查询改写三种方法方法做什么查询改写把口语化问题改成适合检索的表达Multi-Query生成多个互补查询扩大召回HyDE先生成假设性答案再用答案的向量去检索举例多轮对话里的指代问题用户先问会员年卡多少钱再问它退款怎么算处理方式结果不改写直接用它退款怎么算检索模型不知道它指什么答案正确率 0.45改写后把它还原成会员年卡改成会员年卡的退款条件是什么答案正确率 0.88**一个代词正确率差了一倍。**这是我第一次直观感受到查询改写的价值。HyDE 的风险面试爱问事实型问题如退款要几天模型生成的假设答案可能是错的把7 天编成15 天用它去检索就会跑偏。所以HyDE 只用在开放性问题上不要用在事实型问答上。兜底机制如果改写后 Top-1 相似度低于阈值如 0.6回退到原始查询。这个兜底逻辑很值得记**改写是有风险的操作所以一定要有回退路径。**不要把改写当成必然变好的步骤。三、多轮对话每一轮的 Query 必须自包含面试文档里给了三个关键点指代消解把它这个还原成实体对话历史压缩只保留最近 3 轮更早的做摘要会话级缓存简单追问可以复用已检索的文档。核心原则每轮检索的 Query 必须是自包含的。也就是说不能依赖上一轮检索到的文档——因为上一轮的文档是上一轮的问题召回的这一轮的问题可能完全需要另一批文档。举例还是那个例子不改写正确率 0.45指代消解后 0.88。我把它记为一句更通俗的话“把每一轮都当成第一轮来检索”只是把历史里的指代补全。图查询改写结合对话上下文补全指代使当前检索问题自包含改写过程不推断或补造商品政策。四、这一篇的记忆卡概念一句话Rerank双塔粗排不交互 → Cross-Encoder 联合编码更准只精排少量候选流程召回 Top-50 → Rerank Top-5~10 → 生成延迟只精排 Top-20p95 约 35ms查询改写把口语/指代问题改成适合检索的表达0.45 → 0.88Multi-Query生成多个互补查询扩大召回HyDE用假设答案的向量检索事实型问题有风险兜底改写后相似度低于阈值 → 回退原始查询多轮每轮 Query 必须自包含不能依赖上一轮文档五、我的复盘这一篇让我形成了对 RAG 在线链路的一个整体判断在线链路的每一步都是在补救上一步的不足。单路召回的不足 → 混合检索补混合检索排序不准的不足 → Rerank 补用户问题不适合检索的不足 → 查询改写补改写和检索都可能失败的不足 → 兜底和拒答补。所以面试里被问为什么要做 XX时最好用的答法是“因为上一步/单靠某一路做不到 YY”然后给一个对比数字。文档里那些 0.78→0.91、0.62→0.89、0.45→0.88 的数字就是为这个准备的。下一篇进入工程化延迟怎么优化为什么并行召回取最大值、成本四层怎么拆、权限为什么必须在检索阶段过滤。