xz-rerank 0.1.1

检索结果重排序 — 本地多信号融合 + 远程 Rerank API 适配
Documentation
use serde::{Deserialize, Serialize};

/// 重排序配置
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RerankConfig {
    /// 最终返回的最大候选项数
    pub top_k: usize,
    /// 最低分数阈值
    pub min_score: Option<f32>,
    /// 是否返回分数分解
    pub include_score_breakdown: bool,
    /// 是否按通道区分近因性衰减
    pub recency_mode: Option<RecencyMode>,
    /// 查询向量(用于 vector_similarity 信号运行时注入)
    pub query_embedding: Option<Vec<f32>>,
}

impl Default for RerankConfig {
    /// 返回默认配置:`top_k=10`,`min_score=0.2`,指数衰减
    fn default() -> Self {
        Self {
            top_k: 10,
            min_score: Some(0.2),
            include_score_breakdown: false,
            recency_mode: Some(RecencyMode::ExponentialDecay { decay_rate: 0.01 }),
            query_embedding: None,
        }
    }
}

/// 近因性衰减模式
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum RecencyMode {
    /// 不衰减
    NoDecay,
    /// 线性衰减
    LinearDecay {
        /// 最大存在天数,超过此天数的候选项分数将为 0
        max_age_days: f64,
    },
    /// 指数衰减
    ExponentialDecay {
        /// 衰减率(越大衰减越快)
        decay_rate: f64,
    },
}

/// 按通道区分的近因性规则
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChannelRecencyRule {
    /// 通道名称
    pub channel: String,
    /// 近因性衰减模式
    pub mode: RecencyMode,
}