做了3个RAG项目,我把召回率从78%折腾到了92%

张开发
2026/6/10 1:26:00 15 分钟阅读

分享文章

做了3个RAG项目,我把召回率从78%折腾到了92%
一、第一个项目上线第一天就翻车了去年做一个技术文档问答系统上线第一天用户问了一个问题“怎么处理登录超时”系统回答“timeout参数的默认值是30秒。”用户当场炸了“我问的是怎么处理不是参数是多少”我查了日志发现问题出在检索环节——用户问题里的“处理”和文档里的“排查步骤”向量距离很远根本没召回来。那一刻我才意识到RAG的核心不是大模型是检索。大模型再强没召到对的文档也是白搭。二、第一次优化换Embedding模型白捡5个点一开始图省事用了开源的通用Embedding模型。跑测试集召回率只有78%。用户问10个问题有2个答案根本不在前5条结果里。后来换了BGE-large-zh什么都没改只是换了模型召回率直接到了83%。教训很直接Embedding模型是召回率的天花板。天花板低了下面怎么折腾都没用。选型建议纯经验中文通用场景BGE-large-zh平衡效果和速度追求极致效果text-embedding-3-large效果好但走API本地部署、资源有限M3E-large怎么做判断拿3个模型跑你的测试集谁高用谁。三、第二次优化加混合检索又涨了5个点换完模型发现还有漏网之鱼。用户问“API key怎么申请”文档里写的是“获取访问凭证”。语义相近用词完全不同向量检索表现一般。解决方案是混合检索向量检索 关键词检索BM25。向量负责语义关键词负责精确匹配两个结果融合排序。加了混合检索后召回率从83%到了88%。这一步是性价比最高的优化不需要换模型不需要重新训练改几行代码就能看到效果。四、第三次优化加Reranker首位命中率大幅提升混合检索之后Top 5召回率到了88%。但用户反馈还是有问题正确答案虽然在Top 5里但经常排在第4、第5位。用户没耐心往下翻直接说“系统找不到”。解决方案加Reranker。在召回结果上用CrossEncoder模型重新打分把最相关的排到最前面。加了Reranker之后首位命中率从45%提到了68%。用户满意度明显上升因为第一个就是对的。注意Reranker不需要对全量文档做只对召回后的Top 20做就行否则太慢。在具体实现上我们后来用了ZGI作为RAG检索的编排平台混合检索和Reranker都是内置能力省了不少自研时间。五、完整链路数据我一个实验一个实验做下来的数据基线纯向量检索 → 召回率78%第一轮换BGE模型 → 召回率83%5%第二轮加混合检索 → 召回率88%5%第三轮加Reranker → 召回率92%4%第四轮领域微调 → 召回率94%2%结论混合检索是性价比最高的优化改几行代码涨5个点Reranker是提升体验的关键决定用户第一眼看到什么领域微调收益最低不是非常刚需可以先不做六、三个最容易踩的坑坑一不用测试集凭感觉优化没有测试集你根本不知道改完是变好了还是变差了。花一天时间标注100个问题-答案对后面所有优化都有方向。坑二召回和排序混为一谈召回阶段的目标是“别漏掉”排序阶段的目标是“把最对的放第一个”。两个阶段的优化手段不同不要混着调。坑三一上来就搞RerankerReranker很慢也很贵。先用好Embedding和混合检索这两步能解决80%的问题。七、给同行的实操建议先跑通测试集。没有测试集所有优化都是盲人摸象。优化顺序别搞反。先换Embedding模型再加混合检索最后上Reranker。这个顺序的投入产出比最高。线上一定要加Reranker。它不是召回率的瓶颈但是体验的关键。用户没耐心翻到第3条。八、写在最后RAG召回优化没有什么秘籍。就是选对Embedding、加上混合检索、配上Reranker。一步步来效果是累计的。如果你也正在被召回率困扰希望这篇文章能帮你少踩几个坑。毕竟这些坑我都帮你踩过了。本文基于RAG项目实战经验整理。

更多文章