当前位置: 首页 > article >正文

RAGFlow源码安装操作过程

RAGFlow是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎,可作为Dify的外部知识库使用[1]。本文主要介绍RAGFlow前端和后端等源码安装操作过程。

一.后端安装

特别注意:python = ">=3.12,<3.13"

1.安装Poetry

curl -sSL https://install.python-poetry.org | python3 -

2.下载源码并安装Python依赖

git clone https://github.com/infiniflow/ragflow.git
cd ragflow/
# export POETRY_VIRTUALENVS_CREATE=true POETRY_VIRTUALENVS_IN_PROJECT=truesource /home/duomiagi/.virtualenvs/ragflow/bin/activate
poetry source add --priority=primary mirrors https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/
poetry lock --no-update
poetry install --sync --no-root
/home/duomiagi/.local/bin/poetry install --sync --no-root # install RAGFlow dependent python modules

其中,POETRY_VIRTUALENVS_CREATE=true指示 Poetry 创建虚拟环境。如果设置为 true,Poetry 将为项目创建一个新的虚拟环境;POETRY_VIRTUALENVS_IN_PROJECT=true指示 Poetry 在项目目录中创建虚拟环境。如果设置为 true,虚拟环境将被创建在项目的根目录下,而不是全局的虚拟环境目录。

当需要在Ubuntu系统中执行poetry install等操作时,通过命令source /home/duomiagi/.virtualenvs/ragflow/bin/activate切换为对应的虚拟环境。

特别注意:在WSL2环境下,如果需要后端IDE调试源码,那么最好不要指示 Poetry 在项目目录中创建虚拟环境,因为这样在IDE中(比如,PyCharm)可能无法选择解释器路径。最好方式是使用IDE创建的虚拟环境路径。如下所示:

poetry install --sync --no-root 命令用于安装项目的依赖项。每个选项详细解释,如下所示:

  • --sync:同步项目的依赖项。这意味着它将确保项目的依赖项与 pyproject.toml 文件中定义的依赖项完全匹配。如果有任何不匹配的依赖项,它们将被移除或更新。

  • --no-root:不安装项目本身。这意味着它只会安装项目的依赖项,而不会将项目本身作为一个包安装。

这个命令将确保项目依赖项与 pyproject.toml 文件中的定义完全一致,并且不会将项目本身安装为一个包。

3.通过Docker Compose启动依赖服务

docker compose -f docker/docker-compose-base.yml -p "ragflow" up -d

特别注意:在文件docker/service_conf.yaml中,对照docker/.env的配置将mysql端口更新为5455,es 端口更新为 1200等。简单理解,就是根据需要同步修改,尤其是本地运行后端服务,需要把容器名字替换为IP地址,比如127.0.0.1。

4.设置环境变量HF_ENDPOINT

export HF_ENDPOINT=https://hf-mirror.com

5.启动后端服务

source /home/duomiagi/.virtualenvs/ragflow/bin/activate
export PYTHONPATH=$(pwd)
bash docker/launch_backend_service.sh

6.IDE中调试后端服务

(1)启动后端服务脚本

后端服务启动命令为docker/launch_backend_service.sh,如下所示:

#!/bin/bash# unset http proxy which maybe set by docker daemon
export http_proxy=""; export https_proxy=""; export no_proxy=""; export HTTP_PROXY=""; export HTTPS_PROXY=""; export NO_PROXY=""export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/PY=python3
if [[ -z "$WS" || $WS -lt 1 ]]; thenWS=1
fifunction task_exe(){while [ 1 -eq 1 ];do$PY rag/svr/task_executor.py $1;done
}for ((i=0;i<WS;i++))
dotask_exe  $i &
donewhile [ 1 -eq 1 ];do$PY api/ragflow_server.py
donewait;

