简介
RagFlow 是由 InfiniFlow 开源的一款软件,在 AI 知识库构建、智能体编排等场景中深受开发者喜爱。

RagFlow 有开源版和商业版。如需在本地快速体验功能,可根据官方提供的 docker compose 脚本快速启动。若需进行二次开发,使用源码启动是开发人员需要掌握的技能。
源码环境搭建
RagFlow 的运行需要 Linux 系统。考虑到许多开发者使用的是 Windows 系统,可以在 Windows 中通过安装 WSL 的方式来运行它。
WSL 安装
重启电脑,打开 PowerShell,在 WSL 中安装 Ubuntu:
wsl.exe --install ubuntu
安装完成后,电脑中会出现一个 Linux 图标,通过它可以直接访问 WSL 的 Ubuntu 系统目录。
源码与依赖安装
在 WSL 中切换到用户目录,克隆代码(推荐在 WSL 系统中克隆):
cd ~
git clone https://github.com/infiniflow/ragflow.git
目前的 RagFlow 提交非常活跃,为了稳定性,建议使用最新稳定版本:
git checkout v0.22.1
如果由于网络无法克隆 GitHub 代码,可以尝试配置系统代理:
export https_proxy=http://192.168.1.66:7078; export http_proxy=http://192.168.1.66:7078; export all_proxy=socks5://192.168.1.66:7078
推荐使用 PyCharm 进行开发。点击 文件 中的 远程开发,选择 WSL 实例中的 Ubuntu,并指定刚刚克隆的项目路径。
输入以下命令安装 pipx:
sudo apt update
sudo apt install -y pipx
pipx ensurepath
source ~/.bashrc
pipx --version
再安装 uv 和 pre-commit:
pipx install uv pre-commit
安装编译所需的依赖库:
sudo apt install -y libicu-dev pkg-config build-essential python3.12-dev
uv 安装好后,使用 uv 命令安装项目所需依赖:
uv sync --python 3.12
依赖组件启动
RagFlow 不生产模型,它只是模型的搬运工,且运行还需要外部数据库和中间件:MySQL、ES、Redis、MinIO。
可以使用 RagFlow 提供的 docker compose 脚本一键启动:
docker compose -f docker/docker-compose-base.yml up -d
为不和 RagFlow 在同一台机器上,可在其他机器启动上述组件。占用的端口及描述如下:
- 1200(映射的 9200):ElasticSearch,数据检索、向量存储
- 9000, 9001:MinIO,文件存储
- 5455(映射的 3306):MySQL,关系型数据库
- 6379:Valkey(Redis),内存 KV 数据库
部署节点 IP 假设为 192.168.140.110,需要在 WSL 系统中将对应服务的域名映射修改为该 IP(在 RagFlow 的 docker/.env 文件中均有体现):
sudo vi /etc/hosts
# 添加以下内容
192.168.140.110 es01 mysql minio redis
源码运行 (后端)
RagFlow 需要运行的程序有以下 3 个:
- ragflow/api/ragflow_server.py,后端 API 接口,Python 运行
- ragflow/rag/svr/task_executor.py,后端 Task 任务消费者,Python 运行
- ragflow/web,前端 Web 界面,使用 NPM 运行
后端程序可以参考 docker/launch_backend_service.sh 脚本启动。为了后期开发过程中更方便调试,建议单独运行每个后端程序。
在 PyCharm 中运行 Python 项目需要有一个 Python 解释器,选择 ragflow/.venv 下的 Python 程序。
打开 Python 程序的运行配置框,手动填入所需的环境变量信息 (ragflow/docker/.env)。
需要注意的是,PyCharm 无法直接读取 ragflow/docker/.env 中的内容,为此可以单独写一个文件代替,如 .env_pycharm 文件,内容为:
DOC_ENGINE=elasticsearch
NLTK_DATA="./nltk_data"
确保 Working directory 为代码根目录,.env 文件为我们新创建的 .env_pycharm 文件,之后点击运行。
提示 9380 端口监听成功,就代表 ragflow_server.py 程序启动成功了。
Curl 测试:
curl http://127.0.0.1:9380/
有 JSON 信息返回,代表测试成功。
ragflow_server.py 在任务提交时,会将所需要执行的任务写入到 Redis 中,之后再由 task_executor.py 异步拉取待处理的任务并执行。 task_executor.py 的启动方式与 ragflow_server.py 一样。
RagFlow 的 ragflow_server.py 和 task_executor.py 这两个启动程序均会读取配置文件 ragflow/conf/service_conf.yaml,这里面会配置 RagFlow 所需要连接的中间件。
源码运行 (前端)
切换到 ragflow 源码的 web 目录,依次运行以下命令安装前端项目所需依赖:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 20
nvm use 20
node -v
npm install
执行 npm run dev 启动 Web 项目:
export NODE_OPTIONS="--max-old-space-size=4096"
npm run dev
执行完后,会有输出日志。到这里,就可以在浏览器中访问 RagFlow:http://localhost:9222
文档解析与检索
如果仅想在本地运行 RagFlow,只需要切换到 RagFlow 的 docker 目录,使用 docker compose 启动整个服务就可以了:
cd docker
docker compose -f docker-compose.yml up -d
之后输入对应的 IP 访问。注册登录一个账号后,配置好默认的基础模型。
有了大模型的配置后,就可以体验 RagFlow 中的常用功能了。这里以 RAG 场景中常见的文档搜索为例。
DeepDoc 解析
在 RagFlow 中默认的文档解析器为 DeepDoc,是 RagFlow 自研的解析器。同时,RagFlow 在启动时,也会自动加载 DeepDoc 相关的模型到系统中。
此处以 Transformer 架构论文《Attention Is All You Need》为例,试一下用 RagFlow 如何检索这篇 PDF 文档。
首先,创建一个 Dataset,并在其中上传 PDF 论文到其中,并点击解析按钮进行解析。
待解析完成后,再次点击文件,会弹出解析后的切片结果。点击某一个切片 (Chunk),RagFlow 也允许对内容进行二次编辑,左边的原文黄色高亮部分也会体现出所对应的解析原文。
当 RagFlow 完成文档的解析切片后,便可以对它进行检索。RagFlow 中提供了多种方式可以让我们对文档搜索,可以直接用的有以下两种方式:
- Chat(LLM 对话方式)
- Search(AI 检索)
分别发起一个问题:什么是 Transformer?
RagFlow 的 chat 则会根据 Transformer 的文档切片内容进行 LLM 汇总概括。点击每一个【小感叹号】也会弹出对应的文档片段引用。
再试下将同样的问题发给 RagFlow 中的 Search 看一下效果。
这部分则更像是文档搜索,它会列出对应的文档,以及搜索出来的 top 文档片段。
MinerU 解析 (API 方式接口)
上面使用 DeepDoc 对文档处理时,对于某些公式提取的还不够完美。这时,可以将 RagFlow 自带 DeepDoc 替换为 MinerU。
编译 MinerU 镜像。以 Docker 方式部署它,有 GPU 更佳。
wget https://gcore.jsdelivr.net/gh/opendatalab/[email protected]/docker/china/Dockerfile
docker build -t mineru:latest -f Dockerfile .
启动 MinerU:
docker run -d --name mineru \
--shm-size 32g \
-p 8000:8000 \
mineru:latest \
mineru-api --host 0.0.0.0 --port 8000
集成到 MinerU 中。确保 MinerU 的 HTTP 接口没问题后,接入 RagFlow 也很简单,仅在 ragflow/docker 的 .env 环境变量中加入一行配置:
MINERU_APISERVER=http://192.168.31.174:8000
也就是将上面部署的 MinerU 的 API 地址,再重启 RagFlow 的 docker compose,使其容器内的环境变量生效,就可以使用 MinerU 来解析文档了。
更多关于 MinerU 接入 RagFlow 的详细配置,可参考官方文档。

