让RAG更进一步的利器:教你使用两种出色的Rerank排序模型 📅 发布时间:2026/8/27 18:24:59 👁 浏览次数: 前言在高级RAG的应用中常常会有一些“检索后处理Post-Retrieval”的环节。顾名思义这是在检索出输入问题相关的多个Chunk后在交给LLM合成答案之前的一个处理环节。在这个环节中可以做一些诸如相似度过滤、关键词过滤、chunk内容替换等处理。其中**Rerank重排序**是一种常见的也是在RAG应用优化中很常见的一种技术处理环节。简单的说Rerank就是对检索出来的多个chunks或者nodes列表进行重新排序使得其排名与用户输入问题的相关性更匹配使得更相关、更准确的chunk排名更靠前从而在 LLM生成时能够被优先考虑以提高输出质量。那么有了基于向量索引与语义相似度的检索为什么还需要RerankRAG应用中有多种索引类型很多索引技术并非基于语义与向量构建其检索的结果希望借助独立的Rerank实现语义重排在一些复杂RAG范式中很多时候会使用多路混合检索来获取更多相关知识这些来自不同源、不同检索算法的chunks要借助Rerank做重排即使是完全基于向量构建的索引由于不同的嵌入模型、相似算法、语言环境、领域知识特点等影响其语义检索的相关度排序也可能发生较大的偏差此时借助独立的Rerank模型做纠正也非常有意义Rerank通常需要借助于独立的算法或模型来实现。本文将实践与推荐两种被广泛使用的优秀Rerank模型在线模型 - Cohere Rerank模型本地模型 - bge-reranker-large模型Cohere Rerank模型Cohere Rerank是一个商业闭源的Rerank模型。它根据与指定查询问题的语义相关性对多个文本输入进行排序专门用于帮助关键词或向量搜索返回的结果做重新排序与提升质量。为了使用Cohere Rerank你首先需要在官方网站https://cohere.com/注册后申请测试的API-key测试使用免费Cohere Rerank的使用非常简单通常在LangChain与LlamaIndex框架中也会集成其SDK的使用。现在我们使用如下测试代码来对比在Rerank之前和之后的chunk节点的排序区别代码基于LlamaIndex框架构建并利用其内置的cohere_rerank检索后处理器组件这里使用了一段关于百度文心一言的介绍文档构建上下文知识库fromllama\_index.postprocessor.cohere\_rerankimportCohereRerank .....#使用默认的嵌入模型构造向量索引 docs SimpleDirectoryReader(input_files[../../data/yiyan.txt]).load_data() nodes SentenceSplitter(chunk_size100,chunk_overlap0).get_nodes_from_documents(docs) vector_index VectorStoreIndex(nodes) #检索器retriever vector_index.as_retriever(similarity_top_k5) #不借助cohere rerank直接检索出结果 nodes retriever.retrieve(百度文心一言的逻辑推理能力怎么样) print(before rerank) print_nodes(nodes) #借助cohere rerank模型重排结果 cohere_rerank CohereRerank(modelrerank-multilingual-v3.0,api_key***, top_n2) rerank_nodes cohere_rerank.postprocess_nodes(nodes,query_str百度文心一言的逻辑推理能力怎么样) print(after rerank) print_nodes(rerank_nodes)首先看不经过Rerank重排、直接向量检索的排序结果这里只打印了排名前两位的chunk节点内容用来和后面Rerank之后的排名做对比。现在再看下经过Cohere Rerank模型重新排序后的前两名有意思的是这里的前两名的排名结果刚好和未经过Rerank之前的排名相反从chunk节点的内容与相应的评分(score)也能看出来在调用Cohere Rerank之后节点内容的相关性和其对应的评分更加匹配排序也更加合理。这种更加合理的排名一方面有利于LLM生成更准确的回复另一方面也可以帮助降低top_K数量以节约上下文空间。如果你不使用LlamaIndex也可以导入官方cohere模块使用这可以很方便的插入到你现有的各种应用代码中importcohere cocohere.Client(api_keyYOUR API KEY)query你的问题...docs[相关文档1...,相关文档2...,相关文档3...,...]resultsco.rerank(modelrerank-multilingual-v3.0,queryquery,documentsdocs,top_n5,return_documentsTrue)注意如果需要中文支持必须使用rerank-multilingual-v3.0模型。bge-reranker-large模型bge-reranker-large是国内智源开源的一个被广泛使用的Rerank模型在众多的模型测试中有着非常优秀的成绩。为了使用这个Rerank模型我们使用HuggingFace 的TEI来本地化部署这个模型并提供服务。在安装与部署TEI后在命令行执行如下命令可自动下载该模型并启动TEI服务modelBAAI/bge-reranker-large text-embeddings-router--model-id$model--port8080TEI是HuggingFace 推出的开源 Text Embedding Inherence工具的简称该工具主要是以部署 Embedding 模型为主(注意TEI本身不是模型而是类似Ollama的模型部署工具同时也支持 Rerank 模型的部署。在Mac上的基本安装过程如下其他平台请参考官方文档#安装rust如出现错误需要修改.bash\_profile的权限curl--protohttps--tlsv1.2-sSf https://sh.rustup.rs|sh#下载TEI代码git clone https://github.com/huggingface/text-embeddings-inference.git#进入到代码目录安装metalm芯片如果是intel芯片则metal修改为mklcd text-embeddings-inference cargo install--path router-F metal#启动向量服务在linux可能需要安装gcc/openssl#sudo apt-get install libssl-dev gcc -y\# 拉取模型并启动模型服务 modelBAAI/bge-large-zh-v1.5text-embeddings-inference%text-embeddings-router--model-id$model--port8080由于TEI使用了FastAPI规范暴露API接口因此可以在浏览器中访问http://localhost:8080/docs/查看当前TEI暴露的接口文档甚至可以直接测试Rerank接口现在可以开始设计使用该本地的Rerank服务做重排序。由于LlamaIndex目前并没有直接内置集成使用该模型的组件因此无法像Cohere Reranker那样快速集成。这里我们创建一个自定义的检索后处理器来实现基于TEI与bge-reranker-large模型的Rerank方法完整代码如下importrequestsfromtypingimportList,Optionalfromllama_index.core.bridge.pydanticimportField,PrivateAttrfromllama_index.core.postprocessor.typesimportBaseNodePostprocessorfromllama_index.core.schemaimportNodeWithScore,QueryBundleclassBgeRerank(BaseNodePostprocessor):url:strField(descriptionRerank server url.)top_n:intField(descriptionTop N nodes to return.)def__init__(self,top_n:int,url:str):super().__init__(urlurl,top_ntop_n)#调用TEI的rerank模型服务实现rerank方法defrerank(self,query,texts):urlf{self.url}/rerankrequest_body{query:query,texts:texts,truncate:False}responserequests.post(url,jsonrequest_body)ifresponse.status_code!200:raiseRuntimeError(fFailed to rerank, detail:{response})returnresponse.json()classmethoddefclass_name(cls)-str:returnBgeRerank#实现LlamaIndex要求的postprocessor的接口def_postprocess_nodes(self,nodes:List[NodeWithScore],query_bundle:Optional[QueryBundle]None,)-List[NodeWithScore]:ifquery_bundleisNone:raiseValueError(Missing query bundle in extra info.)iflen(nodes)0:return[]#调用reranktexts[node.textfornodeinnodes]resultsself.rerank(queryquery_bundle.query_str,textstexts,)#组装返回nodesnew_nodes[]forresultinresults[0:self.top_n]:new_node_with_scoreNodeWithScore(nodenodes[int(result[index])].node,scoreresult[score],)new_nodes.append(new_node_with_score)returnnew_nodes构建好这个自定义的检索后处理器后就可以像之前使用Cohere Rerank一样使用它我们只需要把上一节的例子稍作修改即可......#创建自定义的检索后处理器customRerankBgeRerank(urlhttp://localhost:8080,top_n2)#测试处理节点rerank_nodescustomRerank.postprocess_nodes(nodes,query_str百度文心一言的逻辑推理能力怎么样?)......在上面相同用例的情况下最后输出重新排序的节点信息如下可以看到这里的排序结果和上一节使用的Cohere Rerank模型很类似现在你就拥有了一个本地部署的强大的Rerank模型服务结束语上面简单介绍了两种很出色的Rerank模型的使用其中Cohere Rerank是一种商业在线的模型方案而另外一种更具实用价值、且开源可部署在本地的是bge-reranker-large模型由于其对资源要求较低借助TEI工具你可以在本机或企业内部环境轻松部署用来对自有RAG应用提供服务。尽管Rerank在RAG管道中所处的环节似乎没有检索Retrieval或者生成Generation那么重要和必须但由于其实现简单、资源要求较低、且不依赖于嵌入模型但是却能够很好的改善最终生成的质量用较小的代价让你的RAG应用百尺竿头更进一步此外Rerank也是一些高级检索的必要步骤比如之前介绍的融合检索。因此有兴趣的朋友不妨一试或许能带来意想不到的惊喜最后的最后感谢你们的阅读和喜欢我收藏了很多技术干货可以共享给喜欢我文章的朋友们如果你肯花时间沉下心去学习它们一定能帮到你。因为这个行业不同于其他行业知识体系实在是过于庞大知识更新也非常快。作为一个普通人无法全部学完所以我们在提升技术的时候首先需要明确一个目标然后制定好完整的计划同时找到好的学习方法这样才能更快的提升自己。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】大模型知识脑图为了成为更好的 AI大模型 开发者这里为大家提供了总的路线图。它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。经典书籍阅读阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。面试资料我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】