🚀 RAG 系统检索不准?是时候引入「离线精排」思维了!
很多同学在做 RAG(检索增强生成)项目时,都会遇到一个头疼的问题:向量检索召回的内容经常“文不对题”,导致大模型回答出现幻觉。今天我们就来聊聊如何通过 Rerank(精排)技术,让你的 RAG 系统脱胎换骨。
大家好,我是王中阳。
最近在我们AI就业陪跑训练营里,有不少同学问我:“我的 RAG 系统明明把文档切好了,向量库也建好了,为什么用户问问题时,找出来的文档还是不准?”
其实,这是传统 RAG 架构中一个非常经典的问题。今天这篇文,我就带大家深入理解“粗排”与“精排”,并手把手教你在 Golang 项目中引入 Rerank 机制。
1. 为什么向量检索还不够?
在标准的 RAG 流程中,我们通常使用向量检索(Vector Search)来寻找相关文档。
它的工作原理是:
- 把用户问题(Query)变成向量。
- 把文档块(Chunk)变成向量。
- 计算两个向量的余弦相似度,取 Top K。
这种方法叫 Bi-Encoder 架构。它的最大优势是快(亿级数据毫秒级响应),但缺点也很明显:它丢失了细粒度的语义交互。
举个例子:
- Query: "Python 怎么调用 C++ 的动态库?"
- Doc A: "Python 调用 C++ 动态库的详细教程..." (强相关)
- Doc B: "C++ 调用 Python 脚本的方法..." (不相关,但关键词高度重合)
在向量空间中,Doc B 因为包含大量相同的关键词(Python, C++, 调用),其向量距离可能和 Query 非常近,导致被错误召回。
这时候,大模型拿到的上下文是 Doc B,它自然就回答不出正确答案,甚至开始“一本正经地胡说八道”。
2. 什么是 Rerank(精排)?
为了解决这个问题,我们需要引入第二阶段:Rerank(重排序)。
这就好比招聘:
- 向量检索(粗排):HR 快速筛选简历。只要简历里有“Golang”、“3年经验”这些关键词,就先捞出来。这一步要快,可能捞出 100 份简历。
- Rerank(精排):面试官进行深度面试。面试官会仔细阅读简历的每一个项目经验,甚至进行面对面交流。这一步比较慢,但非常精准,最终只选出最匹配的 3 个人。
在技术上,Rerank
