-
Notifications
You must be signed in to change notification settings - Fork 1.4k
[Feature]: 核心模型管理新增 Rerank 模型类型支持 #2033
Copy link
Copy link
Open
Labels
eh: Featureenhance: 新功能添加 / add new featuresenhance: 新功能添加 / add new featuresm: Plugins插件加载及管理模块 / Plugins loading and management插件加载及管理模块 / Plugins loading and managementm: ProviderLLM 模型相关 / LLMs managementLLM 模型相关 / LLMs managementpd: Need testingpending: 待测试的PR / PR waiting to be testedpending: 待测试的PR / PR waiting to be tested
Description
背景
当前 LangBot 的模型管理仅支持两种 support_type:llm 和 text-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 NotImplementedError3. 数据模型层新增
# 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: RuntimeProvider4. ModelManager 扩展
# modelmgr.py
class ModelManager:
rerank_models: list[RuntimeRerankModel]
async def get_rerank_model_by_uuid(self, uuid: str) -> RuntimeRerankModel5. 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 分数。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
eh: Featureenhance: 新功能添加 / add new featuresenhance: 新功能添加 / add new featuresm: Plugins插件加载及管理模块 / Plugins loading and management插件加载及管理模块 / Plugins loading and managementm: ProviderLLM 模型相关 / LLMs managementLLM 模型相关 / LLMs managementpd: Need testingpending: 待测试的PR / PR waiting to be testedpending: 待测试的PR / PR waiting to be tested