【RAGFlow】Ubuntu系统下实现源码启动RAGFlow

在这里插入图片描述

一、RAGFlow 是什么?

RAGFlow 是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程,结合大语言模型(LLM)针对用户各类不同的复杂格式数据提供可靠的问答以及有理有据的引用。
在这里插入图片描述

二、RAGFlow架构设计

在这里插入图片描述
检索流程

  • 首先Questions提出问题,由查询分析器进行Keyword & Embedding,到AI 原生数据库(Infinity)进行相似性检索,返回Chunk数据
  • 然后基于多路召回、融合重排序处理,得到更精确、准确答案
  • 最后调用LLMs进行内容生成,返回答案给用户

知识加载

  • Documents加载进行Task Dispatch分发,进行Task Exector
  • 基于深度文档理解(DeepDoc)处理,如:OCR、文档解析、文档分层分析、表结构识别
  • 最后基于可控可解释的模板文本切片,形成Chunk存入AI 原生数据库

三、RAGFlow主要功能

Quality in, quality out

  • 基于深度文档理解,能够从各类复杂格式的非结构化数据中提取真知灼见。
  • 真正在无限上下文(token)的场景下快速完成大海捞针测试。

基于模板的文本切片

  • 不仅仅是智能,更重要的是可控可解释。
  • 多种文本模板可供选择

有理有据、最大程度降低幻觉(hallucination)

  • 文本切片过程可视化,支持手动调整。
  • 有理有据:答案提供关键引用的快照并支持追根溯源。

兼容各类异构数据源

  • 支持丰富的文件类型,包括 Word 文档、PPT、excel 表格、txt 文件、图片、PDF、影印件、复印件、结构化数据, 网页等。

全程无忧、自动化的 RAG 工作流

  • 全面优化的 RAG 工作流可以支持从个人应用乃至超大型企业的各类生态系统。
  • 大语言模型 LLM 以及向量模型均支持配置。
  • 基于多路召回、融合重排序。
    • 多路召回:策略是指采用不同的策略、特征或简单模型,根据相关任务的特点,合适的召回规则,分别召回一部分候选集。在“计算速度”和“召回率”之间进行了权衡,可以使用多线程并发技术,从而提高效率。
    • 融合重排序:则是对多路召回得到的候选集进行进一步的优化排序。它结合了多个排序算法的优点,形成了一种全新的排序算法,旨在提高排序的准确性和速度。
    • 多路召回和融合重排序的推荐系统能够充分利用各种策略和算法的优点,提高推荐的准确性和效率,从而提升用户体验
  • 提供易用的 API,可以轻松集成到各类企业系统。

四、源码启动服务

4.1 环境安装

4.1.1 更新系统软件包

1.到手一个全新的Ubuntu系统,从零开始搭建,使用MobaXterm来远程Ubuntu系统进行操作。
在这里插入图片描述

2.更新本地包列表:apt-get update;升级已安装的软件包到最新版本:apt-get upgrade
在这里插入图片描述

4.1.2 安装conda、python3、git、pip3

在Ubuntu系统上安装conda、Python、git和pip的详细步骤如下:

4.1.2.1 安装conda

Conda是一个开源的包、依赖和环境管理器,用于安装多个版本的软件包及其依赖,并在它们之间轻松切换。以下是安装conda的步骤:

  1. 下载Anaconda
  • 使用wget命令从清华大学开源软件镜像站下载Anaconda安装包(以最新版本为例,请根据实际情况替换URL中的版本号)。
# 下载最新镜像源
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.06-1-Linux-x86_64.sh

注意:由于无法直接获取当前最新版本的URL,请访问清华大学开源软件镜像站

由于清华镜像站安装时出错了,所以换了源下载下来。
在这里插入图片描述

下载成功的源地址如下:

wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.06-1-Linux-x86_64.sh

在这里插入图片描述

  1. 安装Anaconda
  • 执行下载的shell脚本进行安装。
bash Anaconda3-2024.06-1-Linux-x86_64.sh
  • 跟随安装程序的提示操作,包括阅读并同意许可协议、选择安装位置等。
  • 安装完成后,根据提示初始化conda(可选,但推荐)。
  • 一路默认安装到了路径 /root/anaconda3下面了
    在这里插入图片描述
    在这里插入图片描述
  1. 验证安装
  • 安装完成后,conda下的bin文件会添加到环境变量里面,这时候需要source一下bash文件
