【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.mzph.cn/bicheng/46631.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

平价养猫最值得入的主食冻干,希喂生骨肉冻干喂养测评

不少猫主人反映&#xff0c;自家的猫咪体型偏瘦&#xff0c;体质较弱&#xff0c;尤其是在季节变换时更易出现问题&#xff0c;如敏感、掉毛严重、食欲下降等。听说生骨肉冻干富含营养且易于吸收&#xff0c;能显著改善猫咪体质&#xff0c;便纷纷尝试。然而&#xff0c;未加甄…

如何优雅的处理字节类型数据

原文:赵侠客 前言 字节&#xff08;Byte&#xff09;是计算机信息技术用于计量存储容量的一种基本单位&#xff0c;通常简写为B,1Byte8bit,在ASCII编码中1Byte可以表示一个标准的英文字符&#xff0c;包括大写字母、小写字母、数字、标点符号和控制字符等&#xff0c;共128个不…

nginx前端部署配置

nginx前端部署配置 Nginx部署项目 1、yarn build打包Vue项目 2、打开nginx.conf文件,配置对应的信息 nginx.conf location / {root C:\Users\17542\Desktop\rrpject-v2\dist;root index.html index.htm;try_files $uri $uri/ router; //解决页面刷新404问题 } location…

艾迈斯欧司朗最新推出的DURIS® LED将引领柔性多变照明新时代

中国 上海&#xff0c;2024年7月15日——全球领先的光学解决方案供应商艾迈斯欧司朗&#xff08;瑞士证券交易所股票代码&#xff1a;AMS&#xff09;今日宣布&#xff0c;艾迈斯欧司朗最新推出的DURIS E 2835 LED&#xff0c;实现从封装工艺到出光性能的升级与创新。这款LED采…

PyQt5图形界面--基础笔记

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QToolTip, QLabel, QLineEdit from PyQt5.QtGui import QIcon, QFont, QPixmap import sys https://www.bitbug.net/ 将图片转换为ico格式, 用来更改打包的文件图标 -F 只产生exe文件, 其他临时文件不产生 -…

K8S系列-Kubernetes基本概念及Pod、Deployment、Service的使用

一、Kubernetes 的基本概念和术语 一、资源对象 ​ Kubernetes 的基本概念和术语大多是围绕资源对象 Resource Object 来说的&#xff0c;而资源对象在总体上可分为以下两类: 1、某种资源的对象 ​ 例如节点 Node) Pod 服务 (Service) 、存储卷 (Volume&#xff09;。 2、…

408数据结构-图的应用3-有向无环图、拓扑排序 自学知识点整理

前置知识&#xff1a;表达式&#xff0c;图的遍历 有向无环图描述表达式 有向无环图&#xff1a;若一个有向图中不存在环&#xff0c;则称为有向无环图&#xff0c;简称 D A G DAG DAG图 。 &#xff08;图片来自王道考研408数据结构2025&#xff09; 由王道考研-咸鱼学长的讲…

emqx(v5.0)常见问题

emqx&#xff08;v5.0&#xff09;常见问题 1 官方常见问题解答2 EMQX 启动时日志提示 “WARNING: Default (insecure) Erlang cookie is in use.” 应该怎么办&#xff1f;3 EMQX 启动时日志提示“filed to merge schema”&#xff1f; 1 官方常见问题解答 常见问题解答 2 E…

前端框架学习之 搭建vue2的环境 书写案例并分析

目录 搭建vue的环境 Hello小案例 分析案例 搭建vue的环境 官方指南假设你已经了解关于HTML CSS 和JavaScript的中级知识 如果你刚开始学习前端开发 将框架作为你的第一步可能不是最好的主意 掌握好基础知识再来吧 之前有其他框架的使用经验会有帮助 但这不是必需的 最…

JDK垃圾回收机制和垃圾回收算法

查看java相关信息 java -XX:PrintCommandLineFlags -version UseParallelGC 即 Parallel Scavenge Parallel Old,再查看详细信息 内存分配策略 1. 对象优先在 Eden 分配 大多数情况下&#xff0c;对象在新生代 Eden 区分配&#xff0c;当 Eden 区空间不够时&#xff0c;发…

PX4 UM982 配合F9P Base 进行 RTK 定位

UM982是新兴的常见双天线GPS模块&#xff0c;支持双天线定向&#xff0c;RTK功能&#xff0c;PX4也引入了对其的支持&#xff0c;需要按需额外设置 官方手册号称直接用F9P做地面站&#xff0c;搭配QGC使用就能进行RTK定位 但是经过实践&#xff0c;发现这样是进不了RTK模式的…

Docker---最详细的服务部署案例

提供python服务的docker一键部署&#xff0c;示例已配置负载均衡&#xff0c;不需要的在nginx.conf和docker-compose注释相关代码即可 文件结构 1、dockerfile # 服务的dockerfile# 服务依赖的镜像 FROM python:3.7# 设置容器内服务的工作目录 WORKDIR /app# 复制当前文件夹所…

基于Rspack实现大仓应用构建提效实践|得物技术

一、实践背景 随着项目的逐步迭代&#xff0c;代码量和依赖的逐渐增长&#xff0c;应用的构建速度逐步进入缓慢期。以目前所在团队的业务应用来看&#xff08;使用webpack构建&#xff09;&#xff0c;应用整体构建耗时已经普遍偏高&#xff0c;影响日常开发测试的使用效率&am…

护网--2

实验要求&#xff1a; 1、办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 2、分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的http服务器 3、多出口环境基于带宽比例进行选路&#xff0c;但是&#xff0c;…

实现keepalive+Haproxyde 的高可用

需要准备五台实验机 一台客户机&#xff1a;test1 两台&#xff1a;一主一备的实验机&#xff1a;test2 test3 两台真实服务器&#xff1a;nginx1 nginx2 实验 首先在两台实验机上安装Haproxy 安装依赖环境&#xff0c;并将Haproxy的包进行解压处理 yum install -y pcre…

nodejs安装部署运行vue前端项目

文章目录 1.安装nodejs2.安装Vue CLI1.配置npm镜像源&#xff1a;2.安装Vue CLI&#xff1a;3.创建Vue项目4.启动Vue项目5.Express 1.安装nodejs Node.js 是一个免费、开源、跨平台的 JavaScript 运行时环境&#xff0c;它让开发人员能够创建服务器、Web 应用、命令行工具和脚…

【自动驾驶汽车通讯协议】UART通信详解:理解串行数据传输的基石

文章目录 0. 前言1. 同步通讯与异步通讯1.1 同步通信1.2 异步通信 2. UART的数据格式3. 工作原理3.1 波特率和比特率3.2 UART的关键特性 4. UART在自动驾驶汽车中的典型应用4.1 UART特性4.2应用示例 5. 结语 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自…

xlive.dll丢失怎么办,xlive.dll文件的主要用途

xlive.dll丢失怎么办&#xff1f;目前是有很多方法可以解决这个xlive.dll丢失的问题的&#xff0c;只要你仔细的去了解xlive.dll这个文件&#xff0c;至于使用哪种方法&#xff0c;主要还是看你的实际情况&#xff0c;因为情况不同选择使用的方法也是不一样的&#xff0c;下面一…

底软驱动 | Linux虚拟内存

为了更有效的管理内存并且少出错&#xff0c;现代操作系统提供了一种对主存的抽象概念&#xff0c;叫做虚拟内存(VM)。虚拟内存提供了三个重要的能力: 1.它将主存(物理内存)看成是一个存储在磁盘上的地址空间的高速缓存&#xff0c;在主存中只保留活动区域&#xff0c;并且根据…

openEuler 安装 podman 和 podman compose

在 openEuler 22.03 LTS SP4 中&#xff0c;你可以使用 dnf 包管理器来安装 Podman 和 Podman Compose。openEuler 默认使用 dnf 作为包管理器&#xff0c;所以这是安装软件的首选方式。 关于 openEuler 22.03 LTS SP4 下载地址&#xff1a; https://www.openeuler.org/zh/dow…