Alex:上次聊了分块,今天聊检索。你们 RAG 系统,检索这块怎么做的?
小七:向量检索,用的 Milvus,Embedding 模型是 bge-large-zh-v1.5。
Alex:就纯向量检索?
小七:对。
Alex:为什么不加 BM25?
小七愣了一下。
小七:BM25……就是传统的关键词检索?我们觉得向量检索语义理解更好,BM25 太老了。
Alex:太老了,所以不用?
小七:嗯……主要是觉得向量检索已经够用了。
Alex:我给你一个场景:用户搜"RFC 7231",你们的系统会返回什么?
小七想了想。
小七:会返回和 HTTP 协议语义相关的文档……
Alex:那篇明确写了"RFC 7231"的文档,排第几?
小七沉默了几秒。
小七:不一定排第一。向量检索看的是语义空间的距离,"RFC 7231"这个字符串本身不一定和它的 Embedding 最近。
Alex:对。这就是纯向量检索的第一个问题。
📌知识锚点 · 纯向量检索的三个致命问题
- 精确匹配差:专有名词、编号、代码片段(如
RFC 7231、GPT-4o、error_code: 4029)在语义空间里"找不到自己"。
- 专业术语召回低:领域术语(如医学、法律、金融)的 Embedding 可能和通用语义偏差大。
- 新词/生僻词丢失:模型训练时没见过的词,Embedding 质量差,检索直接失效。
BM25 不是"老技术",是互补技术:它做的是字面匹配,向量检索做的是语义匹配,两者覆盖的是不同的失败场景。
第二幕:BM25 怎么工作?
Alex 没有停,继续往下推。
Alex:BM25 的原理,说一下。
小七:BM25 是基于词频的检索算法,一个词在文档里出现越多、在整个语料库里越稀有,得分越高。比 TF-IDF 多了文档长度归一化。
Alex:公式能写出来吗?
小七:大概是……
其中 是词在文档里的词频,是文档长度,是平均文档长度,和是超参数,通常,。
Alex:和 分别控制什么?
小七:控制词频饱和度—— 越大,词频对得分的影响越大,但会有边际递减; 控制文档长度归一化的程度, 完全归一化, 不归一化。
Alex:好。那 BM25 有什么做不到的?
小七:同义词。用户搜"汽车",文档里写的是"轿车",BM25 完全匹配不上。向量检索能处理这种语义等价的情况。
Alex:所以两个要一起用。
小七:对,混合检索。
📌知识锚点 · BM25 vs 向量检索
维度 BM25 向量检索 原理 词频 + 逆文档频率 语义空间距离 擅长 精确匹配、专有名词、编号 同义词、语义理解、模糊查询 失败场景 同义词、语义等价表达 精确字符串、新词、生僻词 计算成本 低(倒排索引) 高(ANN 近似最近邻) 结论:两者是互补关系,不是替代关系。生产环境混合检索是标配。
第三幕:两路结果怎么合并?
Alex 拿起笔,在纸上画了两列。
Alex:向量检索返回一个排序列表,BM25 返回一个排序列表,怎么合成一个最终结果?
小七:加权融合?把两路的分数乘以权重加起来,按总分排序。
Alex:权重怎么定?
小七:嗯……可以调参,或者根据查询类型动态调整——精确查询多给 BM25 权重,语义查询多给向量权重。
Alex:加权融合有什么问题?
小七想了想。
小七:两路的分数量纲不一样。向量检索返回的是余弦相似度,范围 0 到 1;BM25 返回的是一个没有上界的分数,直接加权不合理。
Alex:对。所以生产上更常用什么?
小七:RRF——Reciprocal Rank Fusion,倒数排名融合。不看分数,只看排名。
Alex:公式?
小七:每个文档的 RRF 得分是它在各路结果里排名的倒数之和:
def rrf_merge(vector_results, bm25_results, k=60): scores = {} for rank, doc in enumerate(vector_results): scores[doc.id] = scores.get(doc.id, 0) + 1 / (k + rank + 1) for rank, doc in enumerate(bm25_results): scores[doc.id] = scores.get(doc.id, 0) + 1 / (k + rank + 1) return sorted(scores.items(), key=lambda x: x[1], reverse=True)通常设 60,是个平滑参数,防止排名第一的文档得分过高。
Alex:RRF 的优势是什么?
小七:不需要对两路分数做归一化,也不需要学习权重,鲁棒性更好。两路结果都排前面的文档,最终得分最高。
Alex:效果怎么样?
小七:混合检索相比纯向量检索,召回准确率能提升 1%-9%,具体看场景。
Alex:你们上了混合检索吗?
小七:没有……我们还是纯向量。
Alex:为什么?
小七:当时评估觉得够用,没有专门做过对比实验。
Alex:你们怎么判断"够用"的?
小七停顿了一下,意识到这个问题没有好答案。
小七:主要是用户反馈,没有系统的评估指标。
Alex:嗯。
📌知识锚点 · 两路结果合并:加权 vs RRF
方案 原理 优势 劣势 加权融合 分数 × 权重求和 直觉简单 量纲不统一,权重难调 RRF 排名倒数求和 无需归一化,无需学习权重,鲁棒 忽略分数差距信息 RRF 参数 k=60:平滑参数,防止第一名得分过高。实践中 k 在 20-100 之间效果差异不大,60 是经验默认值。
混合检索效果:相比纯向量检索,召回准确率提升 1%-9%(arXiv:2410.20381)。提升幅度取决于知识库中精确匹配需求的比例。
第四幕:Rerank,值得加吗?
Alex 看了看时间,还有十分钟。
Alex:混合检索之后,你会加 Rerank 吗?
小七:会。混合检索拿到 Top-20 候选,再用 Cross-Encoder 精排,取 Top-5 给 LLM。
Alex:为什么检索阶段不直接用 Cross-Encoder?
小七:Cross-Encoder 要把 query 和每个文档拼在一起过一遍模型,计算量是 O(n),百万级文档根本跑不完。Bi-Encoder 是 query 和文档分别编码,可以提前把文档向量存好,检索时只算 query 的向量,再做 ANN 近似最近邻,速度快几个数量级。
Alex:Cross-Encoder 为什么精度更高?
小七:Bi-Encoder 是独立编码,query 和文档之间没有 token 级别的交互。Cross-Encoder 把两者拼在一起,模型能看到 query 里每个词和文档里每个词的关系,精度更高,但慢。
Alex:Rerank 的效果数据,有印象吗?
小七:加了 Rerank 之后,Top-5 召回率能从 71% 提升到 89%,Top-3 准确率从 65% 提升到 84%——这是某个测试场景下的数据,不同场景会有差异。
Alex:什么情况下可以不加 Rerank?
小七:检索数量很少,比如只检索 3-5 个文档,而且索引质量已经很高的情况下,Rerank 的收益有限,可以省掉这一步降低延迟。
Alex:Rerank 的延迟大概多少?
小七:取决于候选集大小和模型大小。Top-20 候选用 bge-reranker-v2-m3,大概 50-200ms,具体要看部署环境。
Alex:好,今天就到这里。
📌知识锚点 · 双阶段检索架构
查询 ↓[粗筛] 向量检索 + BM25 → Top-20~50 候选(毫秒级) ↓[精排] Cross-Encoder Rerank → Top-3~5(50-200ms) ↓LLM 生成
阶段 模型类型 速度 精度 处理量 粗筛 Bi-Encoder 快 近似 百万级 精排 Cross-Encoder 慢(约慢100倍) 精确 Top-20~50 常用 Rerank 模型:
- •
bge-reranker-v2-m3:中文效果好,开源可本地部署- •
bce-reranker-base_v1:中文场景轻量级- • Cohere Rerank:API 调用,英文效果好
加了 Rerank 的效果:Top-5 召回率 71% → 89%,Top-3 准确率 65% → 84%(特定测试场景)。
面试结果
走出会议室,小七看了眼手机——面试整整一小时。
第二天,HR 发来消息:“两轮技术面都通过了,下周 Offer 沟通。”
小七在备忘录里写下一行字:回去把 BM25 加上,做个 A/B 测试。
💬小七的复盘
“今天最大的教训:'够用’不是一个答案,‘我们没有系统评估过’才是真相。Alex 问’你们怎么判断够用的’,我答不上来——不是因为不懂技术,是因为我们从来没有认真量化过检索质量。下次面试,这个坑我不会再踩。”
学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋
📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~