source ~/.bashrc
  • 再通过运行conda --version来验证conda是否已成功安装。
    在这里插入图片描述
4.1.2.2 安装Python3

Ubuntu系统通常已经预装了Python3。但如果你需要安装特定版本的Python3或确认是否已安装,可以按照以下步骤操作:
1.检查Python3版本:

  • 在终端中输入python3 --version 来检查已安装的Python3版本。

在这里插入图片描述

2.安装Python(如果未安装):

  • 使用apt包管理器安装Python 3:apt-get install python3
4.1.2.3 安装git
  • Git是一个开源的分布式版本控制系统,用于跟踪和管理代码更改。以下是安装git的步骤:
    1.安装git:
  • 使用apt包管理器安装git:apt-get install git
    2.验证安装:
  • 通过运行git --version来验证git是否已成功安装。
    在这里插入图片描述
4.1.2.4 安装pip3

pip是Python的包安装程序,用于安装和管理Python包。Ubuntu系统通常已经预装了pip。但如果你需要安装或更新pip,可以按照以下步骤操作:

  1. 安装pip(如果未安装):
  • 使用apt包管理器安装pip:apt-get install python3-pip
  1. 更新pip(如果需要):
  • 使用pip自身来更新:pip3 install --upgrade pip3
  1. 验证安装:
  • 通过运行pip3 --version来验证pip是否已成功安装。
    在这里插入图片描述

通过以上步骤,可以在Ubuntu系统上成功安装conda、Python、git和pip。这些工具将帮助你更有效地进行软件开发和版本控制。

4.1.3 安装Ragflow

4.1.3.1 克隆Ragflow的源代码
  • 使用Git克隆Ragflow的GitHub仓库。打开终端,执行以下命令:
git clone https://github.com/infiniflow/ragflow.git

在这里插入图片描述

  • 打开ragflow目录
cd ragflow

在这里插入图片描述

4.1.3.2 创建Python虚拟环境

为了避免依赖冲突,建议为Ragflow创建一个独立的Python虚拟环境。使用conda来创建。

conda create -n ragflow python=3.12.4

在这里插入图片描述

conda activate ragflow

在这里插入图片描述

4.1.3.3 安装依赖
  • 在Ragflow的源代码目录中,找到requirements.txt文件,并使用pip安装所有依赖。
    依赖清单如下:
