mxbai-rerank

开源权重 · mixedbread-ai ·

开源权重托管 APIApache 2.0v2:100+ 种语言浏览器可跑 xsmall

mixedbread-ai 目前有两代重排序器。v1(xsmall/base/large)是基于 DeBERTa-v3 的 cross-encoder 系列,仅支持英文,其中 xsmall 足够轻量、可在浏览器中运行 —— 这也是它成为本站在线 Demo 选项之一的原因。v2(base/large)是更新的一代,基于 Qwen2.5、经强化学习训练,新增了 100+ 种语言支持,包括中文。两代均采用 Apache 2.0 协议。

模型变体

模型体积上下文长度语言最适合
mxbai-rerank-xsmall-v1~70 MB (0.1B)512 tokens英文浏览器 / 边缘端;延迟最低
mxbai-rerank-base-v1~278 MB (0.2B)512 tokens英文速度与质量的良好平衡
mxbai-rerank-large-v1~560 MB (1.5B)512 tokens英文上一代旗舰;已被下方的 v2 取代
mxbai-rerank-base-v20.5B默认 8k,最高可达 32k100+ 种,含中文体积与质量的最佳平衡;生产环境默认选择
mxbai-rerank-large-v21.5B默认 8k,最高可达 32k100+ 种,含中文精度最高;建议使用 GPU

v1 系列是在 MS MARCO 段落排序任务上训练的 DeBERTa-v3 cross-encoder;v2 是基于 Qwen2.5 的新一代,采用三步强化学习训练(GRPO、对比学习、偏好学习)。新的生产环境建议从 mxbai-rerank-base-v2 开始,尤其是涉及非英文内容时 —— 它在下方所有公开基准上都优于 v1 的 large。仅在浏览器或边缘端部署时才保留 xsmall-v1,因为 v2 没有同等体积的小型变体。

基准测试

模型BEIR NDCG@10(均值)MS MARCO MRR@10
mxbai-rerank-xsmall-v1~55.5~38.0
mxbai-rerank-base-v1~59.8~40.6
mxbai-rerank-large-v149.32*~42.3
mxbai-rerank-base-v255.57*未公布
mxbai-rerank-large-v257.49*未公布

标 * 的行来自 mixedbread 自己的跨代对比表(mxbai-rerank GitHub 仓库),并非经典的 BEIR 18 数据集协议。在 2026 年 9 月之前,本页给 large-v1 挂的是一个没有来源的 ~62.1 —— 而 mixedbread 自己的发布博客当时报的是 11 个 BEIR 数据集上 ~48.8 的 NDCG@10,他们 2026 年的对比表给出的是 49.32*;两者都远低于本页此前的数字,现已更正。xsmall-v1/base-v1 两行以及 MS MARCO 一列仍是我们尚未独立复核的近似数字 —— 请查阅 mixedbread-ai 在 HuggingFace 上的模型卡片以获取权威的分数据集结果。

多语言(v2 存在的原因)

模型Mr.TyDi 多语言均值中文
mxbai-rerank-large-v1(仅英文)21.88*72.53
mxbai-rerank-base-v228.56*83.70
mxbai-rerank-large-v229.79*84.16

v1 从来都不是多语言模型 —— 只是在 mixedbread 自己 2026 年的回顾评测之前,它一直没有在非英文数据上被测过。如果你的文档不全是英文,应该用 v2 这一代;v1 不能替代它。

快速上手

v2,自建部署

pip install -U mxbai-rerank
from mxbai_rerank import MxbaiRerankV2

reranker = MxbaiRerankV2("mixedbread-ai/mxbai-rerank-base-v2")  # or large-v2

query = "How do I add reranking to my RAG pipeline?"
documents = [
    "Rerankers score each query-passage pair with a cross-encoder.",
    "BM25 is a classical keyword-based retrieval method.",
    "London is the capital of the United Kingdom.",
    "Two-stage retrieval: retrieve 50 candidates, rerank to top 5.",
]

results = reranker.rank(query=query, documents=documents)
for r in results:
    print(f"{r.score:.4f}  {r.document[:80]}")

v1,自建部署(sentence-transformers)

pip install sentence-transformers
from sentence_transformers import CrossEncoder

