ReRank重排序提升RAG系统效果
Rerank (重排序)
这是什么
Rerank (重排序) 是 RAG 系统中的重要优化技术。它先使用向量检索获取候选文档, 然后使用专门的重排序模型对这些文档进行重新排序,以提高检索结果的相关性和准确性。
核心优势:
- 提升检索精度:重排序模型能更准确地判断文档与查询的相关性
- 优化用户体验:返回更相关的结果,减少无关信息
- 成本效益:只需对少量候选文档重排序,平衡了效果和成本
- 多语言支持:支持多语言重排序模型(如 rerank-multilingual-v3.0)
有什么用
主要用途:
- 提升 RAG 系统的检索质量
- 优化向量检索的结果排序
- 提高问答系统的准确率
- 减少幻觉问题(通过提供更相关的上下文)
- 企业级知识库检索优化
- 多语言文档检索优化
示例代码
python
import dotenv
import weaviate
from langchain_classic.retrievers import ContextualCompressionRetriever
from langchain_cohere import CohereRerank
from langchain_weaviate import WeaviateVectorStore
from weaviate.auth import AuthApiKey
from langchain_community.embeddings import QianfanEmbeddingsEndpoint
dotenv.load_dotenv()
# 1. 创建向量数据库与重排组件
embedding = QianfanEmbeddingsEndpoint()
db = WeaviateVectorStore(
client=weaviate.connect_to_wcs(
cluster_url="your-cluster-url",
auth_credentials=AuthApiKey("your-api-key"),
skip_init_checks=True,
),
index_name="ParentDocument",
text_key="text",
embedding=QianfanEmbeddingsEndpoint(),
)
# 创建重排序模型
rerank = CohereRerank(model="rerank-multilingual-v3.0")
# 2. 构建压缩检索器
retriever = ContextualCompressionRetriever(
base_retriever=db.as_retriever(search_type="mmr"),
base_compressor=rerank,
)
# 3. 执行搜索并排序
search_docs = retriever.invoke("关于LLMOps应用配置的信息有哪些呢?")
print(f"找到 {len(search_docs)} 个相关文档")
for doc in search_docs:
print(f"- {doc.page_content}\n")
流程图
text
User Query
│
▼
┌──────────────────┐
│ Base Retriever │
│ (向量检索) │
└────────┬─────────┘
│
▼
┌────────────────┐
│ 候选文档列表 │
│ (Top K) │
└────────┬───────┘
│
▼
┌──────────────────┐
│ Rerank Model │
│ (重排序模型) │
│ - Cohere Rerank │
│ - BGE Reranker │
└────────┬─────────┘
│
▼
┌────────────────┐
│ 重新排序结果 │
│ (按相关性) │
└────────┬───────┘
│
▼
Final Docs
(Top N 返回)