Dify Rerank 模型配置全流程解析:从报错定位到代码实现

一、问题背景:神秘的 'results' 错误

在 Dify 1.0.0+ 版本中配置 Rerank 模型时,可能会遇到以下错误:

CredentialsValidateFailedError: 'results'

此错误提示模型凭证验证失败,但具体原因并不明确。
通过日志追踪,发现错误发生在 凭证校验阶段,核心问题在于插件代码与服务端返回数据格式不兼容。


二、错误定位:代码调用链路分析
1. 核心调用链路

Dify 通过插件机制调用 Rerank 模型,关键代码分布在多个仓库:

代码路径 作用说明
dify/api/services/model_provider_service.py 触发凭证校验逻辑,调用插件管理器
dify-plugin-daemonrerank.py 模板 初始插件代码,但 _invoke 为空实现
dify-official-plugins/models/openai_api_compatible/models/rerank/rerank.py 实际模型实现,继承自 OAICompatRerankModel
dify-plugin-sdks/python/dify_plugin/interfaces/model/openai_compatible 定义 OAICompatRerankModel 类,实现 HTTP 请求与结果解析
2. 错误根源

最终报错位置位于 OAICompatRerankModel._invoke 方法,代码强制要求服务端返回的 JSON 中必须包含 results 字段。若服务端响应格式不符合,则触发 KeyError,最终抛出 CredentialsValidateFailedError


三、核心代码解析:_invoke 方法实现

完整代码位于 dify-plugin-sdksrerank.py,以下是关键逻辑:

class OAICompatRerankModel(RerankModel):
    def _invoke(
        self,
        model: str,
        credentials: dict,
        query: str,
        docs: list[str],
        score_threshold: Optional[float] = None,
        top_n: Optional[int] = None,
        user: Optional[str] = None,
    ) -> RerankResult:
        # 1. 参数校验与请求构建
        server_url = credentials["endpoint_url"]
        model_name = model
        if not server_url or not model_name:
            raise CredentialsValidateFailedError("Missing required parameters")

        # 2. 发送 HTTP 请求(兼容 Jina API 格式)
        url = str(URL(server_url) / "rerank"
        headers = {
   
   "Authorization": f"Bearer {
     
     credentials.get('api_key')}"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值