Skip to content

🚀 RAG 系统检索不准?是时候引入「离线精排」思维了!

很多同学在做 RAG(检索增强生成)项目时,都会遇到一个头疼的问题:向量检索召回的内容经常“文不对题”,导致大模型回答出现幻觉。今天我们就来聊聊如何通过 Rerank(精排)技术,让你的 RAG 系统脱胎换骨。

大家好,我是王中阳。

最近在我们AI就业陪跑训练营里,有不少同学问我:“我的 RAG 系统明明把文档切好了,向量库也建好了,为什么用户问问题时,找出来的文档还是不准?”

其实,这是传统 RAG 架构中一个非常经典的问题。今天这篇文,我就带大家深入理解“粗排”与“精排”,并手把手教你在 Golang 项目中引入 Rerank 机制。

1. 为什么向量检索还不够?

在标准的 RAG 流程中,我们通常使用向量检索(Vector Search)来寻找相关文档。

它的工作原理是:

  1. 把用户问题(Query)变成向量。
  2. 把文档块(Chunk)变成向量。
  3. 计算两个向量的余弦相似度,取 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