首页 > 教程攻略 > ai资讯 >RAG知识库优化之Rerank应用

RAG知识库优化之Rerank应用

来源:互联网 时间:2026-07-31 13:24:15

前面几篇文章聊了最基础的RAG实现,也大致梳理了RAG的基本原理。简单来说,标准流程就是用户抛出一个Query,RAG应用去向量库中检索出相关的Context,然后把Query和Context一起喂给大模型,大模型再生成对应的Response。这个链条里其实有三个关键要素:

Query、Context 和 Response

。如果想让RAG的效果再上一个台阶,Context(上下文)这块是个值得深挖的突破口——毕竟,拿到的Context很可能跟Query的相关度并不够高。这时候,

Rerank

就能派上用场了:它对检索出的Context进行评分排序,直接干掉那些分数低、关联度低的片段,避免它们成为

上下文的污染源

。下面这张图展示的就是基础RAG流程:

RAG知识库优化之Rerank应用

没引入Rerank的时候,能从向量库里明显看到,Context里混了不少跟问题八竿子打不着的信息,这些无关片段把有效上下文冲得七零八落。下面就是没做重排时的Context示例:

未进行重排时

Rerank模型

这里选的是模型。它跟embedding模型不是一回事:Reranker直接拿问题和文档当输入,输出的不是一个向量,而是一个相似度分数。具体做法就是把Query和段落一起喂给Reranker,它就会返回一个相关性得分。这个模型基于交叉熵损失来优化,得分本身没有固定的范围限制。bge-reranker-base支持中英文双语场景,如果还有其他语言的需求,可以考虑新发布的

BGE Re-Ranker v2.0

版本。

Rerank的好处在于——它能在不牺牲准确性的前提下,帮LLM提速,甚至提高准确率。原理就是删掉上下文里得分低(相关性差)的片段,重新排序剩下的高相关片段。下面这张图是加入Rerank后的RAG流程:

引入Rerank之后,可以看到Context跟问题的相关度明显提升,那些不相干的干扰信息基本被清掉了。下面就是重排后的Context示例:

引入Rerank后

Rerank模型使用

embedding_model_name = 'maidalun1020/bce-embedding-base_v1'
embedding_encode_kwargs = {
    'normalize_embeddings': True
}
embed_model = HuggingFaceEmbeddings(
    model_name="./bge-base-zh-v1.5",
    encode_kwargs=embedding_encode_kwargs
)

reranker_args = {
    'model_name': '/mnt/d/software/dev/gpt/bge-reranker-base',
    'top_n': 5
}
reranker = BgeRerank(model_name='/mnt/d/software/dev/gpt/bge-reranker-base', top_n=3)

# init documents
db = Chroma(persist_directory='chroma_DB', embedding_function=embed_model)
retriever = db.as_retriever(search_type="similarity", search_kwargs={"k": 10})

compression_retriever = ContextualCompressionRetriever(
    base_compressor=reranker, base_retriever=retriever
)

qa_chain = RetrievalQA.from_chain_type(llm, retriever=compression_retriever,
                                       chain_type_kwargs={"prompt": PROMPT})

引入Rerank之后,检索引擎能主动丢掉那些不相关的污染数据,给LLM提供更精准的上下文。而经过重排的上下文,不仅减少了token用量,还可能顺便提高LLM的推理速度和准确率——性价比确实不错。