菜单

系统架构

相关源文件

系统架构文档全面概述了 RAGFlow 的技术设计、组件交互和数据流。本页面解释了系统各部分如何协同工作,以提供深入的文档理解和检索增强生成能力。有关单个组件(例如文档处理管道)的具体信息,请参阅文档处理管道

概述

RAGFlow 是一个基于深度文档理解的开源 RAG(检索增强生成)引擎。它为各种规模的企业提供了简化的 RAG 工作流程,结合大型语言模型(LLM)提供真实可靠的问答能力,并有来自各种复杂格式数据源的可靠引用作为支持。

来源:README.md65-68 README.md126-130

高层架构

RAGFlow 采用分层架构,实现了关注点分离,并支持模块化和可扩展性。

来源:README.md126-130 docker/docker-compose-base.yml1-148

关键组件

组件描述实现
Web 用户界面供用户与系统交互的前端界面基于 React 的应用程序,位于 web/ 目录
API 层用于客户端应用程序和用户界面的 HTTP API实现在 api/ragflow_server.py
任务执行器处理文档并生成嵌入实现在 rag/svr/task_executor.py
知识库服务管理知识库和文档组织后端服务的一部分
对话服务处理对话、检索和响应生成后端服务的一部分
画布服务管理代理流以实现可定制的 RAG 管道后端服务的一部分
文档存储存储文档块和向量嵌入使用 Elasticsearch 或 Infinity
对象存储存储原始文件二进制文件使用 MinIO
数据库存储元数据、配置和关系使用 MySQL
缓存提供缓存以提高性能使用 Redis

来源:docker/entrypoint.sh1-140 Dockerfile1-211 README.md126-130

部署架构

RAGFlow 被设计为一组 Docker 容器部署,包含以下组件

来源:docker/docker-compose-base.yml1-148 Dockerfile1-211 README.md229-243

容器角色

  • ragflow-server: 承载 API 层并提供 Web UI
  • 任务执行器 (Task Executors): 处理文档,生成嵌入,并索引内容
  • ragflow-es-01/ragflow-infinity: 用于全文和向量搜索的文档存储
  • ragflow-mysql: 元数据数据库
  • ragflow-minio: 文件对象存储
  • ragflow-redis: 用于性能优化的缓存

系统可配置使用 Elasticsearch 或 Infinity 作为文档存储。

来源:docker/entrypoint.sh96-107 README.md250-273

后端服务

后端服务构成了 RAGFlow 系统的核心,实现业务逻辑和数据处理能力。

API 层 (ragflow_server.py)

API 层是客户端与 RAGFlow 交互的入口。它提供 HTTP 端点用于:

  • 知识库管理
  • 文档管理
  • 聊天/对话管理
  • 代理流管理
  • 用户管理
  • 文件管理

服务器实现可以在 api/ragflow_server.py 中找到。

来源:docker/entrypoint.sh114-119 api/versions.py1-53

文档处理管道(任务执行器)

任务执行器负责处理上传到系统的文档

任务执行器作为独立进程运行,可以水平扩展以处理大量文档处理工作负载。

来源:docker/entrypoint.sh122-136 README.md95-109

知识库服务

知识库服务管理知识库,即相关文档的集合。它处理:

  • 创建和配置知识库
  • 将文档与知识库关联
  • 管理知识库的嵌入模型
  • 配置分块策略

来源:docs/guides/manage_files.md42-51

对话服务

对话服务管理用户与 RAG 系统之间的对话

来源:README.md110-114

LLM 服务

LLM 服务为与各种 LLM 提供商的交互提供统一接口

LLM 服务支持多种模型

模型类型提供者用例
聊天模型OpenAI、Azure OpenAI、Qwen、Anthropic、Groq 等响应生成
嵌入模型OpenAI、FastEmbed、BAAI 等用于检索的向量嵌入
重排序模型Jina、Cohere 等重排序搜索结果
计算机视觉模型Qwen-VL,其他图像理解
文本转语音模型多种文本转语音转换
语音转文本模型多种语音转文本转换