这个脚本用于并行执行多个task_executor.py任务,数量由WS变量决定。同时,它保持一个服务器脚本ragflow_server.py不断运行,用于处理RAG(Retrieval-Augmented Generation)相关的API请求。整个脚本通过无限循环确保这些任务和服务器始终运行,直到手动终止。详细解释如下所示:

  • 取消HTTP代理设置:脚本首先通过export命令清空了可能由Docker守护进程设置的HTTP代理环境变量。这样做的目的是确保HTTP代理不会影响后续任务的执行。

  • 设置库路径:脚本将LD_LIBRARY_PATH设置为/usr/lib/x86_64-linux-gnu/,这通常用于指定运行某些动态链接库的位置。

  • 设置Python解释器:通过变量PY指定使用python3来运行Python脚本。

  • 设置并行任务数量:脚本检查环境变量WS,如果WS未设置或小于1,则将其默认设置为1。WS变量表示任务的并行执行数量。

  • 定义task_exe函数

    • 该函数会进入一个无限循环 (while [ 1 -eq 1 ]) 并不断执行指定的Python脚本 rag/svr/task_executor.py,传递一个参数给该脚本(这个参数是任务编号)。

    • 当函数被调用时,它会不断执行任务,直到手动停止。

  • 启动任务执行器

    • 通过for循环,启动WS个并行的任务执行器,每个执行器都会调用task_exe函数,并传入一个递增的数字作为任务编号($i)。

    • 每个任务执行器通过后台运行(&),因此这些任务会并行执行。

  • 运行主程序

    • 在主程序中,同样使用了无限循环 (while [ 1 -eq 1 ]) 来不断执行 api/ragflow_server.py 脚本,保证服务器持续运行。
  • 等待所有进程结束

    • wait 命令会阻塞脚本的退出,直到所有后台进程(并行任务执行器和服务器)都终止。

小结:这段Bash脚本功能本质上是执行了ragflow_server.pytask_executor.py,前者是启动HTTP服务器,后者是启动任务执行器。

(2)ragflow_server

(3)task_executor

二.前端安装

1.可能Node.js版本问题

如果遇到问题,如下所示:

error - Your node version 19 is not supported, please upgrade to 14 or above except 15 or 17.

表明Node.js 版本 19 不受支持,请升级到受支持的版本(14、16、18 或最新的 LTS 版本)。

2.Windows上解决步骤

(1)下载并安装 nvm

访问 nvm-windows 的 GitHub 页面,下载最新的 nvm-setup.zip 文件并解压,运行 nvm-setup.exe 进行安装。

(2)安装Node.js 18版本

(3)使用Node.js 18版本

(4)验证Node.js版本

3.运行Web项目

(1)cd ragflow/web && npm install --force

(2)将.umirc.tsproxy.target更新为http://127.0.0.1:9380

(3)npm run dev

RAGFlow登录链接为http://localhost:9222/login,如下所示:

三.可能遇到问题

1.找不到nltk_data相关数据

启动后端服务时,可能会报错,原因是nltk_data相关数据没有找到,解决方案是下载相关数据。如下所示:

下载nltk_data包括’wordnet’、‘punkt’和’punkt_tab’,如下所示:

也可直接全部下载nltk.download(),如下所示:

2.‘CompletionUsage’ object has no attribute ‘get’

解决方案参考文献[11]。

3.安装crawl4ai库

解决方案参考文献[12]。

4.onnx文件找不到

解决方案参考文献[13],放到ragflow\ragflow\rag\res目录下。

参考文献

[1] 外部知识库 API:https://docs.dify.ai/zh-hans/guides/knowledge-base/external-knowledge-api-documentation

[2] https://github.com/infiniflow/ragflow/blob/main/README_zh.md

[3] Latest Miniconda installer links by Python version:https://docs.anaconda.com/miniconda/miniconda-other-installer-links/

[4] https://github.com/coreybutler/nvm-windows/releases

[5] RAGFlow快速开始:https://ragflow.io/docs/dev/

[6] RAGFlow用户指南:https://ragflow.io/docs/dev/category/guides

[7] RAGFlow参考手册:https://ragflow.io/docs/dev/category/references

[8] RAGFlow API参考:https://ragflow.io/docs/dev/references/ragflow_api

[9] GitHub Discussions:https://github.com/orgs/infiniflow/discussions

[10] RAGFlow Roadmap 2024:https://github.com/infiniflow/ragflow/issues/162

[11] https://github.com/infiniflow/ragflow/pull/1736/commits/7c38c8df5b5fe1c7dd303a0bc8f6db44238bf4ad

