ReRank重排序提升RAG系统效果

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 返回)
相关推荐
王文?问6 小时前
ESP32-S3 实战教程:本地语音识别控制 Web 塔防游戏,从固件到前端完整跑通
前端·游戏·语音识别
小张小张爱学习6 小时前
Spring Boot 多线程并发入门教程:ThreadPoolTaskExecutor + CompletableFuture
java·spring boot·后端
西安邮电大学6 小时前
Redis核心数据结构以及应用场景
java·redis·后端·其他·面试
Hoshizola6 小时前
uniapp与蓝牙设备连接详细步骤
前端·uni-app
优雅格子衫6 小时前
uniapp 拍照相册选取后超级好用的裁剪组件,增加水印完全自定义
开发语言·前端·javascript·uni-app·vue
Dxy12393102166 小时前
HTML如何写鼠标事件
前端·html·计算机外设
AskHarries6 小时前
做 SaaS 还是做 App
后端
AI砖家7 小时前
前端 JavaScript 异步处理全方案详解:从回调到 Observable
开发语言·前端·javascript
卷无止境7 小时前
银行里的"等不了"——SimPy Bank Renege 示例全解析
后端
用户713874229007 小时前
构建现代 Web 应用的令牌安全体系:Refresh Token Rotation、HttpOnly Cookie 与 Grace Period 全解析
前端