本文记录 Windows + Miniconda 环境下,搭建 BAAI/bge-reranker-v2-m3 本地重排序服务,并实现 Dify 对接本地 Rerank 的完整流程。

同时记录踩坑过程、依赖冲突解决方案,并提供可直接复制运行的完整命令与代码,方便后续快速复现。


在这里插入图片描述

一、环境准备

1. 创建 Conda 环境

conda create -n rerank python=3.10 -y
conda activate rerank

2. 安装依赖

方式 1:先安装基础包(踩坑版本)

我自己尝试的分步安装方式,需要后续手动修复依赖冲突,仅用于记录踩坑过程

pip install fastapi uvicorn FlagEmbedding
方式 2:一步到位安装(推荐,直接装正确版本)

直接安装全部正确版本依赖,无冲突、不报错、安装完可直接运行服务:

pip install ^
FlagEmbedding==1.4.0 ^
fastapi uvicorn ^
transformers==4.44.2 ^
tokenizers==0.19.1 ^
huggingface-hub==0.25.2 ^
fsspec[http]==2026.2.0

选择方式 2 安装完成后,可直接跳到第五步运行 rerank.py 启动服务


二、版本冲突问题

直接安装后运行代码,大概率会出现以下错误:

  • AttributeError: XLMRobertaTokenizer has no attribute 'prepare_for_model'
  • ImportError: cannot import name 'EncoderDecoderCache'

原因:transformers 版本过高,与 FlagEmbedding 不兼容。


三、解决方案

1. 强制降级核心依赖

pip install -U --force-reinstall ^
"transformers==4.44.2" ^
"tokenizers==0.19.1" ^
"huggingface-hub==0.25.2"

2. 依赖冲突说明

执行后会出现以下提示,不会影响 Rerank 服务运行,可忽略也可选择修复:

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed.
This behaviour is the source of the following dependency conflicts.
datasets 4.8.5 requires fsspec[http]<=2026.2.0,>=2023.1.0, but you have fsspec 2026.4.0 which is incompatible.

3. 检查当前依赖冲突

pip check

输出:

datasets 4.8.5 has requirement fsspec[http]<=2026.2.0,>=2023.1.0, but you have fsspec 2026.4.0.

4. 修复 fsspec 版本冲突

pip install "fsspec[http]==2026.2.0"

5. 验证依赖是否完全正常

pip check

输出:

No broken requirements found.

依赖环境正常


四、最终可用完整代码(OpenAI 兼容)

文件名:rerank.py

import os
import time

# 国内镜像加速下载
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
# 模型下载到当前目录 models 文件夹
os.environ["HUGGINGFACE_HUB_CACHE"] = "./models"

from fastapi import FastAPI, Body
from FlagEmbedding import FlagReranker
import uvicorn

app = FastAPI(title="Rerank Service (OpenAI Compatible)")

# 加载模型
reranker = FlagReranker(
    "BAAI/bge-reranker-v2-m3",
    use_fp16=True
)


@app.post("/v1/rerank")
def rerank(
    model: str = Body("bge-reranker-v2-m3"),
    query: str = Body(...),
    documents: list[str] = Body(...),
    top_n: int | None = Body(None)
):
    pairs = [[query, doc] for doc in documents]
    scores = reranker.compute_score(pairs)

    results = [
        {
            "index": idx,
            "relevance_score": float(score)
        }
        for idx, score in enumerate(scores)
    ]

    results.sort(key=lambda x: x["relevance_score"], reverse=True)

    if top_n is not None:
        results = results[:top_n]

    return {
        "id": f"rerank-{int(time.time() * 1000)}",
        "object": "list",
        "model": model,
        "results": results,
        "usage": {
            "total_tokens": 0
        }
    }


if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=6609)

五、启动 Rerank 服务

python rerank.py

成功启动日志

INFO:     Started server process [14712]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:6609 (Press CTRL+C to quit)
You're using a XLMRobertaTokenizerFast tokenizer...

六、Dify 配置(重排模型)

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