[12] https://github.com/unclecode/crawl4ai

[13] https://huggingface.co/InfiniFlow/deepdoc/tree/main

[14] RAGFlow源码安装操作过程:https://z0yrmerhgi8.feishu.cn/wiki/LOwWwGwtgiy3lEkRroGcFoBFnCh

相关文章:

RAGFlow源码安装操作过程

RAGFlow是一款基于深度文档理解构建的开源 RAG&#xff08;Retrieval-Augmented Generation&#xff09;引擎&#xff0c;可作为Dify的外部知识库使用[1]。本文主要介绍RAGFlow前端和后端等源码安装操作过程。 一.后端安装 特别注意&#xff1a;python ">3.12,<3…...

Unity使用XCharts动态配置数据——折线图(LineChart)

XCharts官网地址&#xff1a;https://xcharts-team.github.io/ 本地上传资源&#xff1a;https://download.csdn.net/download/m0_64375864/90919669 效果图&#xff1a; 动态配置数据&#xff1a; public class Test3 : MonoBehaviour {public LineChart lineChart;public …...

【HITCSAPP 哈工大计算机系统期末大作业】 程序人生-Hello’s P2P

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算机与电子通信类 学   号 2023112915 班   级 23L0505 学 生 杨昕彦 指 导 教 师 刘宏伟 计算机科学…...

DAY9 热力图和箱线图的绘制

浙大疏锦行 学会了绘制两个图&#xff1a; 热力图&#xff1a;表示每个特征之间的影响&#xff0c;颜色越深数值越大表示这两个特征的关系越紧密 箱线图&#xff1a;表示每个特征的数据分布情况 箱体&#xff08;Box&#xff09;&#xff1a; 箱体的上下边界分别表示第一四分位…...

如何查看 GitLab 内置的 PostgreSQL 版本?

GitLab 依赖 PostgreSQL&#xff0c;PostgreSQL 的升级会随着 GitLab 的版本升级而进行&#xff0c;本文分享查看 GitLab 内置 PostgreSQL 版本的方法。 GitLab 版本和 PostgreSQL 版本需要一一对应&#xff0c;默认情况下使用 Omnibus 方式安装的 GitLab 实例会自动升级 Postg…...

VR 技术与病毒分离鉴定:一场奇妙的邂逅​

过去&#xff0c;病毒分离鉴定主要依靠传统实验技术&#xff0c;虽为病毒学发展奠定基础&#xff0c;但在现代病毒研究中有诸多局限。​ 沉浸式操作&#xff0c;告别风险担忧​ VR 技术给病毒分离鉴定带来的最大变革是大幅提升实验安全性。借助 VR 设备&#xff0c;实验者身处高…...

解释一下NGINX的反向代理和正向代理的区别?

大家好&#xff0c;我是锋哥。今天分享关于【解释一下NGINX的反向代理和正向代理的区别?】面试题。希望对大家有帮助&#xff1b; 解释一下NGINX的反向代理和正向代理的区别? NGINX的反向代理和正向代理的区别主要体现在它们的功能和使用场景上。下面我会详细解释它们的定义…...

数学笔记一:标量、向量和矩阵基本概念辨析

一、标量 标量&#xff08;Scalar&#xff09; 是一种仅用数值大小&#xff08;即 “量值”&#xff09;就能完全描述的物理量或数学对象&#xff0c;它不具有方向属性。 例如在实数领域的正数、负数。 在物理学领域的多少斤、多少公斤、水温多少度、气温多少度都是标量。 …...

vue3获取两个日期之间的所有时间

1.获取两个日期之间所有年月日 如图所示&#xff1a; 代码如下&#xff1a; <template><div class"datePicker"><el-date-pickerv-model"value1"type"daterange"range-separator"至"start-placeholder"开始时间…...

Python 实现简易版的文件管理(结合网络编程)

目录 一、Python 代码实现1. 服务器端2. 客户端 二、结果展示1. 查看当前路径下的内容 ls2. 切换当前路径 cd3. 查看当前路径 pwd4. 显示根目录下的树状结构 tree5. 在当前路径下创建目录 mkdir6. 删除当前路径下的文件或目录 rm7. 复制文件 mv8. 移动文件 cp9. 用户从当前路径…...

