ai
ai/rag/hybrid-retrieval.md
medium
ai-rag-hybrid-retrieval
RAG 混合检索规约 — 向量+BM25 用 RRF 融合,再用 cross-encoder/ColBERT 重排并强制 top-k 限制。Use when 设计 RAG 检索召回 / 加 rerank / 排查召回不准时。
混合检索重排rrf 融合hybrid retrievalbm25cross-encoder rerank
paths
*.java*.py*.md
RAG · 混合检索与重排
本条只管「召回+融合+重排」。chunk 怎么切见
chunking.md;用什么 embedding 见embedding-selection.md;回答约束见anti-hallucination.md。
规则
| 环节 | 推荐 | 规约级别 |
|---|---|---|
| 默认检索 | 向量 + BM25 混合,不要只走纯向量 | 应成规约 |
| 融合 | 两路结果用 RRF(Reciprocal Rank Fusion) 融合 | 应成规约 |
| 重排 | cross-encoder / ColBERT 重排,强制 top-k 限制(神经重排延迟高) | 应成规约 |
| 上下文组装 | 回传 parent chunk + 元数据,控总 token,按相关度裁剪 | 应成规约 |
标准流水线
- 向量召回 top-N(语义相似)。
- BM25 召回 top-N(关键词/精确匹配,补向量漏的术语/专名)。
- RRF 融合两路排名,按融合分取候选集。
- rerank:cross-encoder 对候选集重排,只取 top-k(如 top-5)进上下文。
- 组装:回传 parent chunk + 元数据,控总 token。
混合 + 重排相比纯向量可显著降幻觉(第三方基准 >40%,须自测)。
反例
- ❌ 只用纯向量召回 → 专有名词/编号类查询漏召回,BM25 本可补上。
- ❌ rerank 不限 top-k、把几百条都重排 → 延迟爆炸(神经重排逐对打分很慢)。
- ❌ 召回多少就喂多少给模型 → 上下文超长、噪声多、成本高,应按相关度裁剪。
自检
- [ ] 默认走向量 + BM25 混合,而非纯向量?
- [ ] 两路用 RRF 融合?
- [ ] rerank 强制了 top-k 限制(控延迟)?
- [ ] 上下文回传 parent chunk + 元数据并按相关度裁剪、控总 token?
- [ ] 引用的「降幻觉 >40%」标注为量级参考、需自测?
相关
- 父:
./index.md - 兄弟:
embedding-selection.md(向量来自哪个模型) - 兄弟:
anti-hallucination.md(检索到的上下文怎么约束回答)