RAGFlow

官网:RAGFlow | RAGFlow

GitHub:GitHub - infiniflow/ragflow: RAGFlow is an open-source RAG (Retrieval-Augmented Generation) engine based on deep document understanding.

记得最初知道RAGFlow并在本地部署成功时用的版本是0.2.0,今天再看已经是0.14.1了。一直都使用非 docker 部署方式,这家伙的依赖项真够多的……

前期准备

这次是在自己电脑的虚拟机上部署的,系统是Ubuntu 24.04.1 LTS。因为新创建的虚拟机并且是最小化安装,所以让RAGFlow跑起来需要安装的东西有点多。下面一一道来:

Python 套件

系统安装之后已经自带了Python,所以只需安装一下 pip、venv 和 新版 ragflow 需要的 Poetry。可以参考:Python - xiaodu114.github.io

Node.js

Ubuntu 下如何安装 Node.js 您可以参考:Ubuntu - xiaodu114.github.io

MySQL

Ubuntu 下如何安装 MySQL 您可以参考:MySQL - xiaodu114.github.io

sudo systemctl status mysql
sudo systemctl start mysql
            

Redis

Ubuntu 下如何安装 Redis 您可以参考:Redis - xiaodu114.github.io

sudo systemctl status redis-server
sudo systemctl start redis-server
            

Infinity

Ubuntu 下如何安装 Infinity 您可以参考:Infinity - xiaodu114.github.io

sudo systemctl status infinity
sudo systemctl start infinity
            

Elasticsearch

Ubuntu 下如何安装 Elasticsearch 您可以参考:ELK Stack - xiaodu114.github.io

sudo systemctl status elasticsearch
sudo systemctl start elasticsearch
            

MinIO

不知道是不是没有找对啊,还是怎么滴,感觉这玩意儿就是个奇葩。RAGFlow,之前至少部署过三次了,分别是:0.2、0.6、0.8。现在按照之前下载并安装MinIO的方式失败了,真是无语啊!也不能怪人家,只怪自己的英文不好,没有认真看人家的官网……推测现在是拆分了,分社区版和企业版。不知道之前是不是就一个版本,没有截图啊!

官网:MinIO | S3 Compatible Storage for AI

GitHub:GitHub - minio/minio: MinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license.

开源版本下载地址:MinIO | Code and downloads to create high performance object storage

踩坑记

从这里入坑:MinIO | Code and downloads to create high performance object storage

找到 deb 安装方式,下载并安装:

wget https://dl.min.io/aistor/minio/release/linux-amd64/minio_20241204030119.0.0_amd64.deb
dpkg -i minio_20241204030119.0.0_amd64.deb
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password minio server /mnt/data --console-address ":9001"
                

启动即报错:FATAL Unable to validate license, terminating process...: license: no license found

查了一下,这应该是企业版,不是给咱用的,咱还是乖乖的用社区版吧!先慢着,咱还得把他送走啊,请神容易,送神难:

sudo systemctl stop minio
sudo systemctl disable minio
sudo apt remove --purge minio
sudo apt purge minio
sudo rm -rf /var/minio /usr/local/bin/minio /etc/systemd/system/minio.service
sudo apt autoremove
sudo apt autoclean
                

经过上面的踩坑,在这里看到了希望:MinIO快速入门 - 集君 - 博客园。这里提供了一个下载地址:https://dl.min.io/server/minio/release/linux-amd64/minio,下载之后不用安装,给他添加可执行权限即可,之后扔到PATH,就可以在任意路径的终端浪了:

#   添加可执行权限
sudo chmod +x minio
#   移动到系统路径
sudo mv minio /usr/local/sbin
#   查看帮助
minio -h
#   启动
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=xxxxxx minio server /home/u1/.minio/data001 --console-address ":9001"
            

上面的这种方式没有任何问题。RAGFlow全部跑起来,开始写这篇笔记的时候,又去官网溜达一下,才真正找到了组织:MinIO | Code and downloads to create high performance object storage。猜测在这里下载的 deb 文件,应该没有问题了……

NLTK Data

下载地址:NLTK Data

后面运行RAGFlow的时候会报错,提示依赖NLTK Data相关数据,这里先提前准备好

错误提示
LookupError: 
**********************************************************************
    Resource punkt_tab not found.
    Please use the NLTK Downloader to obtain the resource:

    >>> import nltk
    >>> nltk.download('punkt_tab')
    
    For more information see: https://www.nltk.org/data.html

    Attempted to load tokenizers/punkt_tab/english/

    Searched in:
    - '/home/u1/nltk_data'
    - '/home/u1/1-code/ragflow-0.14.1/.venv/nltk_data'
    - '/home/u1/1-code/ragflow-0.14.1/.venv/share/nltk_data'
    - '/home/u1/1-code/ragflow-0.14.1/.venv/lib/nltk_data'
    - '/usr/share/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/lib/nltk_data'
    - '/usr/local/lib/nltk_data'
**********************************************************************
                
