Skip to content

[Feature]: 核心模型管理新增 Rerank 模型类型支持 #2033

@huanghuoguoguo

Description

@huanghuoguoguo

背景

当前 LangBot 的模型管理仅支持两种 support_typellmtext-embedding。RAG 检索质量的提升通常依赖 Rerank(重排序)模型,对初步检索结果进行精排。目前 LangBot 核心和 LangRAG 插件均不支持 Rerank。

Rerank 模型的接口语义(输入 query + documents,输出相关性分数)与 LLM / Embedding 完全不同,无法复用现有模型类型,需要作为新的模型类型加入核心。

方案

核心模型管理扩展

1. support_type 新增 rerank

各厂商 requester 的 YAML 清单中可声明 support_type: [llm, text-embedding, rerank]

2. ProviderAPIRequester 基类新增方法

# requester.py
async def invoke_rerank(
    self,
    model: RuntimeRerankModel,
    query: str,
    documents: list[str],
    top_k: int | None = None,
    extra_args: dict = {},
) -> list[RerankResult]:
    """对 documents 相对于 query 进行相关性排序"""
    raise NotImplementedError

3. 数据模型层新增

# persistence/model.py
class RerankModel(Base):
    __tablename__ = 'rerank_models'
    uuid: str          # PK
    name: str          # 模型标识(如 jina-reranker-v2)
    provider_uuid: str # FK → model_providers
    extra_args: dict

# requester.py
class RuntimeRerankModel:
    model_entity: RerankModel
    provider: RuntimeProvider

4. ModelManager 扩展

# modelmgr.py
class ModelManager:
    rerank_models: list[RuntimeRerankModel]
    
    async def get_rerank_model_by_uuid(self, uuid: str) -> RuntimeRerankModel

5. Plugin Action 新增

# PluginToRuntimeAction 新增
INVOKE_RERANK = "invoke_rerank"

# handler.py 中新增处理逻辑
# 插件通过 self.plugin.invoke_rerank(rerank_model_uuid, query, documents) 调用

6. 厂商 requester 实现

有独立 Rerank API 的厂商:

  • Jina(jina-reranker-v2)
  • Cohere(rerank-v3)
  • NVIDIA(NIM reranker)
  • 硅基流动(SILICONFLOW)
  • 百度千帆
  • 通义千问

其余厂商可不实现,调用时抛 NotImplementedError。

预计代码改动

文件 改动
requester.py 新增 invoke_rerank 抽象方法、RuntimeRerankModel
modelmgr.py 新增 rerank_models 列表、加载/查询方法
persistence/model.py 新增 RerankModel ORM 模型
handler.py 新增 INVOKE_RERANK action 处理
requesters/*.py 需要支持 rerank 的厂商实现 invoke_rerank
requesters/*.yaml support_type 中增加 rerank
HTTP API 层 新增 rerank 模型的 CRUD 接口
数据库迁移 新增 rerank_models

LangRAG 插件配合改动

检索流程变为:
用户查询 → Embedding → 向量搜索(top_n) → Rerank(query, candidates) → 精排 top_k
  • retrieval_schema 中增加 rerank_model_uuid(model-selector 类型)
  • 检索时调用 self.plugin.invoke_rerank(rerank_model_uuid, query, texts)
  • 按 rerank 分数重新排序后返回

参考

RAGFlow 的 Rerank 模型管理(rag/llm/rerank_model.py)实现了 18+ 厂商,核心接口 similarity(query, texts) -> (scores, token_count),在 rag/nlp/search.py 中通过加权混合公式 tkweight * tksim + vtweight * vtsim 融合关键词分数和 rerank 分数。

Metadata

Metadata

Assignees

No one assigned

    Labels

    eh: Featureenhance: 新功能添加 / add new featuresm: Plugins插件加载及管理模块 / Plugins loading and managementm: ProviderLLM 模型相关 / LLMs managementpd: Need testingpending: 待测试的PR / PR waiting to be tested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions