使用Ragflow利用Xinference建立企业RAG知识库教程

461 阅读7分钟

一、Ragflow与Xinference简介

(一)Ragflow

Ragflow是一款基于深度文档理解构建的开源RAG(Retrieval-Augmented Generation)引擎,能为各种规模的企业及个人提供精简高效的RAG工作流程。它支持多种复杂格式的非结构化数据,可从海量数据中精准提取关键信息,采用模板化分块处理,能减少生成错误信息的可能性,还提供自动化的RAG工作流,适用于智能客服、知识管理等多个领域。

(二)Xinference

Xinference是一个性能强大且功能全面的分布式推理框架,可用于大语言模型、语音识别模型、多模态模型等各种模型的推理。它简化了模型的部署流程,支持多种前沿开源模型,能智能利用异构硬件资源,提供多种与模型交互的接口,还支持分布式部署,可与流行的三方库无缝对接。

二、环境准备

(一)硬件要求

  • CPU:建议采用多核CPU,至少4核,以确保系统能够流畅运行,尤其是在处理大规模知识库数据和复杂查询时。
  • 内存:至少16GB,为系统运行和数据处理提供足够的空间,避免因内存不足导致性能下降或程序崩溃。
  • 硬盘:至少50GB的磁盘空间,用于存储知识库数据、索引文件以及系统运行过程中产生的其他数据。如需部署大规模检索服务,可考虑使用分布式存储集群。

(二)软件要求

  • 操作系统:推荐使用Linux发行版(如CentOS、Ubuntu)以便于Shell脚本自动化管理;同时也支持Windows环境,但在部署自动化脚本时可能需要适当调整。
  • Docker:版本需大于等于24.0.0,确保具备较新的功能和稳定性支持。
  • Docker Compose:版本大于等于v2.26.1,用于管理和编排容器化应用。
  • 开发语言与工具:主要使用Java进行系统核心模块开发,同时结合Shell脚本实现自动化运维。需要安装Java 8及以上版本,同时配置Maven或Gradle进行依赖管理;对于数据检索部分,可采用ElasticSearch、Apache Solr等开源检索引擎;生成模块则依赖于预训练模型,可以借助TensorFlow或PyTorch进行实现。

(三)系统参数优化

确保vm.max_map_count不小于262144,可按以下步骤操作:

  1. 查看vm.max_map_count的当前值:
$ sysctl vm.max_map_count
  1. 如果值小于262144,将其临时重置为262144:
$ sudo sysctl -w vm.max_map_count=262144
  1. 若希望改动永久生效,在/etc/sysctl.conf文件里更新vm.max_map_count的值:
vm.max_map_count=262144

三、安装Ragflow

(一)克隆仓库

git clone https://github.com/infiniflow/ragflow.git

(二)修改镜像(可选)

如果拉取镜像速度较慢,可以修改镜像源。找到Ragflow源码中docker/.env文件,将其中的RAGFLOW_IMAGE修改为国内镜像源,例如华为镜像源:

RAGFLOW_IMAGE=swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:dev

(三)启动Ragflow

打开终端,进入Ragflow项目目录(包含docker-compose.yml文件的目录),执行以下命令启动Ragflow服务:

$ cd ragflow
$ docker compose -f docker/docker-compose.yml up -d

(四)确认服务器状态

docker logs -f ragflow-server

若输出类似如下内容,则表示启动成功:

     ____   ___    ______ ______ __       
    / __ \ /   |  / ____// ____// /____  _      __     
   / /_/ // /| | / / __ / /_   / // __ | | /| / /    
  / _, _// ___ |/ /_/ // __/  / // /_/ /| |/ |/ /    
 /_/ |_|/_/  |_|____//_/    /_/ ____/ |__/|__/      

 * Running on all addresses (0.0.0.0)    
 * Running on http://127.0.0.1:9380    
 * Running on http://x.x.x.x:9380   
 INFO:werkzeug:Press CTRL+C to quit

(五)访问Ragflow

打开浏览器,访问http://127.0.0.1(默认端口为80),进入Ragflow的主页。

