03Bread RAG · 第 5 章
总进度 20 / 33Hybrid 检索 + LLM Rerank
向量检索能处理一些不同说法,但遇到精确编号时,字面匹配仍可能更有帮助。先用下面几类问题比较两种方式:
2026-09-28约 60 分钟380 行代码难度 ★★★★
如果想获取全套课程资料,请关注微信公众号 「AI面包君」,回复 「课程资料」 即可领取。
1. 编号和同义表达,适合怎样查?
向量检索能处理一些不同说法,但遇到精确编号时,字面匹配仍可能更有帮助。先用下面几类问题比较两种方式:
| 查询 | 向量检索需要观察什么 | 字面检索需要观察什么 |
|---|---|---|
| BW-20260301-0042 的订单 | 能否保留精确编号的差异 | 编号是否被完整识别和匹配 |
| vegan 选项 | 能否关联“植物基” | 没有共同字词时是否遗漏 |
| 员工面包福利 | 是否找到同一业务主题 | 是否同时命中关键字词 |
两种检索各有可能遗漏的内容。本章尝试把它们的候选合并,这种做法叫 hybrid,也就是混合检索。
用户查询
│
┌───────────┴────────────┐
▼ ▼
+-------------+ +-------------+
| 向量检索 │ │ BM25 检索 │
| top-10 │ │ top-10 │
+-------------+ +-------------+
│ │
└───────────┬────────────┘
▼
+----------+
| RRF 融合 │ ← 用 Reciprocal Rank Fusion
+----------+ 合并两个排名列表,跳过分数尺度问题
│
▼
+-----------+
| LLM 重排 │ ← 给 LLM 看 top-K 候选
+-----------+ 让它选最相关的 final_k 个
│
▼
拼进 prompt 让 LLM 回答
本章把这套完整做出来。
<!-- bread-visual:start -->
<!-- bread-visual:end -->图解: 编号更适合字面匹配;同义表达更依赖语义。 RRF 融合的是排名,不是直接相加两种检索的原始分数。
2. 跑起来
cd ch04_hybrid
python main.py
预期输出(截取问题 1 的展示):
======================================================================
问题 1: BW-20260301-0042 这个订单退款时要注意什么?
======================================================================
[向量检索 top-5]
#1 [bread_workshop.md] (chunk 5) ## 五、订单编号规则
#2 [bread_workshop.md] (chunk 4) ## 四、退换货政策
...
[BM25 检索 top-5]
#1 [bread_workshop.md] (chunk 5) ## 五、订单编号规则
#2 [bread_workshop.md] (chunk 4) ## 四、退换货政策
...
[Hybrid (RRF) top-5]
#1 [bread_workshop.md] (chunk 5) score=0.033
...
[LLM 重排 final top-3]
#1 [bread_workshop.md] (chunk 4) ## 四、退换货政策
#2 [bread_workshop.md] (chunk 5) ## 五、订单编号规则
AI: 根据订单编号 BW-20260301-0042 退款时,必须提供完整的订单编号...
试读到这里 · 后续内容已封存
关注公众号,继续把这章学完
在「AI面包君」发送关键词「学习AI」拿到口令。验证一次,这个浏览器就能继续阅读全部课程。