**********************************************************************
Resource wordnet not found.
Please use the NLTK Downloader to obtain the resource:

>>> import nltk
>>> nltk.download('wordnet')

For more information see: https://www.nltk.org/data.html

Attempted to load corpora/wordnet

Searched in:
    - '/home/u1/nltk_data'
    - '/home/u1/1-code/ragflow-0.14.1/.venv/nltk_data'
    - '/home/u1/1-code/ragflow-0.14.1/.venv/share/nltk_data'
    - '/home/u1/1-code/ragflow-0.14.1/.venv/lib/nltk_data'
    - '/usr/share/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/lib/nltk_data'
    - '/usr/local/lib/nltk_data'
**********************************************************************
                

之前遇到的,再加上现在提示的,全部给安排上,全部弄个到这里:/home/u1/nltk_data。这玩意儿有点让人郁闷,还不能直接解压到nltk_data文件夹下,还需要一个父文件夹,例如:corporatokenizers

wordnet:/home/u1/nltk_data/corpora/wordnet
cmudict:/home/u1/nltk_data/corpora/cmudict
punkt:/home/u1/nltk_data/tokenizers/punkt
punkt_tab:/home/u1/nltk_data/tokenizers/punkt_tab
averaged_perceptron_tagger:/home/u1/nltk_data/taggers/averaged_perceptron_tagger
            

NLTK Data 下载地址

NLTK Data 目录结构

模型

之前难道是没有设置export HF_ENDPOINT=https://hf-mirror.com,一些模型都是提示报错了,找不到对饮的模型,之后自己下载的,并且根据错误提示放到对应的路径下。这次设置了镜像之后,启动过程成自己下载一些,可以看到下载进度,但是没有截图。不管怎么说,还是记录一下吧

pkg-config / icu-config

使用poetry安装依赖的时候,提示如下的错误:

Please install pkg-config on your system or set the ICU_VERSION environment variable to the version of ICU you have installed.
(running 'icu-config --version')
(running 'pkg-config --modversion icu-i18n')
            

这个不是事儿,只要apt能解决的事儿都不是事儿。sudo apt install pkg-config libicu-dev

RAGFlow 正式上场

ragflow/README_zh.md at main · infiniflow/ragflow · GitHub这里对以源代码启动服务说的和详细了。排除docker的部分,上面已经单独弄好了。

后端服务

也正是因为没有使用docker,所以conf/service_conf.yaml这个配置文件需要修改一下,如下:

ragflow:
  host: 0.0.0.0
  http_port: 9380
mysql:
  name: 'rag_flow'
  user: 'admin'
  password: 'admin666'
  host: '127.0.0.1'
  port: 3306
  max_connections: 100
  stale_timeout: 30
minio:
  user: 'admin'
  password: 'admin666'
  host: '127.0.0.1:9000'
es:
  hosts: 'http://127.0.0.1:9200'
  username: 'elastic'
  password: 'N9WOSrp--NAAOEcLtnf*'
infinity:
  uri: '127.0.0.1:23817'
  db_name: 'default_db'
redis:
  db: 1
  password:  
  host: '127.0.0.1:6379'

# 后面是屏蔽的内容就不要了
            

这里启动的命名和官网稍有不同,但是大差不差

#   设置镜像源
poetry source add --priority=primary mirrors https://pypi.tuna.tsinghua.edu.cn/simple/
#   安装依赖
poetry install --sync --no-root
#
poetry lock --no-update

#   把环境变量 HF_ENDPOINT 设成相应的镜像站点
export HF_ENDPOINT=https://hf-mirror.com

#   激活虚拟环境
source .venv/bin/activate
#   设置环境变量
export PYTHONPATH=$(pwd)
#   给与脚本执行权限
sudo chmod +x docker/launch_backend_service.sh
#   启动服务
docker/launch_backend_service.sh
            

RAGFlow 服务启动 截图1

RAGFlow 服务启动 截图2

前端服务

前端相对简单一些

cd web
npm i --force
npm run build
npm run dev 
            

RAGFlow 前端服务 安装依赖

RAGFlow 前端服务 run build 构建

RAGFlow 前端服务 启动服务

隆重介绍一下,下面是登录成功之后的截图:

RAGFlow 登录成功之后的截图

这就成功了?你高兴的太早了,果然还是除了问题,解析文档时报错如下:

RAGFlow 上传文件之后 解析时报错,no module named FlagEmbedding

如上图的提示,没有找到FlagEmbedding模块,利用poetry show来查看所有的依赖时确实没有找到FlagEmbedding。说先想到的是poetry add FlagEmbedding,但是没起作用(推测,应该是我弄错了)。最后是在pyproject.toml文件的[tool.poetry.dependencies]下添加flagembedding = "1.2.10",并且删除了poetry.lock文件,之后重新安装就可以了。其中pyproject.toml文件中已经包含了flagembedding = "1.2.10",只是在[tool.poetry.group.full.dependencies]下面。

RAGFlow 解析文档成功