来源:pyproject.toml11-129 README.md195-197

文件服务

文件服务处理文件上传、存储和管理。它使用 MinIO 进行对象存储,并提供:

  • 文件上传/下载功能
  • 文件夹管理
  • 文件预览
  • 将文件链接到知识库

来源:docs/guides/manage_files.md1-86

画布服务(代理流)

画布服务管理代理流的执行,即自定义 RAG 管道

来源:README.md80-86

存储层

存储层由针对不同数据类型的多个专用系统组成

文档存储 (Elasticsearch/Infinity)

文档存储负责存储和检索文档块及其向量嵌入。RAGFlow 支持两种文档存储:

  1. Elasticsearch: 广泛使用的具有向量搜索功能的搜索引擎
  2. Infinity: 专为 RAG 工作负载优化的向量数据库

用户可以通过更改 DOC_ENGINE 配置来切换这些文档存储。

来源:README.md250-273 docker/docker-compose-base.yml2-66

对象存储 (MinIO)

MinIO 提供原始文件二进制文件的对象存储。它允许 RAGFlow:

  • 安全地存储上传的文件
  • 生成用于文件下载的预签名 URL
  • 高效处理大文件

来源:docker/docker-compose-base.yml99-116 docs/guides/manage_files.md44-71

关系型数据库 (MySQL)

MySQL 存储元数据、用户信息、知识库配置以及实体之间的关系。

来源:docker/docker-compose-base.yml69-97

缓存 (Redis)

Redis 提供缓存以提高性能,存储频繁访问的数据和会话信息。

来源:docker/docker-compose-base.yml117-129

配置系统

RAGFlow 使用灵活的配置系统,包含几个关键组件:

环境变量 (.env)

.env 文件包含基本配置参数,例如:

  • SVR_HTTP_PORT: 服务器的 HTTP 端口
  • MYSQL_PASSWORD: MySQL 密码
  • MINIO_PASSWORD: MinIO 密码
  • DOC_ENGINE: 文档存储选择 (elasticsearch 或 infinity)
  • RAGFLOW_IMAGE: 要使用的 Docker 镜像

来源:README.md229-243 docs/guides/upgrade_ragflow.mdx28-50

服务配置 (service_conf.yaml)

服务配置文件定义了各种服务的设置,包括:

  • LLM API 密钥和端点
  • 嵌入和生成的默认模型
  • 文档处理参数
  • 网络和安全设置

此文件由使用环境变量存储敏感信息的模板生成。

来源:README.md195-197 docker/entrypoint.sh81-88

运行时配置

运行时配置系统允许在不重启服务的情况下更新某些设置,由 api/db/runtime_config.py 中的 RuntimeConfig 类管理。

来源:api/db/runtime_config.py1-55

版本控制系统

RAGFlow 使用语义化版本控制进行发布。版本信息存储在多个位置:

  • 项目根目录下的 VERSION 文件
  • Python 包版本在 pyproject.toml
  • 运行时版本信息在 api/versions.py

系统区分完整版和精简版:

  • 完整版: 包含嵌入模型 (~9GB)
  • 精简版: 需要外部嵌入服务 (~2GB)

来源:api/versions.py20-52 pyproject.toml1-4 Dockerfile170-177 docs/guides/upgrade_ragflow.mdx16-86

总结

RAGFlow 的架构设计旨在实现灵活性、可扩展性和高性能。其模块化设计易于扩展和定制,同时采用行业标准技术确保可靠性和可维护性。

该架构的主要优势包括:

  1. 模块化设计:组件可以独立开发和扩展
  2. 灵活集成:支持各种 LLM 提供商和文档格式
  3. 可扩展处理:文档处理可以水平扩展
  4. 自定义管道:代理流系统允许自定义 RAG 管道
  5. 深度文档理解:高级文档解析和分析能力
  6. 可配置存储:支持不同的文档存储 (Elasticsearch/Infinity)

此架构使 RAGFlow 能够为从个人用户到大型企业的各种规模企业提供高质量的 RAG 功能。

来源:README.md97-114 README.md126-130