关键词向量与混合检索
混合检索是把关键词检索、向量检索和元数据过滤结合起来。企业 RAG 很少只靠一种检索方式,因为不同问题需要不同召回能力。
# 1. 为什么需要混合检索
向量检索擅长语义相似,关键词检索擅长精确匹配。
| 问题类型 | 更适合 |
|---|---|
| “如何申请年假” | 向量检索 |
| “ERR_10042 是什么错误” | 关键词检索 |
| “v2.3 版本接口字段 userId” | 关键词 + 元数据 |
| “报销多久到账” | 向量 + 关键词 |
# 2. 混合检索架构
用户问题
-> 查询改写
-> 关键词检索
-> 向量检索
-> 元数据过滤
-> 结果合并
-> 去重
-> 重排
-> 返回候选 Chunk
# 3. 元数据过滤
元数据过滤通常应在召回前或召回中完成。
常见过滤条件:
- 用户权限。
- 租户或部门。
- 文档版本。
- 文档类型。
- 更新时间。
- 产品线。
- 语言。
权限过滤不能放到模型回答阶段才做,否则敏感内容已经进入上下文。
# 4. 查询改写
用户问题可能很口语化,需要改写成更适合检索的形式。
原问题:这个报错咋办
上下文:用户当前页面显示 ERR_10042
改写:ERR_10042 错误原因和处理方法
查询改写要谨慎,不能改变用户真实意图。
# 5. 结果合并
关键词和向量检索会返回不同候选,需要合并。
常见方式:
- 分别取 Top K 后合并去重。
- 对不同来源结果加权。
- 使用 Rerank 模型统一排序。
- 保留命中原因用于调试。
# 6. 常见坑
| 问题 | 后果 |
|---|---|
| 只用向量 | 精确编号、代码、字段容易漏 |
| 只用关键词 | 同义表达召回差 |
| 不做权限过滤 | 可能泄露数据 |
| 查询改写过度 | 检索意图偏离 |
| 合并后不去重 | 上下文浪费在重复内容 |
# 7. Tips 快问快答
Q:什么时候必须用混合检索?
A:当知识库包含错误码、接口名、产品名、规章条款、代码和大量专有名词时,混合检索通常更稳。
Q:关键词检索是不是过时了?
A:没有。关键词检索在精确匹配、过滤和可解释性上仍然很重要。
Q:权限过滤应该在什么时候做?
A:越早越好。最好在检索阶段根据用户身份过滤,避免无权内容进入上下文。
上次更新: 2026/06/25, 17:53:09