0Pricing
AI Agents · 课时

使用交叉编码器重新排序

使用廉价嵌入检索前 50 个结果,再用较慢的交叉编码器对前 5 个结果重新排序,以提高精确率。

使用交叉编码器重新排序 是 CoddyKit 上的免费 AI Agents 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Agents 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Agents 课程共包含 4 节课。

本课时的部分内容尚未翻译,以英文显示。

为什么重新排序?

嵌入相似度是快速而粗略的第一轮筛选。它经常会检索出与查询包含相同 KEYWORDS、但实际上与 QUESTION 并不相关的片段。

重新排序器会接收(查询、片段)对,并计算更加精确的相关性分数。

双编码器与交叉编码器

文本相似度有两种架构:

  • 双编码器——分别嵌入查询和片段,然后计算余弦相似度。速度快(只需向量化一次即可重复使用),但准确度较低。
  • 交叉编码器——将(查询、片段)一起输入模型运行。速度慢(每对都要单独处理),但准确度高得多。

两阶段检索

将两者结合起来的模式:

  1. 双编码器快速检索前 50 个候选项
  2. 交叉编码器将结果重新排序,取前 5 个
  3. 将前 5 个候选项放入 LLM 提示中

这样既获得了双编码器的速度,也获得了交叉编码器的精确度。

使用 Cohere Rerank

最容易用于生产环境的交叉编码器:

import cohere
co = cohere.Client(COHERE_KEY)

results = co.rerank(
    model='rerank-multilingual-v3.0',
    query='What is the refund policy?',
    documents=top_50_chunks,
    top_n=5
)
for r in results.results:
    print(r.index, r.relevance_score, top_50_chunks[r.index])

开源重新排序器

BGE 重排序器是领先的 OSS 选项:

from sentence_transformers import CrossEncoder
model = CrossEncoder('BAAI/bge-reranker-base')

pairs = [(query, chunk) for chunk in candidates]
scores = model.predict(pairs)
ranked = [c for _, c in sorted(zip(scores, candidates), reverse=True)][:5]

Voyage Rerank

import voyageai
vo = voyageai.Client(api_key=VOYAGE_KEY)
res = vo.rerank(
    query=query,
    documents=candidates,
    model='rerank-2',
    top_k=5
)

适合重新排序的场景

  • 候选列表较长(50–200 项)
  • 相关性差异细微
  • 包含否定或比较的查询
  • 多语言场景

不适用的场景

  • 候选集合已经很小(双编码器返回的前 5 个)
  • 对延迟敏感且风险较低的查询

成本权衡

交叉编码器会为每一对候选项执行一次推理。对 50 个候选项重新排序,就需要调用模型 50 次(使用 Cohere/Voyage 时成本较低,自行托管时速度较慢)。

重新排序时使用 50–200 个候选项即可,更多候选项通常不值得。

Integrating into LangChain

from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import CohereRerank

compressor = CohereRerank(top_n=5)
retriever = ContextualCompressionRetriever(
    base_compressor=compressor,
    base_retriever=vector_retriever
)

Integrating into LlamaIndex

from llama_index.postprocessor.cohere_rerank import CohereRerank

rerank = CohereRerank(top_n=5)
query_engine = index.as_query_engine(
    similarity_top_k=20,
    node_postprocessors=[rerank]
)

考虑多样性的重新排序

有时您需要的是多样化的结果,而不只是得分最高的结果(后者可能几乎完全重复)。MMR(最大边际相关性)会在分数与多样性之间取得平衡:

from langchain.vectorstores import Chroma
results = store.max_marginal_relevance_search(query, k=5, fetch_k=20, lambda_mult=0.5)

两阶段模式

为什么要使用双编码器加交叉编码器,而不是只使用其中一个?

回顾

双编码器检索 50 个结果,交叉编码器将其重新排序为 5 个。在生产环境中使用 Cohere 或 Voyage;自行托管时使用 BGE OSS。只需适度增加成本,就能显著提升准确度。

常见问题解答

「使用交叉编码器重新排序」课时是免费的吗?

是的 — 「使用交叉编码器重新排序」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Agents 课程的其余内容,请升级到 CoddyKit PRO。 AI Agents 课程共包含 4 节课。

「使用交叉编码器重新排序」这节课中我会学到什么?

使用廉价嵌入检索前 50 个结果,再用较慢的交叉编码器对前 5 个结果重新排序,以提高精确率。 你通过在浏览器中直接运行的动手代码来练习 AI Agents,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 AI Agents 需要有经验吗?

无需任何先前经验。CoddyKit 上的 AI Agents 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「使用交叉编码器重新排序」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 AI Agents 课中编写并运行代码吗?

能。每节 AI Agents 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用交叉编码器重新排序
  2. HyDE:假设性文档嵌入
  3. 多向量检索(ColBERT)
  4. RAG 评估(RAGAS、Recall@K)
← 返回 AI Agents