知

模块二 · 上下文工程

第 5 / 14 节19 分钟阅读型

检索质量:为什么接上向量库还是不好用

向量检索擅长语义,不擅长精确;同类文档还会互相挤占。这一节把失效模式、混合检索、重排与元数据过滤讲成一套可验证的做法。

读完这一节,你能做到

  1. 说清向量检索擅长什么、不擅长什么。
  2. 用混合检索补上精确匹配的短板。
  3. 用重排把候选压到 3-5 条,而不是把 top-k 调大。
  4. 用两个指标验证检索改动是否真的变好。

一、向量检索的定位

它做的是语义相近:把问题与文档映射到同一空间,按距离排序。这带来一个天然优势——用户说"怎么退钱",能召回写着"退款流程"的段落。

但它也带来一个天然盲区:它不擅长精确匹配。产品型号、订单号、错误码这类"字面必须一模一样"的查询,向量往往抓不住。

二、三个常见失效模式

失效表现根因
精确词失效搜"X200 电池"召回一堆"电池"向量抹平了字面差异
同类挤占top-5 全是同一个模板的文档同类文档在空间里挤在一起
短问题漂移用户只输入三个字,结果不相关问题信息量不足,向量无方向

这三种失效,加再多参数也解决不了,因为它们不是参数问题,是检索方式的问题。

三、混合检索:两条腿走路

基本结构

问题 → ┬→ 向量召回 top-50(管语义)
       └→ 关键词召回 top-50(管字面)
       → 合并去重 → 重排 → top 3-5

融合怎么做

不要简单拼接(前半是向量结果、后半是关键词结果),而要按名次融合:两路都排前面的候选优先。常见做法是给每个候选按"两路名次"算一个综合分,再排序。

关键词那一路要不要分词

中文要么用分词,要么用字符级 n-gram。选哪种取决于你的查询形态:产品型号多,字符级更稳;自然语言问题多,分词更准。这一点值得用评估集测,而不是拍脑袋。

四、重排:性价比最高的一步

为什么要重排

粗召回为了"不漏",只能放宽;放宽就带来噪声。重排的作用是"把对的挑出来"。

它和向量召回的区别:向量召回是"问题与文档分别编码再比距离",重排是"问题与文档放一起看",所以对细节更敏感——代价是慢,只能用在少量候选上。

流程

粗召回 20-50 条 → 重排逐条打分 → 取前 3-5 条 → 拼装

经验参数

  • 粗召回 20-50:太少会漏,太多拖慢重排。
  • 最终 3-5 条:再多就是噪声与成本。
  • 重排模型不必追求最大,先看它在你数据上的效果。

什么时候不该重排

三种情况可以省掉这一步:

  1. 候选本身就少:库很小,粗召回 5 条已经能命中,重排只是多一次延迟。
  2. 查询形式固定:产品型号、订单号这类精确查询,关键词那一路已经能解决,重排收益很低。
  3. 延迟预算极紧:交互型场景要求首字 500ms 内,重排会占掉大头,可以改成“粗召回 + 规则过滤”。

判断标准:重排带来的召回质量提升(用评估集量)能不能用过它增加的延迟(用 P95 量)换回来。两个数字都拿不出来,就不要加。

五、元数据过滤:最容易被忽略的一步

检索前先按条件筛,能消掉大量"像但不对"的结果:

  • 权限:用户能不能看这份文档。
  • 时间:政策类文档只要最新版本。
  • 类型:问答库里不该出现内部会议纪要。
  • 范围:按产品线、地区、语言过滤。

这一步放在检索前(预过滤)比放在检索后(后过滤)更好:后过滤会导致"取了 10 条,过滤完只剩 1 条",召回质量直接崩。

六、怎么验证检索改动有效

两个指标就够

  1. 召回@k:正确片段有没有进前 k 条候选。
  2. 排序位置:正确片段最终排第几(越靠前越好)。

做法

建一个 50-100 条的小评估集:每条问题配一个"正确片段 id"。改任何参数(切分、召回路数、重排、top-k)都跑一遍,只看这两个数的变化。

不要做的事

  • 换完参数凭几个样例"感觉好多了"。
  • 同时改三处,然后不知道是哪一处起作用。

七、常见坑

  1. 只调向量模型。 精确查询场景怎么调都不行,得加关键词。
  2. 把两路结果简单拼接。 等于关键词结果永远排后面,没有融合。
  3. top-k 调到 20。 噪声压过答案,成本还高。
  4. 后过滤代替预过滤。 优先级一高,召回直接空。
  5. 没有评估集。 改完只能凭感觉,越改越乱。
  6. 忽略短问题的处理。 用户输入三个字时,应该先追问,而不是硬检索。

八、动手任务:自写 → AI 写 → 对比 → 取舍

四步不跳:① 自己写(限时,关掉补全)→ ② 让 AI 写同一题 → ③ 逐条比对 → ④ 说出保留谁的写法。

① 自己写

  1. 挑 10 条真实问题,标出"正确片段";分别用纯向量与"向量 + 关键词"各跑一遍,记录召回@5。
  2. 为你的场景写一份元数据过滤规则(权限、时间、类型、范围)。

② 让 AI 写同一题

把第 1 题交给 AI,补一句 给出评估表结构(问题、正确片段 id、纯向量命中、混合命中),并指出哪些问题属于精确词场景。

③ 对比要盯的点

  • 它有没有把"精确词"单独识别出来?
  • 融合策略是"按名次"还是"按分数直接相加"(后者不可比)?
  • 它有没有提到预过滤与后过滤的差别?

④ 一句话取舍

混合检索带来的提升,值得多维护一路索引吗?在你的场景里怎么判断。

九、自测

  1. 向量检索擅长什么、不擅长什么?
  2. 三个失效模式分别是什么?
  3. 混合检索的两路结果应该怎么融合?
  4. 重排为什么比调 top-k 更有效?
  5. 预过滤与后过滤的区别是什么?为什么优先用前者?
  6. 验证检索改动,你只看哪两个指标?

参考答案要点:语义相近,不擅长精确匹配;精确词失效、同类挤占、短问题漂移;按名次融合;它把候选从"相似"筛成"相关";预过滤在检索前缩小范围,后过滤会让召回变空;召回@k 与正确片段排名。

配套题目

★ 越多越该先背;点题目可看完整答案与深入版。

提示:读完可以顺手做几道对应题目,检验是否真的理解