四、安装Xinference

(一)使用pip安装

pip install "xinference[all]"

(二)启动本地Xinference实例

xinference-local --host 0.0.0.0 --port 9997

(三)验证Xinference运行

可以通过以下几种方式验证Xinference是否正常运行:

  • 访问Web UI:在浏览器中输入http://127.0.0.1:9997/ui
  • 查看API文档:在浏览器中输入http://127.0.0.1:9997/docs
  • 使用命令行工具:安装Xinference命令行工具和Python客户端,使用xinference --help查看可用命令。
pip install xinference
xinference --help

五、配置Ragflow与Xinference

(一)Ragflow注册与登录

在Ragflow主页上,按照页面提示流程,先注册一个账号,填写必要的信息并完成注册。注册成功后,使用注册的账号登录系统。

(二)添加Xinference模型到Ragflow

  1. 登录Ragflow后,点击右上角头像,再点击“模型提供商”。
  2. 点击“Xinference”添加模型,填写模型信息,例如模型名称、模型类型等。确保模型信息与Xinference中已部署的模型一致。

(三)创建知识库

  1. 登录后,点击相应按钮创建一个新的知识库,为知识库命名以便识别和管理。

  2. 上传本地文件到知识库,目前支持的文件格式可能包括常见的文档格式(如PDF、DOCX等)、文本文件等。上传完成后,系统将显示文件的相关信息,如分块数、上传日期、解析方法和解析状态等。

  3. 配置解析规则:

    • 分块大小:建议512 - 1024 tokens。
    • 元数据提取:自动识别作者、日期等字段。
  4. 启动文档解析,等待进度条完成。

(四)配置模型参数

等待知识库文件解析完成后,进入聊天界面,点击新建一个助理,为助理命名并进行配置。在模型设置页面,选择之前添加的Xinference模型,并根据需要调整模型参数,如:

  • 温度(Temperature):控制模型输出的随机性,取值范围通常在0到1之间。较高的值(如0.90)会使输出更具随机性,而较低的值会使输出更确定性。
  • Top P:用于控制模型在生成响应时考虑的前几个概率最高的词元的比例。例如,Top P值为0.90表示模型将考虑概率总和占前90%的词元。
  • 存在处罚(Presence Penalty):对模型生成的新单词进行惩罚,以鼓励模型生成多样化的文本。取值范围一般在0到1之间,较高的值会增加模型生成新单词的可能性。
  • 频率惩罚(Frequency Penalty):对模型生成中频繁出现的单词进行惩罚,以避免重复。取值范围通常在0到1之间,较高的值会减少频繁单词的出现。
  • 最大token数(Max Tokens):限制模型生成的响应中包含的最大词元数量,以控制响应的长度。例如,设置为512表示模型生成的响应最多包含512个词元。

六、使用与测试

(一)使用知识库

完成上述配置后,即可与创建的助理进行聊天。在聊天输入框中输入问题,助理将根据知识库中的内容和配置的Xinference模型进行回答,为您提供准确、有用的信息。例如,您可以询问知识库中关于特定主题的知识、请求对某个问题的解释或寻求相关的建议等。

(二)测试与优化

  • 检索分析:查看检索日志,包括命中的文档片段、相关性评分、大模型改写后的查询语句等,评估检索效果。
  • 根据测试结果,调整分块策略、模型参数等,以优化知识库的性能和回答的准确性。

七、注意事项

  • 在整个搭建和使用过程中,密切关注系统的运行状态和日志信息。如果遇到任何问题,如服务启动失败、文件解析错误、模型响应异常等,及时查看日志文件(通常位于Ragflow项目目录下的特定日志文件夹中),根据错误提示进行排查和解决。
  • 定期备份知识库数据,以防止数据丢失或损坏。可以制定定期备份计划,将知识库数据备份到外部存储设备或云端存储服务中。
  • 关注Ragflow和Xinference的官方文档和社区论坛,获取最新的版本更新、功能改进和问题解决方案。

原文地址:https://www.cnblogs.com/ezezwyj/articles/18887417