元组可以比较大小吗?一次返回多个值?编程语言的元组?声明变量一定需要指定类型吗?

目录 元组可以比较大小吗? 一次返回多个值? 编程语言的元组 支持元组的语言 元组的基本特性 元组的初始化和使用 声明变量一定需要指定类型吗? var类型 元组可以比较大小吗? 不同编程语言对元组的定位稍有差异&#xff0c;是否可以比较大小随语言而定。 Swift支持…...

PXC集群

PXC集群 一、环境介绍二、PXC安装1、关闭默认mysql模块2、安装yum源3、准备pxc安装环境4、安装pxc5、启动mysql&#xff0c;并更改root密码 三、搭建PXC集群1、编辑/etc/my.cnf 配置文件&#xff08;1&#xff09;pxc1节点配置文件&#xff08;2&#xff09;pxc2节点配置文件&a…...

线程安全问题的成因

前言 大家晚上好呀~~ 今天学习了线程不安全问题的成因。线程安全问题是十分重要的知识点&#xff0c;我想把我所学的与大家分享一波&#xff0c;希望可以帮助到有需要的人&#xff0c;同时加深自己对于线程安全问题的理解。 分析过程如下 结语 今天心情还不错~ 要坚持持续…...

零基础远程连接课题组Linux服务器,安装anaconda,配置python环境(换源),在服务器上运行python代码【3/3 适合小白,步骤详细!!!】

远程连接服务器 请查阅之前的博客——零基础远程连接课题组Linux服务器&#xff0c;安装anaconda&#xff0c;配置python环境&#xff08;换源&#xff09;&#xff0c;在服务器上运行python代码【1/3 适合小白&#xff0c;步骤详细&#xff01;&#xff01;&#xff01;】&am…...

字节跳动BAGEL-7B-MoT模型开源:多模态AI技术的新范式与行业涟漪

在人工智能领域&#xff0c;技术开源与商业化落地的平衡始终是核心议题。2025年5月26日&#xff0c;字节跳动发布开源多模态AI模型BAGEL-7B-MoT&#xff0c;凭借其混合架构设计与跨模态处理能力&#xff0c;在图像生成、视觉理解等任务中展现出与GPT-4o等闭源模型抗衡的实力。这…...

Ubuntu静态IP配置信息查看命令

Ubuntu静态IP配置信息查看命令 1. 查看当前IP地址信息 (Address & Netmask) 方法1: 使用ip命令 (推荐) ip addr show # 或简写 ip a方法2: 使用ifconfig命令 ifconfig # 查看特定网卡 ifconfig eth0方法3: 只查看IP地址 hostname -I2. 查看网关信息 (Gateway) 查看默…...

unity实现wasd键控制汽车漫游

1.给汽车模型添加Box Collider和Rigidbody 2.创建脚本CarController并加载到汽车模型上 using UnityEngine; using UnityEngine.UI;public class CarController : MonoBehaviour...

Python优雅执行SSH命令:10种方法+虚拟环境深度实践

引言&#xff1a;为什么选择Python操作SSH&#xff1f; SSH作为网络安全的基石&#xff0c;广泛应用于远程管理、文件传输和自动化任务。Python凭借其丰富的生态&#xff08;如paramiko、fabric&#xff09;和简洁语法&#xff0c;成为编写SSH脚本的首选语言。本文将系统梳理通…...

Linux TCP与Socket与IO多路复用(Epoll)

目录 一、背景 二、交互流程 2.1 数据流动 2.2 对象之间的关系 三、TCP 3.1 为什么需要三次握手 3.2 三次握手流程 3.3 三次握手后的产物 3.4 TCB 四、Socket 4.1 Java Socket和C Socket 4.2 Socket的本质 4.3 Socket和TCB的关系 4.4 通过文件描述符调用Socket的…...

LINUX安装运行jeelowcode后端项目(命令行)