accelerate==0.27.2
aiohttp==3.9.5
aiosignal==1.3.1
annotated-types==0.6.0
anyio==4.3.0
argon2-cffi==23.1.0
argon2-cffi-bindings==21.2.0
Aspose.Slides==24.2.0
attrs==23.2.0
blinker==1.7.0
cachelib==0.12.0
cachetools==5.3.3
certifi==2024.2.2
cffi==1.16.0
charset-normalizer==3.3.2
click==8.1.7
coloredlogs==15.0.1
cryptography==42.0.5
dashscope==1.14.1
datasets==2.17.1
datrie==0.8.2
demjson3==3.0.6
dill==0.3.8
distro==1.9.0
elastic-transport==8.12.0
elasticsearch==8.12.1
elasticsearch-dsl==8.12.0
et-xmlfile==1.1.0
filelock==3.13.1
fastembed==0.2.6
FlagEmbedding==1.2.5
Flask==3.0.2
Flask-Cors==4.0.0
Flask-Login==0.6.3
Flask-Session==0.6.0
flatbuffers==23.5.26
frozenlist==1.4.1
fsspec==2023.10.0
h11==0.14.0
hanziconv==0.3.2
httpcore==1.0.4
httpx==0.27.0
huggingface-hub==0.20.3
humanfriendly==10.0
idna==3.6
install==1.3.5
itsdangerous==2.1.2
Jinja2==3.1.3
joblib==1.3.2
lxml==5.1.0
MarkupSafe==2.1.5
minio==7.2.4
mpmath==1.3.0
multidict==6.0.5
multiprocess==0.70.16
networkx==3.2.1
nltk==3.8.1
numpy==1.26.4
nvidia-cublas-cu12==12.1.3.1
nvidia-cuda-cupti-cu12==12.1.105
nvidia-cuda-nvrtc-cu12==12.1.105
nvidia-cuda-runtime-cu12==12.1.105
nvidia-cudnn-cu12==8.9.2.26
nvidia-cufft-cu12==11.0.2.54
nvidia-curand-cu12==10.3.2.106
nvidia-cusolver-cu12==11.4.5.107
nvidia-cusparse-cu12==12.1.0.106
nvidia-nccl-cu12==2.19.3
nvidia-nvjitlink-cu12==12.3.101
nvidia-nvtx-cu12==12.1.105
ollama==0.1.9
onnxruntime-gpu==1.17.1
openai==1.12.0
opencv-python==4.9.0.80
openpyxl==3.1.2
packaging==23.2
pandas==2.2.1
pdfminer.six==20221105
pdfplumber==0.10.4
peewee==3.17.1
pillow==10.3.0
protobuf==4.25.3
psutil==5.9.8
pyarrow==15.0.0
pyarrow-hotfix==0.6
pyclipper==1.3.0.post5
pycparser==2.21
pycryptodome
pycryptodome-test-vectors
pycryptodomex
pydantic==2.6.2
pydantic_core==2.16.3
PyJWT==2.8.0
PyMySQL==1.1.1
PyPDF2==3.0.1
pypdfium2==4.27.0
python-dateutil==2.8.2
python-docx==1.1.0
python-dotenv==1.0.1
python-pptx==0.6.23
PyYAML==6.0.1
redis==5.0.3
regex==2023.12.25
requests==2.31.0
ruamel.yaml==0.18.6
ruamel.yaml.clib==0.2.8
safetensors==0.4.2
scikit-learn==1.4.1.post1
scipy==1.12.0
sentence-transformers==2.4.0
shapely==2.0.3
six==1.16.0
sniffio==1.3.1
StrEnum==0.4.15
sympy==1.12
threadpoolctl==3.3.0
tika==2.6.0
tiktoken==0.6.0
tokenizers==0.15.2
torch==2.2.1
tqdm==4.66.2
transformers==4.38.1
triton==2.2.0
typing_extensions==4.10.0
tzdata==2024.1
urllib3==2.2.1
Werkzeug==3.0.3
xgboost==2.0.3
XlsxWriter==3.2.0
xpinyin==0.7.6
xxhash==3.4.1
yarl==1.9.4
zhipuai==2.0.1
BCEmbedding
loguru==0.7.2
umap-learn
fasttext==0.9.2
volcengine==1.0.141
readability-lxml==0.8.1
html_text==0.6.2
selenium==4.21.0
webdriver-manager==4.0.1
cn2an==0.5.22
roman-numbers==1.0.2
word2number==1.1
markdown==3.6
mistralai==0.4.2
boto3==1.34.140
duckduckgo_search==6.1.9
google-generativeai==0.7.2
groq==0.9.0
pip3 install -r requirements.txt

注意:如果遇到依赖冲突,可能需要手动解决,如调整包版本或卸载冲突的包。
这里使用ragflow中原来的requirements.txt文件,总共要安装151个依赖,由于我安装的python3版本 = 3.12.4,在安装到Aspose.Slides == 24.2.0 时,会报错,这个依赖的版本支持 python3 >= 3.5,< 3.11,所以安装不成功
解决方法:
将Aspose.Slides == 24.2.0后面的版本修改为 Aspose.Slides==24.6.0 即可。
在这里插入图片描述

  • 全部装完,花了两个多小时,平均速度500K左右吧

在这里插入图片描述

  • 如果cuda > 12.0,需额外执行以下命令:(这个依赖目前用到的版本是12.1.105,所以需要执行这部分命令)
$ pip uninstall -y onnxruntime-gpu
$ pip install onnxruntime-gpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/
4.1.3.4 拷贝入口脚本并配置环境变量
$ cp docker/entrypoint.sh .
$ vi entrypoint.sh

使用以下命令获取python路径及ragflow项目路径

$ which python
$ pwd

将上述which python的输出作为PY的值,将pwd的输出作为PYTHONPATH的值。
LD_LIBRARY_PATH如果环境已经配置好,可以注释掉。

# 此处配置需要按照实际情况调整,两个export为新增配置
PY=${PY}
export PYTHONPATH=${PYTHONPATH}

# 可选:添加Hugging Face镜像
export HF_ENDPOINT=https://hf-mirror.com
4.1.3.5 启动服务
  • 启动基础服务
