mxbai-rerank
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 | 71M | 512 tokens | 英文 | 浏览器 / 边缘端;Demo 里最大的模型(实测每 10 段约 728 ms) |
mxbai-rerank-base-v1 | ~0.2B | 512 tokens | 英文 | 速度与质量的良好平衡 |
mxbai-rerank-large-v1 | 435M | 512 tokens | 英文 | 上一代旗舰;已被下方的 v2 取代 |
mxbai-rerank-base-v2 | 0.5B | 默认 8k,最高可达 32k | 100+ 种,含中文 | 体积与质量的最佳平衡;生产环境默认选择 |
mxbai-rerank-large-v2 | 1.5B | 默认 8k,最高可达 32k | 100+ 种,含中文 | 精度最高;建议使用 GPU |
v1 系列是在 MS MARCO 段落排序任务上训练的 DeBERTa-v3 cross-encoder;v2 是基于 Qwen2.5 的新一代,采用三步强化学习训练(GRPO、对比学习、偏好学习)。新的生产环境建议从 mxbai-rerank-base-v2 开始,尤其是涉及非英文内容时 —— 它在下方所有公开基准上都优于 v1 的 large。仅在浏览器或边缘端部署时才保留 xsmall-v1,因为 v2 没有同等体积的小型变体。
速度方面,mixedbread 自己的表给出的 A100 延迟是:large-v1 2.24 秒,large-v2 0.89 秒,base-v2 0.67 秒。表里没说是多大批量,所以请把它当作相对速度来看 —— v2 体量更大却更快 —— 而不是单次查询的耗时。
基准测试
| 模型 | BEIR,mixedbread 2026 年对比表 | 11 个 BEIR 数据集,v1 发布时(NDCG@10) | 同一测试,Accuracy@3 |
|---|---|---|---|
| mxbai-rerank-xsmall-v1 | 未公布 | 43.9 | 70.0 |
| mxbai-rerank-base-v1 | 未公布 | 46.9 | 72.3 |
| mxbai-rerank-large-v1 | 49.32* | 48.8 | 74.9 |
| mxbai-rerank-base-v2 | 55.57* | 未参与该测试 | — |
| mxbai-rerank-large-v2 | 57.49* | 未参与该测试 | — |
两组测试都是 mixedbread 自己做的。第一列来自他们的跨代对比表(GitHub 上的 mxbai-rerank);后两列来自 v1 的模型卡:11 个 BEIR 数据集,对 Lucene 关键词检索召回的前 100 条重排序,单用关键词检索得分为 38.0。2026 年 10 月之前,这张表写的是 xsmall-v1 和 base-v1 在 BEIR 上约 55.5 和约 59.8,另有一列 MS MARCO MRR@10(约 38.0 到 42.3),这些我们都查不到出处;mixedbread 在 11 数据集测试中公布的是 43.9 和 46.9,也没有为这几个模型公布 MS MARCO 分数。9 月时本页已将 large-v1 从没有出处的约 62.1 改正。
多语言(v2 存在的原因)
| 模型 | Mr.TyDi 多语言均值 | 中文 |
|---|---|---|
| mxbai-rerank-large-v1(仅英文) | 21.88* | 72.53 |
| mxbai-rerank-base-v2 | 28.56* | 83.70 |
| mxbai-rerank-large-v2 | 29.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 现在主推的托管重排序模型已经不是 v1 或 v2。它的文档把这两代都归入旧版模型:权重仍在 Hugging Face 上,但直接调用的 rerank API 已不再出现在文档中,现有集成需要联系 Mixedbread 支持团队了解迁移。托管重排序现在在 Mixedbread Search 内部运行,对象是你上传到 Mixedbread 存储里的文档,默认模型是 mxbai-rerank-v3.1-listwise(2026 年 7 月)。它是列表式模型 —— 把候选集当作一个整体来读,能按“以最近一次预订为准”这样的自然语言指令排序 —— 权重没有公开。
在 Mixedbread 自己的 900 条指令跟随评测中,v3 列表式模型的 MRR 为 0.93*,Voyage rerank-2.5 为 0.84*,Cohere Rerank 4 Pro 为 0.77*,zerank-2 为 0.71*(发布公告);9 月取代它的 v3.1 据称更快、效果更好(v3.1 公告)。目前还没有第三方测试。
下面这个直接调用的接口配合开源的 v2 权重,是 Mixedbread 到 2026 年为止文档里的用法。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 包轻松集成 - 可通过 Mixedbread Search 使用托管重排序,现在用的是能跟随指令的列表式模型
缺点
- v1 仅支持英文;多语言的是 v2 这一代,不是 v1
- v2 没有浏览器 / 边缘端体积的变体 —— 最小的是 0.5B
- v1 的 512 token 上下文对长文档而言较短
- 社区规模小于 bge 或 Cohere
- v2 的 large 需要 GPU 才能达到实用速度