你是否遇到过:明明知识库很全,AI却总是答非所问?检索出来的内容一大堆,真正有用的却寥寥无几?别急,今天我们就来聊聊让RAG系统“脱胎换骨”的秘密武器——Rerank重排序!
一、RAG系统的“灵魂三问”:你真的检索对了吗?
在AI问答系统(RAG, Retrieval-Augmented Generation)里,检索(Retrieval)就像是“找资料的小能手”,生成(Generation)则是“写作文的高手”。但你有没有发现,哪怕你家小能手很勤快,找回来的资料却总有点“水”?这时候,Rerank(重排序)就像是“阅卷老师”,帮你把最靠谱的答案挑出来!
1.1 检索的“第一步”:快,但不准
- 初始检索:通常用向量相似度(比如余弦相似度)快速筛一波,速度飞快,但“眼神”一般,容易漏掉重点。
- 问题:检索回来的内容,相关性参差不齐,AI生成的答案自然也就“东一榔头西一棒槌”。
1.2 Rerank的“第二步”:慢,但准
- 重排序:用更聪明的模型(比如大模型、关键词打分等)再给检索结果“排个座次”,把最相关的内容顶上去。
- 效果:让AI生成的答案更贴题、更有深度,用户体验直线上升!
二、Rerank的“魔法原理”:让检索不再“将就”
2.1 Rerank到底在干啥?
Rerank其实就是“二次筛选”:
- 初筛:先用向量检索,快速找出一批“可能相关”的内容。
- 打分:对每条内容,评估它和问题的相关性,给个分数。
- 排序:按分数高低重新排序,最相关的排最前。
- 精选:只把最靠谱的几条内容,喂给生成模型。
2.2 为什么Rerank这么重要?
- 检索模型“粗中有细”:初筛快但不够细致,Rerank补上“最后一公里”。
- 提升答案质量:相关性高的内容,生成的答案自然更靠谱。
- 节省算力:只让生成模型处理最相关的内容,效率更高。
三、实战拆解:一条龙打造“带Rerank”的RAG系统
3.1 数据准备:PDF文本抽取与切分
3.1.1 PDF文本抽取
用PyMuPDF(fitz)一行代码搞定PDF文本提取:
def extract_text_from_pdf(pdf_path):
mypdf = fitz.open(pdf_path)
all_text = ""
for page_num in range(mypdf.page_count):
page = mypdf[page_num]
text = page.get_text("text")
all_text += text
return all_text
3.1.2 文本切块(Chunking)
为什么要切块?因为大文本检索不准,切成小块+重叠,检索更细致!
def chunk_text(text, n, overlap):
chunks = []
for i in range(0, len(text), n - overlap):
chunks.append(text[i:i + n])
return chunks
3.2 向量化与向量库
3.2.1 创建文本Embedding
用OpenAI或FlagEmbedding等模型,把文本变成“数字向量”:
def create_embeddings(text, model="BAAI/bge-en-icl"):
input_text = text if isinstance(text, list) else [text]
response = client.embeddings.create(model=model, input=input_text)
if isinstance(text, str):
return response.data[0].embedding
return [item.embedding for item in response.data]
3.2.2 简易向量库
用NumPy实现一个“土味”向量库,支持相似度检索:
class SimpleVectorStore:
def __init__(self):
self.vectors, self.texts, self.metadata = [], [], []
def add_item(self, text, embedding, metadata=None):
self.vectors.append(np.array(embedding))
self.texts.append(text)
self.metadata.append(metadata or {})
def similarity_search(self, query_embedding, k=5):
query_vector = np.array(query_embedding)
similarities = [
(i, np.dot(query_vector, v) / (np.linalg.norm(query_vector) * np.linalg.norm(v)))
for i, v in enumerate(self.vectors)
]
similarities.sort(key=lambda x: x[1], reverse=True)
return [{
"text": self.texts[idx],
"metadata": self.metadata[idx],
"similarity": score
} for idx, score in similarities[:k]]
3.3 Rerank的两大流派:大模型 vs 关键词
3.3.1 LLM大模型Rerank
让大模型“阅卷”,给每条内容打分,0-10分,越高越相关:
def rerank_with_llm(query, results, top_n=3, model="meta-llama/Llama-3.2-3B-Instruct"):
system_prompt = "你是检索相关性专家..."
scored_results = []
for i, result in enumerate(results):
user_prompt = f"Query: {query}\nDocument:\n{result['text']}\nRate this document's relevance..."
response = client.chat.completions.create(
model=model, temperature=0,
messages=[{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}]
)
score_text = response.choices[0].message.content.strip()
score_match = re.search(r'\b(10|[0-9])\b', score_text)
score = float(score_match.group(1)) if score_match else result["similarity"] * 10
scored_results.append({**result, "relevance_score": score})
reranked_results = sorted(scored_results, key=lambda x: x["relevance_score"], reverse=True)
return reranked_results[:top_n]
3.3.2 关键词Rerank
“土办法”也有春天!用关键词出现次数、位置等简单规则打分:
def rerank_with_keywords(query, results, top_n=3):
keywords = [w.lower() for w in query.split() if len(w) > 3]
scored_results = []
for result in results:
doc = result["text"].lower()
base_score = result["similarity"] * 0.5
keyword_score = sum(
0.1 + (0.1 if doc.find(k) < len(doc)/4 else 0) + min(0.05 * doc.count(k), 0.2)
for k in keywords if k in doc
)
final_score = base_score + keyword_score
scored_results.append({**result, "relevance_score": final_score})
reranked_results = sorted(scored_results, key=lambda x: x["relevance_score"], reverse=True)
return reranked_results[:top_n]
3.4 生成最终答案
把Rerank后的内容拼成上下文,喂给大模型生成答案:
def generate_response(query, context, model="meta-llama/Llama-3.2-3B-Instruct"):
system_prompt = "你是一个只根据上下文回答问题的AI助手..."
user_prompt = f"Context:\n{context}\n\nQuestion: {query}\n请只基于上述内容作答。"
response = client.chat.completions.create(
model=model, temperature=0,
messages=[{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}]
)
return response.choices[0].message.content
3.5 一键集成:完整RAG+Rerank流水线
def rag_with_reranking(query, vector_store, reranking_method="llm", top_n=3, model="meta-llama/Llama-3.2-3B-Instruct"):
query_embedding = create_embeddings(query)
initial_results = vector_store.similarity_search(query_embedding, k=10)
if reranking_method == "llm":
reranked_results = rerank_with_llm(query, initial_results, top_n=top_n)
elif reranking_method == "keywords":
reranked_results = rerank_with_keywords(query, initial_results, top_n=top_n)
else:
reranked_results = initial_results[:top_n]
context = "\n\n===\n\n".join([r["text"] for r in reranked_results])
response = generate_response(query, context, model)
return {
"query": query,
"reranking_method": reranking_method,
"initial_results": initial_results[:top_n],
"reranked_results": reranked_results,
"context": context,
"response": response
}
四、实测对比:Rerank到底有多香?
4.1 三种检索方式大比拼
假设我们有这样一个问题:
❝
“AI是否有潜力改变我们的生活和工作方式?”
我们用三种方式试试:
- 标准检索(无Rerank)
- LLM大模型Rerank
- 关键词Rerank
结果对比
- 标准检索:答案覆盖面广,内容丰富,但有时会“跑题”。
- LLM Rerank:答案更聚焦,紧扣问题核心,相关性更高。
- 关键词Rerank:效果介于两者之间,简单高效,适合算力有限场景。
4.2 自动化评测:谁才是“最强王者”?
用大模型自动评测,发现:
- 标准检索:内容全面,覆盖面广,适合“百科全书型”问题。
- LLM Rerank:答案更精准,适合“聚焦型”问题。
- 关键词Rerank:轻量级方案,适合资源有限或实时性要求高的场景。
结论:没有最强,只有最适合!Rerank让你的RAG系统更灵活、更智能!
五、部署Rerank模型太麻烦?一键API帮你搞定!
如果你觉得自己搭建Rerank模型太“烧脑”,推荐开箱即用的 AntSK-PyApi:
- 多模型支持:FlagEmbedding全家桶,embedding和rerank模型随便选!
- 高性能:模型智能缓存,响应飞快。
- 标准API:兼容OpenAI格式,直接接入你的RAG系统。
- 容器化部署:Docker一键起飞,省心省力。
示例请求:
POST /v1/rerank
{
"model": "BAAI/bge-reranker-v2-m3",
"query": "什么是人工智能?",
"documents": [
"人工智能是计算机科学的一个分支",
"今天天气很好",
"机器学习是人工智能的子领域",
"深度学习属于机器学习范畴"
],
"top_n": 3,
"return_documents": true
}
六、写在最后:Rerank不是“锦上添花”,而是“雪中送炭”!
- Rerank让RAG系统“查得准、答得好”,是提升AI问答体验的关键一环。
- 大模型Rerank适合追求极致相关性和答案质量的场景;
- 关键词Rerank则是轻量级、易部署的“性价比之选”;
- API化部署让你无需“炼丹”,一行代码接入高性能Rerank能力!
还在等什么?赶紧给你的RAG系统加上Rerank“外挂”,让AI回答不再“将就”,而是“惊艳”!
最后
为什么要学AI大模型
当下,⼈⼯智能市场迎来了爆发期,并逐渐进⼊以⼈⼯通⽤智能(AGI)为主导的新时代。企业纷纷官宣“ AI+ ”战略,为新兴技术⼈才创造丰富的就业机会,⼈才缺⼝将达 400 万!
DeepSeek问世以来,生成式AI和大模型技术爆发式增长,让很多岗位重新成了炙手可热的新星,岗位薪资远超很多后端岗位,在程序员中稳居前列。
与此同时AI与各行各业深度融合,飞速发展,成为炙手可热的新风口,企业非常需要了解AI、懂AI、会用AI的员工,纷纷开出高薪招聘AI大模型相关岗位。
最近很多程序员朋友都已经学习或者准备学习 AI 大模型,后台也经常会有小伙伴咨询学习路线和学习资料,我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师给大家这里给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频 全系列的学习资料,这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】

AI大模型系统学习路线
在面对AI大模型开发领域的复杂与深入,精准学习显得尤为重要。一份系统的技术路线图,不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点,还能提供一条高效、有序的学习路径。
但知道是一回事,做又是另一回事,初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性,在这基础上,找到高质量的学习资源,不浪费时间、不走弯路,又是重中之重。
AI大模型入门到实战的视频教程+项目包
看视频学习是一种高效、直观、灵活且富有吸引力的学习方式,可以更直观地展示过程,能有效提升学习兴趣和理解力,是现在获取知识的重要途径
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
海量AI大模型必读的经典书籍(PDF)
阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。
600+AI大模型报告(实时更新)
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
AI大模型面试真题+答案解析
我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
