系统架构文档全面概述了 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
系统可配置使用 Elasticsearch 或 Infinity 作为文档存储。
来源:docker/entrypoint.sh96-107 README.md250-273
后端服务构成了 RAGFlow 系统的核心,实现业务逻辑和数据处理能力。
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 系统之间的对话
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 管道
存储层由针对不同数据类型的多个专用系统组成
文档存储负责存储和检索文档块及其向量嵌入。RAGFlow 支持两种文档存储:
用户可以通过更改 DOC_ENGINE 配置来切换这些文档存储。
来源:README.md250-273 docker/docker-compose-base.yml2-66
MinIO 提供原始文件二进制文件的对象存储。它允许 RAGFlow:
来源:docker/docker-compose-base.yml99-116 docs/guides/manage_files.md44-71
MySQL 存储元数据、用户信息、知识库配置以及实体之间的关系。
来源:docker/docker-compose-base.yml69-97
Redis 提供缓存以提高性能,存储频繁访问的数据和会话信息。
来源:docker/docker-compose-base.yml117-129
RAGFlow 使用灵活的配置系统,包含几个关键组件:
.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
服务配置文件定义了各种服务的设置,包括:
此文件由使用环境变量存储敏感信息的模板生成。
来源:README.md195-197 docker/entrypoint.sh81-88
运行时配置系统允许在不重启服务的情况下更新某些设置,由 api/db/runtime_config.py 中的 RuntimeConfig 类管理。
来源:api/db/runtime_config.py1-55
RAGFlow 使用语义化版本控制进行发布。版本信息存储在多个位置:
VERSION 文件pyproject.toml 中api/versions.py 中系统区分完整版和精简版:
来源:api/versions.py20-52 pyproject.toml1-4 Dockerfile170-177 docs/guides/upgrade_ragflow.mdx16-86
RAGFlow 的架构设计旨在实现灵活性、可扩展性和高性能。其模块化设计易于扩展和定制,同时采用行业标准技术确保可靠性和可维护性。
该架构的主要优势包括:
此架构使 RAGFlow 能够为从个人用户到大型企业的各种规模企业提供高质量的 RAG 功能。