model = CrossEncoder("mixedbread-ai/mxbai-rerank-base-v1")

query = "How do I add reranking to my RAG pipeline?"
passages = [
    "Rerankers score each query-passage pair with a cross-encoder.",
    "BM25 is a classical keyword-based retrieval method.",
    "London is the capital of the United Kingdom.",
    "Two-stage retrieval: retrieve 50 candidates, rerank to top 5.",
]

scores = model.predict([(query, p) for p in passages])
ranked = sorted(zip(scores, passages), reverse=True)

for score, text in ranked:
    print(f"{score:.4f}  {text[:80]}")

在 RAG 流水线中(v2)

from mxbai_rerank import MxbaiRerankV2

reranker = MxbaiRerankV2("mixedbread-ai/mxbai-rerank-large-v2")

def rag_answer(query: str, vector_db, llm) -> str:
    # Stage 1: retrieve wide
    candidates = vector_db.search(query, top_k=50)
    # Stage 2: rerank tight
    results = reranker.rank(query=query, documents=candidates, top_k=5)
    top5 = [r.document for r in results]
    # Stage 3: generate
    return llm.complete(f"Context:\n" + "\n\n".join(top5) + f"\n\nQ: {query}")

托管 API

mixedbread-ai 提供基于相同模型权重的托管重排序端点。如果你不想在自有基础设施上运行推理,这是个不错的选择。目前使用的 SDK 是 mixedbread(较早的 mixedbread_ai 包是 v1 时代的):

pip install mixedbread
from mixedbread import Mixedbread

mxbai = Mixedbread(api_key="YOUR_API_KEY")

result = mxbai.rerank(
    model="mixedbread-ai/mxbai-rerank-large-v2",
    query="How do I add reranking to my RAG pipeline?",
    input=[
        "Rerankers score each query-passage pair jointly.",
        "BM25 is a keyword-based retrieval method.",
        "London is the capital of the United Kingdom.",
        "Two-stage retrieval: retrieve wide, rerank tight.",
    ],
    top_k=3,
)

for item in result.data:
    print(f"{item.score:.4f}  rank {item.index + 1}")

浏览器使用

v1 的 xsmall 变体足够轻量,可以通过 transformers.js 在浏览器中运行 —— 这正是我们 Demo 所使用的方式。v2 最小的变体(0.5B)目前还没有对应的浏览器体积版本:

// transformers.js (ES module)
import { AutoTokenizer, AutoModelForSequenceClassification }
  from "https://cdn.jsdelivr.net/npm/@huggingface/transformers@4";

const tokenizer = await AutoTokenizer.from_pretrained(
  "mixedbread-ai/mxbai-rerank-xsmall-v1", { dtype: "q8" }
);
const model = await AutoModelForSequenceClassification.from_pretrained(
  "mixedbread-ai/mxbai-rerank-xsmall-v1", { dtype: "q8" }
);

const inputs = tokenizer(
  [query, query],
  { text_pair: [doc1, doc2], padding: true, truncation: true }
);
const { logits } = await model(inputs);
const scores = logits.sigmoid().tolist();

使用 dtype: "q8" 后,量化权重约为 35 MB —— 下载迅速,首次运行后即缓存到 IndexedDB 中。

优缺点

优点

  • Apache 2.0 —— 完全开放,允许商业使用,两代都是
  • v2 支持 100+ 种语言,包括中文
  • v1 的 xsmall 变体可通过 transformers.js 在浏览器中运行
  • v2 在所有已公开的基准上都优于 v1 的 large
  • 可通过 mxbai-rerank / sentence-transformers 包轻松集成
  • 提供托管 API 选项,无需自行管理推理

缺点

  • v1 仅支持英文;多语言的是 v2 这一代,不是 v1
  • v2 没有浏览器 / 边缘端体积的变体 —— 最小的是 0.5B
  • v1 的 512 token 上下文对长文档而言较短
  • 社区规模小于 bge 或 Cohere
  • v2 的 large 需要 GPU 才能达到实用速度

mxbai-rerank-xsmall 驱动本站 Demo

在模型选择器中选中它,实时看到它对你的段落打分 —— 首次使用后无需重新下载。

打开 Demo →

其他模型