大模型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博客

相关推荐
lqjun08272 分钟前
Focal Loss 原理详解及 PyTorch 代码实现
人工智能·pytorch·python
科技小E2 分钟前
WebRTC技术EasyRTC嵌入式音视频通信SDK打造远程实时视频通话监控巡检解决方案
人工智能·音视频
风虎云龙科研服务器9 分钟前
英伟达Blackwell架构重构未来:AI算力革命背后的技术逻辑与产业变革
人工智能·重构·架构
写个博客20 分钟前
代码随想录算法训练营第三十九天
算法
白熊18832 分钟前
【计算机视觉】OpenCV实战项目:基于Tesseract与OpenCV的字符识别系统深度解析
人工智能·opencv·计算机视觉
kovlistudio1 小时前
机器学习第三讲:监督学习 → 带答案的学习册,如预测房价时需要历史价格数据
人工智能·机器学习
源码方舟1 小时前
【基于ALS模型的教育视频推荐系统(Java实现)】
java·python·算法·音视频
嵌入式仿真实验教学平台1 小时前
「国产嵌入式仿真平台:高精度虚实融合如何终结Proteus时代?」——从教学实验到低空经济,揭秘新一代AI赋能的产业级教学工具
人工智能·学习·proteus·无人机·低空经济·嵌入式仿真·实验教学
蜗牛沐雨1 小时前
Rust 中的 `PartialEq` 和 `Eq`:深入解析与应用
开发语言·后端·rust
Python私教1 小时前
Rust快速入门:从零到实战指南
开发语言·后端·rust