跳到主要内容
技术WHITEHOLE

索引与重排的协同优化:先定瓶颈再动手

向量索引与重排经常被放在一起讨论,实际它们解决的是不同问题:索引决定候选集里有没有正确答案,重排决定正确答案能不能排到前面。优化顺序应当先确认瓶颈在哪一段,再决定动手的位置。本文说明两段各自的瓶颈表现、组合调参顺序、什么时候不值得加重排,以及验收方式

技术RAG向量索引

索引与重排的协同优化,指的是先判断瓶颈在取候选还是在排顺序,再决定动手的位置。这两段经常被同时调整,结果是收益无法归因 —— 变好了不知道是哪一步起作用,变差了也不知道该回退哪一步

两段各自的瓶颈表现

  • 索引侧瓶颈:正确答案根本不在候选集里,表现为换了问法也答不出来。
  • 重排侧瓶颈:正确答案在候选集里但没有进入前几名,表现为偶尔答对、结果不稳定。
  • 两段都正常:此时问题多半出在上下文组装或生成环节,继续调检索收益有限。

索引侧先看哪几处

  • 切分粒度:切得太碎会丢失上下文,切得太大则命中精度下降,需要按文档类型分别设定。
  • 文本预处理:标题、表格、编号在进入索引前是否被正确处理,直接影响可比性。
  • 候选数量:取得太少会在第一步就丢掉正确答案,之后无法补救。
  • 元数据过滤:密级与时效过滤如果过紧,会把可用内容挡在候选集之外。

重排侧先看哪几处

  • 重排依据:是否按当前问题的类型排序,例如编号类问题需要精确匹配优先。
  • 候选规模:送进重排的候选太多会拉长延迟,太少则重排无从发挥。
  • 同分处理:分数相同时的排序规则要稳定,否则同一问题两次得到不同答案。
  • 延迟预算:重排通常明显增加耗时,需要事先约定可接受的上限。

组合调参的顺序

  • 先固定候选数量,只调切分与预处理,把召回做稳。
  • 再在稳定的召回上引入或调整重排,观察前几名的变化。
  • 最后调组装环节,包括送入上下文的数量、顺序与来源标注。
  • 每一步只动一个变量,并保留前后对照,否则改动效果无法判断。

什么时候不值得加重排

  • 候选集很小且正确率已经稳定:加重排只是增加延迟,收益有限。
  • 延迟预算很紧:交互式问答对首字响应敏感时,重排的代价可能超过收益。
  • 瓶颈在召回:候选集里没有正确答案,重排无法凭空创造。
  • 重排与业务语料不匹配:通用重排模型对企业内部术语的判断可能不如简单规则。

验收

  • 分阶段指标可查:召回是否包含正确答案、正确答案的排名位置各有一条记录。
  • 每次调整都注明动了哪一段,并有前后对照结果。
  • 延迟变化有测量,而不是只在准确率上比较。
  • 同一问题重复提问的结果稳定,不因排序随机性而漂移。

一次改动怎么验证

调检索最容易出现的问题是「感觉变好了」。可行的做法是把验证变成固定动作:同一批问题、同一套判定规则、改动前后各跑一次,并记录是哪一段发生了变化。

  • 固定问题集:每次使用同一批问题,避免问题本身变化带来的干扰。
  • 记录位置:不只记录答对与否,还要记录正确答案排在第几位。
  • 记录延迟:准确率提升若伴随明显延迟上升,需要一并呈报。
  • 注明变量:一份记录只对应一次改动,多个变量混在一起就失去意义。

FAQ

常见问题

与这篇相关、并且被问得最多的几个问题

重排模型要选多大的
没有通用答案。先确认重排确实是瓶颈,再用业务问题实测不同规模的实际收益与延迟代价,而不是按模型规模推断效果
切分粒度怎么定
按文档类型分别设定:制度类适合按条款切,说明类适合按小节切,表格与图表需要单独处理,不宜统一成固定字数
优化之后怎么证明没退化
保留一批带标准答案的问题,每次调整后复跑,并同时记录前几名位置与延迟,作为可比对的基线