Reranker 的价值被普遍高估,BM25 的兜底能力被普遍低估------两者都需要你自己的数据来验证。
Reranker 消融:当数据反驳预期
学术界和社区普遍认为 Reranker 显著提升 Faithfulness(+17%),但在我们的 8 条测试用例上只加了 0.7%。
| 指标 | 有 Reranker | 无 Reranker | 差异 |
|---|---|---|---|
| Faithfulness | 0.487 | 0.484 | +0.7% |
| Answer Relevancy | 0.530 | 0.662 | -20% |
| Context Precision | 0.048 | 0.042 | +14% |
| Context Recall | 0.226 | 0.198 | +14% |
两个关键发现:
- Faithfulness 提升不显著------不是 Reranker 不行,是我们的测试集和文档声称的不一样
- Answer Relevancy 下降 20%------阈值 0.3 太激进,减少了上下文多样性
优化建议:阈值调至 0.1,top_k 设为 5。
BM25 兜底验证
| 指标 | Hybrid | BM25 Only |
|---|---|---|
| 检索有结果率 | 88% | 88% |
| Faithfulness (RAGAS) | 0.798 | 0.750 |
| Answer Relevancy (RAGAS) | 0.372 | 0.360 |
| Context Recall (RAGAS) | 0.143 | 0.171 |
| 上下文数 | 3.0 | 2.8 |
| p50 端到端延迟 | 2566ms | 2647ms |
三个关键发现:
- Faithfulness 下降仅 6%(0.798→0.750)------BM25 不会导致"幻觉翻倍","问答保真度"的损失比预期温和得多
- Context Recall 反而略升(+20%,0.143→0.171)------BM25 的关键词匹配在部分查询中意外地比向量语义更贴合 ground truth
- Answer Relevancy 基本持平(-3%,0.372→0.360)------去掉 Dense 对答案相关性影响很小
BM25 的真正短板不是"是否能用",而是语义关系------"规章制度"和"考勤/请假/保密制度"的上下位关系,纯关键词无法理解。
兜底策略:BM25 作为"最终兜底 + 主动降级提示",告诉用户当前语义检索不可用。
两者的最佳实践
- 正常流量:Dense+Sparse 混合 + Reranker(阈值 0.1)
- Embedding 不可用:BM25 Only + Reranker + 降级提示
- 完全不可用:空上下文 + LLM 通用知识
- Embedding 降级的真正做法:切 BM25 纯关键词检索,而不是换一个 Embedding 模型(维度不匹配)
Embedding 不可用时的降级决策树
#mermaid-svg-WQX4Qt72X477Ge1f{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-WQX4Qt72X477Ge1f .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-WQX4Qt72X477Ge1f .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-WQX4Qt72X477Ge1f .error-icon{fill:#552222;}#mermaid-svg-WQX4Qt72X477Ge1f .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-WQX4Qt72X477Ge1f .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-WQX4Qt72X477Ge1f .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-WQX4Qt72X477Ge1f .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-WQX4Qt72X477Ge1f .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-WQX4Qt72X477Ge1f .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-WQX4Qt72X477Ge1f .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-WQX4Qt72X477Ge1f .marker{fill:#333333;stroke:#333333;}#mermaid-svg-WQX4Qt72X477Ge1f .marker.cross{stroke:#333333;}#mermaid-svg-WQX4Qt72X477Ge1f svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-WQX4Qt72X477Ge1f p{margin:0;}#mermaid-svg-WQX4Qt72X477Ge1f .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-WQX4Qt72X477Ge1f .cluster-label text{fill:#333;}#mermaid-svg-WQX4Qt72X477Ge1f .cluster-label span{color:#333;}#mermaid-svg-WQX4Qt72X477Ge1f .cluster-label span p{background-color:transparent;}#mermaid-svg-WQX4Qt72X477Ge1f .label text,#mermaid-svg-WQX4Qt72X477Ge1f span{fill:#333;color:#333;}#mermaid-svg-WQX4Qt72X477Ge1f .node rect,#mermaid-svg-WQX4Qt72X477Ge1f .node circle,#mermaid-svg-WQX4Qt72X477Ge1f .node ellipse,#mermaid-svg-WQX4Qt72X477Ge1f .node polygon,#mermaid-svg-WQX4Qt72X477Ge1f .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-WQX4Qt72X477Ge1f .rough-node .label text,#mermaid-svg-WQX4Qt72X477Ge1f .node .label text,#mermaid-svg-WQX4Qt72X477Ge1f .image-shape .label,#mermaid-svg-WQX4Qt72X477Ge1f .icon-shape .label{text-anchor:middle;}#mermaid-svg-WQX4Qt72X477Ge1f .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-WQX4Qt72X477Ge1f .rough-node .label,#mermaid-svg-WQX4Qt72X477Ge1f .node .label,#mermaid-svg-WQX4Qt72X477Ge1f .image-shape .label,#mermaid-svg-WQX4Qt72X477Ge1f .icon-shape .label{text-align:center;}#mermaid-svg-WQX4Qt72X477Ge1f .node.clickable{cursor:pointer;}#mermaid-svg-WQX4Qt72X477Ge1f .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-WQX4Qt72X477Ge1f .arrowheadPath{fill:#333333;}#mermaid-svg-WQX4Qt72X477Ge1f .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-WQX4Qt72X477Ge1f .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-WQX4Qt72X477Ge1f .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-WQX4Qt72X477Ge1f .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-WQX4Qt72X477Ge1f .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-WQX4Qt72X477Ge1f .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-WQX4Qt72X477Ge1f .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-WQX4Qt72X477Ge1f .cluster text{fill:#333;}#mermaid-svg-WQX4Qt72X477Ge1f .cluster span{color:#333;}#mermaid-svg-WQX4Qt72X477Ge1f div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-WQX4Qt72X477Ge1f .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-WQX4Qt72X477Ge1f rect.text{fill:none;stroke-width:0;}#mermaid-svg-WQX4Qt72X477Ge1f .icon-shape,#mermaid-svg-WQX4Qt72X477Ge1f .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-WQX4Qt72X477Ge1f .icon-shape p,#mermaid-svg-WQX4Qt72X477Ge1f .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-WQX4Qt72X477Ge1f .icon-shape .label rect,#mermaid-svg-WQX4Qt72X477Ge1f .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-WQX4Qt72X477Ge1f .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-WQX4Qt72X477Ge1f .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-WQX4Qt72X477Ge1f :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ✅
❌ 超时
✅ 恢复
❌ 仍失败
✅
❌
检索请求
Embedding
可用?
Dense + Sparse
- Reranker
Top-5 Chunks
重试 1次
超时 2s
BM25 Only
关键词检索
有结果?
(88%)
加降级提示前缀
→ 返回
空上下文
通用回答
降级结果