大模型RAG之检索排序Rerank

大模型RAG之检索排序Rerank

前言

Xinference 是一款由 领先AI团队 开发的 开源 RAGRetrieval-Augmented Generation)检索排序优化工具 ,专注于提升大模型在知识增强生成任务中的准确性和效率。其核心功能是通过 多维度重排序(Rerank 优化初步检索结果,筛选出与用户查询最相关的文档片段,从而显著提升大模型生成答案的质量。

Xinference 的作用

  1. 精准排序增强:对初步检索(如基于BM25、Embedding相似度)的文档进行重新打分和排序,优先保留高相关性内容。
  2. 噪声过滤:剔除低质量、冗余或离题文档,减少大模型生成时的干扰。
  3. 多模态支持:兼容文本、图像、结构化数据的混合检索排序(若支持多模态版本)。
  4. 性能优化:通过分布式计算加速海量候选文档的排序过程,降低延迟。

为何使用 Xinference?

  1. 解决检索-生成瓶颈 传统RAG流程中,初步检索结果可能包含大量低相关文档,直接影响生成效果。Xinference通过精细化排序,提升输入数据的质量。
  2. 灵活适配多种模型 支持与主流大模型(如GPTLLaMAChatGLM)及检索系统(ElasticsearchFAISS)无缝集成,无需改造现有架构。
  3. 开源与可定制提供开放的代码和模型微调接口,允许企业根据业务场景定制排序策略(如融合业务规则、领域知识)。
  4. 资源高效利用 采用轻量级模型和缓存机制,在CPU/GPU环境下均能高效运行,降低算力成本。

Xinference 的优缺点

优点

  • 精度提升显著 :基于深度学习(如Cross-Encoder、对比学习)的排序模型,优于传统规则方法。
  • 部署灵活:支持本地、云端及边缘设备部署,适应不同规模场景。
  • 社区生态支持:背靠活跃开源社区,持续更新预训练模型和优化算法。

缺点

  • 依赖标注数据:自定义排序模型需高质量标注数据,冷启动成本较高。
  • 实时性局限:复杂排序模型可能增加毫秒级延迟,对超低延迟场景需优化。
  • 多语言覆盖不足:当前版本可能以中英文为主,小语种支持依赖社区贡献。

对比其它Rerank工具

工具 Xinference Cohere Rerank Sentence-Transformers Cross-Encoder Elasticsearch LTR
核心能力 开源可定制,支持多模态 商业API,高精度 开源,轻量级单模型排序 内置Learning to Rank,依赖特征工程
排序模型 预训练+微调,支持混合策略 专用黑盒模型 预训练Cross-Encoder(如MiniLM) 线性模型、树模型(需自定义特征)
部署成本 可本地化,资源消耗中等 按API调用付费,成本高 本地运行,资源消耗低 依赖Elasticsearch集群,运维复杂
适用场景 企业级定制化RAG、多模态场景 快速验证原型,无运维负担 轻量级排序需求,中小规模数据 已用Elasticsearch,需简单排序增强
劣势 需技术团队维护 数据隐私风险,灵活性低 模型单一,复杂场景效果有限

Xinference开源RAG场景下重排序的优选工具 ,尤其适合需要高精度、可定制化且注重数据隐私的企业。相比商业API(如Cohere),Xinference 提供更高的灵活性和控制权;对比轻量级方案Sentence-Transformers,其支持更复杂的混合排序策略;与Elasticsearch LTR相比,Xinference 更适配深度学习驱动的排序需求。选择时需权衡开发资源、数据规模及业务场景的定制化程度。

安装

conda 创建一个新环境

bash 复制代码
conda create -p /opt/Anaconda3/envs/xinference_env python=3.11 -y
conda activate xinference_env

如果想安装所有依赖

bash 复制代码
pip install "xinference[all]"

如果只有cpu,使用 Llama.cpp 引擎 性能更好。 Xinference 通过 llama-cpp-python 支持 gguf 格式`的模型。

bash 复制代码
pip install xinference
pip install llama-cpp-python

如果想使用 Transformers 引擎 ,可以执行以下命令

bash 复制代码
pip install "xinference[transformers]"

使用

启动Xinference

执行以下命令启动 xinference

bash 复制代码
xinference-local --host 0.0.0.0 --port 9997

# 如果要设置日志文件和模型文件的路径,可以如下启动
XINFERENCE_HOME=/tmp/xinference xinference-local --host 0.0.0.0 --port 9997

访问地址: http://localhost:9997

启动模型

启动 bge-reranker-base 模型,点击小火箭图标。

启动有可能会报错,因为访问 hugging-face 需要科学上网,我们可以设置国内镜像。

魔塔社区

启动时将模型源改成魔塔社区,再次下载

bash 复制代码
XINFERENCE_MODEL_SRC=modelscope xinference-local --host 0.0.0.0 --port 9997

此外在启动模型的可选参数里,也可以配置模型社区。

客户端示例

查询相似度

如果是代码中启动模型,则如下调用 client.launch_model 方法;

如果是在 Xinference UI 上手动启动模型,则在 client.get_model 时传入 model_uid 来获取模型。

bash 复制代码
from xinference.client import Client

client = Client("http://127.0.0.1:9997")

# 启动模型
model_uid = client.launch_model(model_name="bge-reranker-base",
                                model_type="rerank",
                                model_engine=None,
                                model_format=None,
                                model_size_in_billions=None,
                                quantization=None)
# model_uid = 'bge-reranker-base'
model = client.get_model(model_uid)

query = "A man is eating pasta."
corpus = [
    "A man is eating a piece of bread.",
    "A man is eating food.",
    "The girl is carrying a baby.",
    "A man is riding a horse.",
    "A woman is playing violin."
]

print(model.rerank(corpus, query))

返回结果显示, index = 1 的词条和 query 的相似度最高,达到了 0.99 。即 A man is eating food.A man is eating pasta. 的相似度最高。

卸载/注销模型

client.unload_model 卸载模型是暂时释放模型资源,并没有彻底在本地硬盘里删除模型;

client.unregister_model 注销模型不仅从内存释放模型资源,还将模型的元信息和配置信息等一并删除。

bash 复制代码
from xinference.client import Client

# 创建客户端实例
client = Client("http://127.0.0.1:9997")

# 列出所有已加载的模型
models = client.list_models()
print("Loaded models:", models)

# 卸载一个暂时不需要的模型
model_name_to_unload = "model_name_1"
client.unload_model(model_name_to_unload)
print(f"Model '{model_name_to_unload}' has been unloaded.")

# 注销一个不再需要的模型
model_name_to_unregister = "model_name_2"
client.unregister_model(model_name_to_unregister)
print(f"Model '{model_name_to_unregister}' has been unregistered.")

# 确认模型已被删除
models = client.list_models()
print("Current loaded models:", models)

卸载完之后可以去模型的下载地址确认一下

bash 复制代码
~/.cache/modelscope/hub/models
~/.cache/modelscope/hub/models/._____temp/qwen

WEB UI上也能对模型缓存进行查看和管理。

Dify 配置 Rerank

Dify右上角点击设置,左侧选择模型供应商,右侧找到Xorbits Inference

点击添加模型之后弹出一个对话框,填写配置信息

参考

安装 --- Xinference

【4.8k Star Xinference部署】为知识库接入本地Rerank模型,全面提升检索效率_本地部署reranker模型-CSDN博客

相关推荐
骑驴看星星a1 分钟前
P10416 [蓝桥杯 2023 国 A] XYZ
算法·职场和发展·蓝桥杯
绝顶大聪明2 分钟前
【图像轮廓特征查找】图像处理(OpenCV) -part8
图像处理·人工智能·opencv
liruiqiang053 分钟前
神经网络优化 - 小批量梯度下降之批量大小的选择
人工智能·深度学习·神经网络·机器学习·梯度下降
AI大模型顾潇3 分钟前
[特殊字符] Prompt如何驱动大模型对本地文件实现自主变更:Cline技术深度解析
前端·人工智能·llm·微调·prompt·编程·ai大模型
又过一个秋7 分钟前
【sylar-webserver】重构日志系统
linux·c++·算法·重构
Blossom.11812 分钟前
量子计算与经典计算融合:开启计算新时代
人工智能·深度学习·opencv·物联网·生活·边缘计算·量子计算
虽千万人 吾往矣12 分钟前
golang channel源码
开发语言·后端·golang
_十六24 分钟前
文档即产品!工程师必看的写作密码
前端·后端
radient24 分钟前
线上FullGC问题如何排查 - Java版
后端·架构