$ cd docker
$ docker compose -f docker-compose-base.yml up -d
  • 检查配置文件 确保docker/.env中的配置与conf/service_conf.yaml中配置一致, service_conf.yaml中相关服务的IP地址与端口应该改成本机IP地址及容器映射出来的端口。
  • 启动服务
$ chmod +x ./entrypoint.sh
$ bash ./entrypoint.sh
  • 启动WebUI服务
$ cd web
$ npm install --registry=https://registry.npmmirror.com --force
$ vim .umirc.ts
# 修改proxy.target为http://127.0.0.1:9380
$ npm run dev
  • 部署WebUI服务
$ cd web
$ npm install --registry=https://registry.npmmirror.com --force
$ umi build
$ mkdir -p /ragflow/web
$ cp -r dist /ragflow/web
$ apt install nginx -y
$ cp ../docker/nginx/proxy.conf /etc/nginx
$ cp ../docker/nginx/nginx.conf /etc/nginx
$ cp ../docker/nginx/ragflow.conf /etc/nginx/conf.d
$ systemctl start nginx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/799713.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

隧道调频广播信号覆盖系统改造-泄漏电缆隧道全线无盲区调频覆盖解决方法探究

隧道调频广播信号覆盖系统改造-泄漏电缆隧道全线无盲区调频覆盖解决方法探究 由北京海特伟业科技有限公司任洪卓发布于2024年7月15日 随着城市交通的不断发展&#xff0c;隧道作为城市交通的重要组成部分&#xff0c;承担着日益增长的交通压力。为了确保行驶在隧道中的车辆能够…

AV1 编码标准中帧内预测技术概述

AV1 编码标准帧内预测 AV1&#xff08;AOMedia Video 1&#xff09;是一种开源的视频编码格式&#xff0c;旨在提供比现有标准更高的压缩效率和更好的视频质量。在帧内预测方面&#xff0c;AV1相较于其前身VP9和其他编解码标准&#xff0c;如H.264/AVC和H.265/HEVC&#xff0c;…

【分布式系统】CephFS文件系统之MDS接口详解

目录 一.服务端操作 1.在管理节点创建 mds 服务 2.查看各个节点的 mds 服务&#xff08;可选&#xff09; 3.创建存储池&#xff0c;启用 ceph 文件系统 4.查看mds状态&#xff0c;一个up&#xff0c;其余两个待命&#xff0c;目前的工作的是node01上的mds服务 5.创建用户…

做印尼TikTok直播会遇到什么困难?

TikTok直播已成为当下社交娱乐的重要组成部分&#xff0c;越来越多的直播达人在这个平台上崭露头角。特别是海外直播&#xff0c;受到了广大网友的热烈追捧。那么&#xff0c;在进行印尼TikTok直播会遇到哪些困难&#xff1f;这些困难是否可以通过TikTok直播专线来解决呢&#…

DBA 数据库管理 表管理 数据批量处理。表头约束

表管理 建库 库名命名规则&#xff1a;仅可以使用数字、字母、下划线、不能纯数字 不可使用MySQL命令或特殊字符 库名区分字母大小写 加if not exists 命令避免重名报错 create database if not exists gamedb; 建表 drop database if exists gamedb ; 删表…

高频面试题基本总结回顾4(含笔试高频算法整理)

目录 一、基本面试流程回顾 二、基本高频算法题展示 三、基本面试题总结回顾 &#xff08;一&#xff09;Java高频面试题整理 &#xff08;二&#xff09;JVM相关面试问题整理 &#xff08;三&#xff09;MySQL相关面试问题整理 &#xff08;四&#xff09;Redis相关面试…

【通信协议-RTCM】MSM语句(1) - 多信号GNSS观测数据消息格式

注释&#xff1a; RTCM响应消息1020为GLONASS星历信息&#xff0c;暂不介绍&#xff0c;前公司暂未研发RTCM消息类型版本的DR/RTK模块&#xff0c;DR/RTK模块仅NMEA消息类型使用 注释&#xff1a; 公司使用的多信号语句类型为MSM4&MSM7&#xff0c;也应该是运用最广泛的语句…

JMeter CSV 参数文件的使用教程

在 JMeter 测试过程中&#xff0c;合理地使用参数化技术是提高测试逼真度的关键步骤。本文将介绍如何通过 CSV 文件实现 JMeter 中的参数化。 设定 CSV 文件 首先&#xff0c;构建一个包含需要参数化数据的 CSV 文件。打开任何文本编辑器&#xff0c;输入希望模拟的用户数据&…

