从大海捞针到精准投递:召回与重排的RAG隐秘战线
从大海捞针到精准投递:召回与重排的RAG隐秘战线
> 来源:easy-learn-ai / commit 47154e8 > 日期:2026-06-23
---
一、一个被忽略的真相:AI根本不知道资料在哪
当你向一个AI知识库提问:"我离职时没休完的年假会折成工资吗?"
AI并不会真的"翻开"公司手册去找答案。它面对的是一个已经预先处理过的系统:资料被切成碎片(Chunk)、转成数学向量(Embedding)、存进向量数据库。AI能做的,只是在用户提问时,让系统去这些碎片里找到"可能相关"的几块,然后拿来看。
这个"找"的过程,不是简单的搜索。它分为两个阶段:
1. 召回(Recall):从海量资料里快速捞出一批"看起来可能有用"的候选 2. 重排(Rerank):把这批候选按"到底多有用"重新排序,让最能回答问题的排在前面
这就是召回与重排。它听起来很技术,但你每天都在用类似的东西——比如淘宝搜索:先召回成千上万个商品,再按销量、价格、相关性重排。AI知识库的逻辑一模一样。
---
二、召回:先别漏掉,宁可多捞一点
2.1 召回在做什么?
召回阶段的目标很简单:别漏掉。它追求"宁可多捞,不可漏网"。
具体怎么做?系统会把用户的问题也转成向量,然后和向量数据库里所有Chunk的向量做相似度比较。相似度高的,就捞回来。通常捞回来的数量叫 top-K——比如召回50条候选。
为什么是50条?因为召回很快,但不够准。它只看"向量长得像不像",不会细读内容。所以多捞一点,给后面的重排留足选择空间。
2.2 只做召回的问题:"看起来相关"不等于"能回答"
这是一个关键的认知陷阱。召回只看向量相似度,但相似度高不代表内容能回答问题。
举个例子:用户问"我离职时没休完的年假会折成工资吗?"
召回回来的候选里可能有:
- A. "员工离职时,未休年假按日工资三倍折算"
- B. "年假申请流程:提前三个工作日提交系统审批"
- C. "公司薪资结构说明:基本工资、绩效、年终奖"
- D. "离职结算包含社保转移、公积金提取、未休年假折算"
召回只看像不像,不看能不能回答。
2.3 top-K 的权衡:越大越不漏,也越嘈杂
top-K 是召回阶段最多拿回几条候选。它有一个直观的矛盾:
- K太小(比如只召回3条):容易漏掉关键资料,如果正确资料不在前3,后面就永远看不到了。
- K太大(比如召回100条):会带回大量噪声——"看起来沾边、实际帮不上回答"的资料。这些噪声会挤占后续处理的资源,还可能把AI的回答带偏。
---
三、重排:仔细读,重新排
3.1 重排器是什么?
重排器(Reranker)是一个专门给候选资料重新排序的模型。它通常只处理召回回来的几十条,不会扫完整个资料库。
和召回的区别:
- 召回:速度快,面对整个数据库,只看"长得像"
- 重排:速度慢,只看召回回来的几十条,会"细读"内容,判断"能不能回答问题"
3.2 重排怎么做?
重排器会把"用户问题 + 候选片段"放在一起打分。它判断的是:这段资料,在回答这个问题的任务里,到底有多重要。
比如前面的例子,重排器会给A和D打高分,给B和C打低分——因为它能判断B只是讲申请流程,C只是讲薪资结构,都不能直接回答"离职时未休年假怎么折算"。
重排后,最终给AI的通常只有3-5条。这3-5条的质量,直接决定了AI回答的准确性。
---
四、两段式流水线:一个完整的旅程
从资料库到AI回答,完整的流程是这样的:
资料库(海量文档)
↓ 召回(快,粗筛)
召回候选(比如50条)
↓ 重排(慢,精读)
精选资料(比如3-5条)
↓ 交给AI
生成回答
这个流程里有几个关键参数:
| 参数 | 含义 | 常见设置 | 调大/调小的影响 |
|---|---|---|---|
| 召回K | 召回阶段最多拿几条 | 40-100 | 调大:更不容易漏,但噪声多、成本高 |
| 重排N | 重排后给AI留几条 | 3-5 | 调大:AI有更多参考,但窗口更拥挤 |
| 阈值 | 最低分数线,低于就扔掉 | 60-70 | 调高:更严格,可能资料不足;调低:更宽松,可能塞入垃圾 |
- 召回K大 → 重排器压力增大 → 延迟上升
- 重排N大 → AI看的资料多 → 可能窗口爆满
- 阈值高 → 过滤严格 → 可能回答"资料不足"
五、常见故障:出问题时,先判断卡在哪一步
5.1 关键资料没进候选
症状:AI回答"资料里没有相关内容",但你明知道手册里有。
原因:召回阶段已经漏了。可能top-K太小,或者问题向量和资料向量的相似度不够高。
改法:调大top-K,补关键词检索(混合检索),或者检查Chunk是否切断了答案。
5.2 无关资料总挤在前面
症状:AI回答里有明显不相关的制度条款。
原因:召回只看相似度,把同词不同义的片段推了上来。重排器没压住它们。
改法:加重排,或者给重排器更清楚的问题和来源字段。
5.3 重排只看太少候选
症状:答案还行,但总觉得漏了更好的依据。
原因:召回给的候选池太窄,正确资料没机会被重排器看到。
改法:让召回多给一些候选,再由重排压缩到top-N。
5.4 重复片段占满位置
症状:AI回答里同一句话反复出现。
原因:同一段资料被切成多个相似Chunk,最终全挤进了给AI的窗口。
改法:做去重,按来源合并相邻Chunk,或者给同源片段降权。
5.5 旧制度排在新制度前面
症状:AI引用了一个已经废止的旧版本制度。
原因:只看文字相似,不看生效时间。
改法:把日期、版本、权限这些字段也放进排序规则。
---
六、召回与重排的本质:信息检索的两次筛选
召回与重排本质上是信息检索的两次筛选。第一次用速度换覆盖面,第二次用精度换质量。
这和人类做研究的过程很像:
- 召回 = 你在Google Scholar里搜关键词,返回几百篇论文(粗筛)
- 重排 = 你快速浏览摘要,挑出最相关的10篇来精读(细筛)
但这也意味着,重排器的质量上限,取决于召回阶段的质量下限。如果召回漏了关键资料,重排再强也看不到它。这就像是:如果Google Scholar根本没收录那篇论文,你再会筛选也找不到。
---
七、结语:RAG系统的隐形成败手
Chunk、Embedding、向量数据库、召回、重排——这些环节构成了RAG系统的完整链条。每个环节都在做一件事:在信息海洋里,把AI需要的那几滴水精准地送到它嘴边。
召回与重排是这条链条的最后一道闸口。召回决定了"有没有",重排决定了"好不好"。如果这一步没做好,前面的Chunk切得再漂亮、Embedding转得再精准,也是白搭。
而这件事的有趣之处在于:它看起来是一个技术问题,但本质上是一个权衡问题。快与准、覆盖与噪声、成本与质量——没有完美的参数,只有在具体场景下的最优解。
---
*参考资料:easy-learn-ai 召回与重排模块(commit 47154e8)*
#easy-learn-ai #每日更新 #记忆 #小凯
🌟 智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。
🎁 领取 2000万 Tokens