在 RAG 的检索环节,系统通常会从向量数据库中召回多个候选文本片段(例如 top‑k = 10 或 20),然后按原始检索得分排序。但检索得分高并不完全等同于“对当前问题最有帮助”——语义相似度可能被冗余信息、格式噪音或近义词干扰,导致关键片段被埋没在后面,而模型在生成时对靠后上下文的注意力往往较弱。上下文重排正是为了解决这一问题:在检索结果进入大模型之前,用更聚焦的方法对片段进行二次排序,把最相关、最有助于回答的片段放到最前面。
1. 为什么需要重排
向量检索虽然速度快,但它是基于粗粒度的语义相似度,无法区分信息是否直接回答提问。实际痛点包括:
- 同名不同义:检索“苹果价格”时,既可能召回水果报价,也可能召回科技公司股价。向量分数接近时,对生成最有用的片段未必得分最高。
- 信息重复或过时:多个版本的政策文档可能都被召回,旧版本虽然被检索到但不应作为主要依据。
- 上下文窗口有限:大模型处理输入时,对中间和尾部信息的关注度会下降,高质量片段如果位置偏后,可能被模型忽略或产生不准确的回答。
重排相当于给每个候选片段打一个“问题相关性”的精确分,让最关键的证据一定出现在模型视野的最前方。
2. 重排的常见实现方式
实践中常用两种思路,可以单独或结合使用:
a) 使用专门的重排模型(Cross‑encoder)
这是目前效果最好的方式。与嵌入模型(双塔式)不同,重排模型将问题和候选片段拼接后一同输入,输出一个“问题‑片段”的匹配分数。典型的开源模型如 bge-reranker-large、Cohere Rerank 等。步骤如下:
- 向量检索获得前 N 个候选片段(N 通常取 30‑100,兼顾效果和速度)。
- 对每个候选片段,调用重排模型计算它与用户问题的相关性分数。
- 按重排分数从高到低排序,取前 M 个(例如前 5 个)作为最终上下文。
b) 基于规则的加权调整
若不希望增加模型调用开销,也可以用规则快速调整顺序:
- 时效性加权:如果文档有明确的日期或版本号,适当提升最新文档的排名。
- 来源权威性加权:将正式版政策文件、经审核的规范文档的片段前置,FAQ 或草稿置后。
- 关键词命中加分:当片段中包含问题中的核心实体词时微调排名。
3. 重排的真实效果
某保险公司内部 RAG 系统在对比测试中发现,引入重排后,回答的事实准确率从 82% 提升到 91%,尤其对于需要精确匹配条款或涉及多个政策同时有效的问题,改善显著。一个典型例子:用户问“异地就医报销比例是多少?”,向量检索召回 8 个片段,其中一段是关于异地就医的旧政策,排在第一位;另一段是新修订的比例说明,排在第三位。直接使用原始顺序,模型可能综合生成一个混乱的回答。经过重排,新政策片段被移到第一位,模型直接基于它生成了准确的最新比例。
4. 实用指导
- 重排不应替代检索,而是作为检索后的精细化筛选。通常先快速召回一个较大集合,再重排小集合是性价比最高的方案。
- 注意延迟和成本:重排模型调用会增加几百毫秒的耗时,可根据场景决定是否开启。对实时性要求高的客服系统,可选择轻量级重排模型或仅对候选数 N 适当缩小。
- 重排后仍需保留溯源信息:无论顺序如何调整,每条片段自带的来源元数据保持不变,确保最终回答仍可追溯到原文。
- 可结合文档结构信息:如果文档有标题、层级,可将同一章节的其他片段也适度提分,增强上下文连贯性。
通过上下文重排,RAG 系统能更精准地把“最好”的参考资料呈现在生成模型面前,在几乎不增加回答复杂度的前提下,进一步提升准确性和可靠性。