环境准备 运行环境&#xff1a;JDK1.8开发工具&#xff1a; Idea、Maven默认已启动中间件&#xff1a;&#xff08;推荐使用宝塔&#xff09;Mysql8.0、Redis、Minio第一步&#xff1a;下载JeelowCode项目并导入IDEA中 第二步&#xff1a;导入数据库文件到mysql中&#xff0c;…...

嵌入式高级工程师面试全解:从 malloc 到 kernel panic 的系统知识梳理

在嵌入式和操作系统方向的技术面试中&#xff0c;常常会涉及一系列关于内存管理、虚拟化、系统权限、调试工具、外设通信等方面的问题。本文将基于一次真实的高级嵌入式工程师岗位面试问题&#xff0c;整理并详解所有相关技术点&#xff0c;作为一份结构清晰、知识全面的学习资…...

机器学习第二十七讲:Kaggle → 参加机器学习界的奥林匹克

机器学习第二十七讲&#xff1a;Kaggle → 参加机器学习界的奥林匹克 资料取自《零基础学机器学习》。 查看总目录&#xff1a;学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章&#xff1a;DeepSeek R1本地与线上满血版部署&#xff1a;超详细手把手指南 Kaggle详解…...

C++(初阶)(二十)——封装实现set和map

二十&#xff0c;封装实现set和map 二十&#xff0c;封装实现set和map1&#xff0c;参数类型2&#xff0c;比较方式3&#xff0c;迭代器3.1&#xff0c;普通迭代器3.2&#xff0c;const迭代器3.3&#xff0c;set_map的迭代器实现 4&#xff0c;插入和查找5&#xff0c;特别的&a…...

【MySQL】06.内置函数

1. 聚合函数 -- 统计表中的人数 -- 使用 * 做统计&#xff0c;不受 NULL 影响 mysql> select count(*) 人数 from exam_result; -------- | 人数 | -------- | 5 | -------- 1 row in set (0.01 sec)-- 使用表达式做统计 mysql> select count(name) 人数 from ex…...

企业微信内部网页开发流程笔记

背景 基于ai实现企微侧边栏和工作台快速问答小助&#xff0c;需要h5开发&#xff0c;因为流程不清楚摸索半天&#xff0c;所以记录一下 一、网页授权登录 1. 配置步骤 1.1 设置可信域名 登录企业微信管理后台 进入"应用管理" > 选择开发的具体应用 > “网…...

智慧在线判题OJ系统项目总体,包含功能开发思路,内部中间件,已经部分知识点

目录 回顾一下xml文件怎么写 哪个地方使用了哪个技术 MyBatis-Plus-oj的表结构设计&#xff0c; 管理员登录功能 Swagger Apifox​编辑 BCrypt 日志框架引入(slf4jlogback) nacos Swagger无法被所有微服务获取到修改的原因 身份认证三种方式: JWT(Json Web Json,一…...

【MySQL】2-MySQL索引P2-执行计划

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 有很多很多不足的地方&#xff0c;欢迎评论交流&#xff0c;感谢您的阅读和评论&#x1f604;。 目录 EXPLAINexplain output 执行计划输出解释重点typ…...

云电脑显卡性能终极对决:ToDesk云电脑/顺网云/海马云,谁才是4K游戏之王?

一、引言 1.1 云电脑的算力革命 云电脑与传统PC的算力供给差异 传统PC的算力构建依赖用户一次性配置本地硬件&#xff0c;特别是CPU与显卡&#xff08;GPU&#xff09;。而在高性能计算和游戏图形渲染等任务中&#xff0c;GPU的能力往往成为决定体验上限的核心因素。随着游戏分…...

11 接口自动化-框架封装之统一请求封装和接口关联封装

文章目录 一、框架封装1、统一请求封装和路径处理2、接口关联封装 二、简单封装代码实现config.yml - 放入一些配置数据yaml_util.py - 处理 yaml 数据requests_util.py - 将请求封装在同一个方法中test_tag.py - 测试用例执行conftest.py - 会话之前清除数据 一、框架封装 1、…...

influxdb时序数据库

以下概念及操作均来自influxdb2 官方文档 InfluxDB2 is the platform purpose-built to collect, store, process and visualize time series data. Time series data is a sequence of data points indexed in time order. Data points typically consist of successive meas…...