internet download manager(IDM下载器) 6.42.8.2下载安装使用指南

internet download manager(IDM下载器) 6.42.8.2Z是一款功能强大的下载加速工具&#xff0c;能够显著提升您的下载速度&#xff0c;最高可达500%。它不仅能够加速下载&#xff0c;还能对下载任务进行智能调度&#xff0c;并具备恢复中断下载的能力。根据用户评价&#xff0c;无…

Dify中的工具

Dify中的工具分为内置工具&#xff08;硬编码&#xff09;和第三方工具&#xff08;OpenAPI Swagger/ChatGPT Plugin&#xff09;。工具可被Workflow&#xff08;工作流&#xff09;和Agent使用&#xff0c;当然Workflow也可被发布为工具&#xff0c;这样Workflow&#xff08;工…

git批量删除本地包含某字符串的特定分支

git批量删除本地包含某字符串的特定分支 git branch -a | grep 分支中包含的字符串 | xargs git branch -D git删除本地分支_git查看删除本地分支-CSDN博客文章浏览阅读989次。git branch -d <分支名>可以通过: git branch 查看所有本地分支及其名字&#xff0c;然后删…

PHP中的函数与调用:深入解析与应用

目录 一、函数基础 1.1 函数的概念 1.2 函数的定义 1.3 函数的调用 二、PHP函数的分类 2.1 内置函数 2.2 用户自定义函数 2.3 匿名函数 2.4 递归函数 2.5 回调函数 2.6 魔术方法 三、函数的参数与返回值 3.1 参数传递 3.2 返回值 四、函数的高级特性 4.1 可变函…

搭建调用链监控Zipkin和Sleuth

项目环境: win7、jdk8 1、添加依赖&#xff0c;添加了spring-cloud-starter-zipkin会自动导入Sleuth <!--Sleuth&#xff0c;zipkin--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</…

路径规划 | 基于蚁群算法的三维无人机航迹规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 基于蚁群算法的三维无人机航迹规划&#xff08;Matlab&#xff09;。 蚁群算法&#xff08;Ant Colony Optimization&#xff0c;ACO&#xff09;是一种模拟蚂蚁觅食行为的启发式算法。该算法通过模拟蚂蚁在寻找食物时…

记录一次渗透实战

收集目标域名信息 用到的知识&#xff1a;16-5 信息收集 - 域名-CSDN博客 目标域名为&#xff1a;h****e.cc 使用一些在线网站可以查询目标域名信息如&#xff1a;站长工具-百度权重排名查询-站长seo查询 - 爱站网 收集子域名 这里使用在线工具进行爆破&#xff1a;http:/…

MySQL学习记录 —— 이십일 MySQL服务器配置与管理(1)

文章目录 1、配置和默认值2、系统变量和选项1、介绍2、常用选项3、使用系统变量 3、常用服务器配置4、查看状态变量5、MySQL数据目录 mysql的服务端就是mysqld&#xff0c;d就是daemon&#xff0c;守护进程的意思。 配置文件中[mysqld]部分时服务器支持的启动选项。服务器的部…

MySQl高级篇 -索引优化篇

索引 InnoDB采用了一个B数来存储索引&#xff0c;使得在千万级数据量的一个情况下&#xff0c;树的高度可以控制在3层以内&#xff0c;而层高代表磁盘IO的一个次数&#xff0c;因此基于索引查找可以减少磁盘IO的次数 MySQL的索引是在存储引擎层实现的&#xff0c;不同的存储引…

浅聊授权-spring security和oauth2

文章目录 前言自定义授权spring security授权oauth2授权概述 前言 通常说到授权&#xff0c;就会想到登录授权、token令牌、JWT等概念&#xff0c;授权。顾名思义就是服务器授予了客户端访问资源的权益&#xff0c;那么要实现授权有几种方案呢&#xff0c;三种授权方式在公司项…

【java】力扣 买卖股票的最佳时机II

文章目录 题目链接题目描述思路代码 题目链接 122.买卖股票的最佳时机II 题目描述 思路 这道题和121.买卖股票的最佳时机 有所不同&#xff0c;不同点在于&#xff0c;这道题的股票可以多次买卖(但是要在买之前先卖掉) 详细思路请看链接的文章【java】力扣 买卖股票的最佳时…