一个跨编码器直接对每个(query, document)对进行评分,而不是比较独立的嵌入,这会产生更准确的排序,但每个文档会多一次推理。在向量搜索之上应用重新排序器(通过嵌入检索前20个,重新排序到前5个)是 RAG 管道中最高影响力的质量改进之一,当你使用 Hugging Face 的小型跨编码器时,它可以在本地 CPU 上免费运行。本指南展示了如何将HuggingFaceCrossEncoder与 LangChain 的CrossEncoderReranker和ContextualCompressionRetriever结合使用。该模式适用于 Hugging Face 上的任何跨编码器模型,包括BAAI/bge-reranker-*、mixedbread-ai/mxbai-rerank-*、Alibaba-NLP/gte-multilingual-reranker-*、Qwen/Qwen3-Reranker-*,以及经典的cross-encoder/ms-marco-*系列。
from langchain_classic.retrievers.contextual_compression import ContextualCompressionRetrieverfrom langchain_classic.retrievers.document_compressors import CrossEncoderRerankerfrom langchain_community.cross_encoders import HuggingFaceCrossEncodercross_encoder = HuggingFaceCrossEncoder(model_name="BAAI/bge-reranker-v2-m3")reranker = CrossEncoderReranker(model=cross_encoder, top_n=3)compression_retriever = ContextualCompressionRetriever( base_compressor=reranker, base_retriever=retriever,)compressed_docs = compression_retriever.invoke("What is the plan for the economy?")for i, doc in enumerate(compressed_docs, 1): print(f"Document {i}:\n{doc.page_content}\n")