← [ BACK_TO_NOTES ]

Reranker

Reranker 是 RAG 管线中对检索结果做二次排序的组件。它比向量搜索更精确,但更慢,用于对初步检索结果做精细排序。

#concept #evergreen #ai

[!info] related notes

Reranker

一句话定义

Reranker 是 RAG 管线中对检索结果做二次排序的组件。向量搜索是”粗排”(快但不精确),Reranker 是”精排”(慢但精确)。先粗排检索 20 个候选,再精排选出最相关的 5 个。

它解决什么问题

向量搜索的相似度分数不一定反映真实相关性:

  • 向量距离近 ≠ 语义相关
  • 关键词匹配被向量搜索忽略
  • 查询意图和文档内容的匹配度需要更精确的判断

角色边界

本页是 Reranker 管线组件 的 canonical concept:关注它在 Retriever 之后、上下文选择之前的职责、输入输出和编排位置。用于产生相关性分数的模型能力统一放在 Reranker 模型;组件职责不等于某一个具体模型。

核心原理

Reranker 工作方式

用户查询 + 检索到的 20 个文档
    │
    ▼
Cross-Encoder 模型
    (同时看查询和文档,计算相关性分数)
    │
    ▼
按相关性分数重新排序
    │
    ▼
返回 Top 5

Python 实现

class Reranker:
    def __init__(self, model_name: str = "cross-encoder/ms-marco-MiniLM-L-6-v2"):
        self.model = CrossEncoder(model_name)

    async def rerank(self, query: str, chunks: list[Chunk], top_k: int = 5) -> list[Chunk]:
        # 构建查询-文档对
        pairs = [(query, chunk.text) for chunk in chunks]

        # 计算相关性分数
        scores = self.model.predict(pairs)

        # 按分数排序
        scored_chunks = list(zip(chunks, scores))
        scored_chunks.sort(key=lambda x: x[1], reverse=True)

        return [chunk for chunk, score in scored_chunks[:top_k]]

意图感知重排序

class IntentAwareReranker(Reranker):
    async def rerank(self, query: str, chunks: list[Chunk], top_k: int = 5) -> list[Chunk]:
        # 1. 识别用户意图
        intent = await self.classify_intent(query)

        # 2. 基础重排序
        base_ranked = await super().rerank(query, chunks, top_k=top_k * 2)

        # 3. 按意图调整排序
        adjusted = []
        for chunk in base_ranked:
            boost = self.get_intent_boost(intent, chunk)
            adjusted.append((chunk, boost))

        adjusted.sort(key=lambda x: x[1], reverse=True)
        return [chunk for chunk, _ in adjusted[:top_k]]

常见坑

  1. 不做重排序: 向量搜索结果直接用
  2. Reranker 太慢: 对每个请求都做重排序,延迟高
  3. top_k 太小: 重排序后只留 2 个,可能漏掉相关信息
  4. 模型不匹配: Reranker 模型和 Embedding 模型的语义空间不同

学习检查

  1. Reranker 在典型 RAG 管线中处于哪两个阶段之间?
  2. 为什么“先召回较多候选再重排”与“直接只检索少量结果”不是同一件事?
  3. 哪些参数属于管线策略,哪些属于 reranker 模型能力?
  4. 如果延迟预算不足,可以从候选规模、是否启用重排和模型成本三层怎样取舍?

参考资料

创建于 2026/6/30 更新于 2026/10/1
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本