RAGFlow源码安装操作过程

news2025/7/17 21:01:46

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=true

source /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 ]]; then
  WS=1
fi

function task_exe(){
    while [ 1 -eq 1 ];do
      $PY rag/svr/task_executor.py $1;
    done
}

for ((i=0;i<WS;i++))
do
  task_exe  $i &
done

while [ 1 -eq 1 ];do
    $PY api/ragflow_server.py
done

wait;

这个脚本用于并行执行多个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

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

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

相关文章

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; 箱体的上下边界分别表示第一四分位…

解释一下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. 用户从当前路径…

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…

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脚本的首选语言。本文将系统梳理通…

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

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

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的能力往往成为决定体验上限的核心因素。随着游戏分…

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…