mxbai-rerank
开源权重托管 APIApache 2.0浏览器可跑 xsmall
mixedbread-ai 的重排序器系列基于 DeBERTa-v3 —— 一种采用解耦注意力机制的架构,能带来出色的 cross-encoder 精度。三个变体均采用 Apache 2.0 协议,可自由自建部署。xsmall 模型足够轻量,可以在浏览器中运行,这也是它成为本站在线 Demo 选项之一的原因。
模型变体
| 模型 | 体积 | 上下文长度 | 最适合 |
|---|---|---|---|
mxbai-rerank-xsmall-v1 | ~70 MB | 512 tokens | 浏览器 / 边缘端;延迟最低 |
mxbai-rerank-base-v1 | ~278 MB | 512 tokens | 速度与质量的良好平衡 |
mxbai-rerank-large-v1 | ~560 MB | 512 tokens | 精度最高;建议使用 GPU |
三个变体均为在 MS MARCO 段落排序任务上训练的 DeBERTa-v3 cross-encoder。生产环境建议从 mxbai-rerank-base-v1 开始;若有 GPU 余量且需要更高精度,则切换到 large。在浏览器或边缘端部署且模型体积受限时,使用 xsmall。
基准测试
| 模型 | 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-v1 | ~62.1 | ~42.3 |
分数为 18 个 BEIR 数据集上的近似平均值。请查阅 mixedbread-ai 在 HuggingFace 上的模型卡片以获取各数据集结果。
快速上手
自建部署(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 流水线中
from sentence_transformers import CrossEncoder
reranker = CrossEncoder("mixedbread-ai/mxbai-rerank-large-v1")
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
scores = reranker.predict([(query, c) for c in candidates])
top5 = [c for _, c in sorted(zip(scores, candidates), reverse=True)[:5]]
# Stage 3: generate
return llm.complete(f"Context:\n" + "\n\n".join(top5) + f"\n\nQ: {query}")
托管 API
mixedbread-ai 提供基于相同模型权重的托管重排序端点。如果你不想在自有基础设施上运行推理,这是个不错的选择。
pip install mixedbread-ai
from mixedbread_ai import MixedbreadAI
mxbai = MixedbreadAI(api_key="YOUR_API_KEY")
result = mxbai.reranking(
model="mixedbread-ai/mxbai-rerank-large-v1",
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,
return_input=False,
)
for item in result.data:
print(f"{item.score:.4f} rank {item.index + 1}")
浏览器使用
xsmall 变体足够轻量,可以通过 transformers.js 在浏览器中运行 —— 这正是我们 Demo 所使用的方式:
// transformers.js (ES module)
import { AutoTokenizer, AutoModelForSequenceClassification }
from "https://cdn.jsdelivr.net/npm/@huggingface/transformers@3";
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 —— 完全开放,允许商业使用
- xsmall 变体可通过 transformers.js 在浏览器中运行
- DeBERTa-v3 架构:cross-encoder 精度出色
- large 变体可与顶级商业 API 一较高下
- 可轻松集成到 sentence-transformers
- 提供托管 API 选项,无需自行管理推理
缺点
- 主要面向英文 —— 多语言支持有限
- 512 token 上下文对长文档而言较短
- 社区规模小于 bge 或 Cohere
- large 变体需要 GPU 才能达到实用速度