xz-rerank
检索结果重排序引擎,支持本地多信号融合排序与远程 Rerank API 适配。
概述
RAG 系统中,检索阶段返回的候选项通常只按向量相似度或 BM25 分数排序,单一信号容易漏掉语义相关但表达不同的内容。xz-rerank 通过多信号融合对候选结果重新打分排序,显著提升 Top-K 命中率。
特性
- 5 种内置打分信号: 关键词重叠 (Jaccard)、向量相似度、元数据匹配、内容质量启发式、时间近因性
- 可自定义信号: 实现
SignalPlugintrait 即可接入自己的打分逻辑 - 多阶段重排序: 粗排(本地快速过滤)→ 精排(远程 API 精确打分)流水线
- 远程 Rerank API: 开箱支持 Cohere (
rerank-english-v3.0) 和 Jina (jina-reranker-v2-base-multilingual) - 结果缓存: LRU 内存缓存,避免重复计算
- 分数分解: 支持逐信号查看打分明细,方便调优
- 通道感知: 可按检索通道(语义搜索、关键词搜索等)配置不同的近因性衰减策略
- 权重归一化: 自动校验权重和为 1.0,支持归一化
快速开始
# Cargo.toml
[]
= { = "0.1", = ["cohere", "jina"] }
使用示例
本地信号重排序
LocalSignalReranker 是核心本地引擎,默认集成 5 种信号,开箱即用:
use HashMap;
use *;
async
多阶段重排序
先用本地信号从大量候选中快速粗排,再将 Top-N 送入远程 API 精排:
use *;
async
远程 Rerank API
启用对应 feature 后,可直接使用 CohereReranker 或 JinaReranker:
// Cohere (feature = "cohere")
let reranker = new?
.with_model;
// Jina (feature = "jina")
let reranker = new?
.with_model;
信号系统
| 信号 | 名称 | 默认权重 | 说明 |
|---|---|---|---|
| KeywordOverlapSignal | keyword_overlap |
0.30 | 查询-文档 Jaccard 关键词重叠度 |
| VectorSimilaritySignal | vector_similarity |
0.25 | 余弦相似度(需要 embedding 字段) |
| MetadataMatchSignal | metadata_match |
0.20 | 元数据键值对匹配度 |
| ContentQualitySignal | content_quality |
0.10 | 内容长度、标点等启发式质量分 |
| RecencySignal | recency |
0.15 | 时间近因性(线性/指数/无衰减) |
权重可通过 SignalWeights 自定义,支持归一化。通过 LocalSignalReranker::with_signal() 可以注入自定义 SignalPlugin。
结果缓存
use *;
use Duration;
let cache = new; // 最多缓存 1000 条
cache.set.await;
let cached = cache.get.await;
Feature Flags
| Feature | 启用内容 |
|---|---|
| (default) | 本地信号重排序 + Mock |
cohere |
Cohere Rerank API 适配 |
jina |
Jina Reranker API 适配 |
许可证
MIT OR Apache-2.0