系统概述
RAGFlow 遵循微服务架构,在文档处理、对话式 AI、搜索和检索以及 LLM 集成方面具有明显的关注点。该系统旨在大规模处理文档摄取、智能分块、矢量嵌入和对话界面。
高级架构

核心架构原则
该系统实现了几个关键的体系结构模式:
| 元件 | 模式 | 实现 |
|---|---|---|
| 任务处理 | Actor 模型 | task_executor.py 具有三重奏并发功能 |
| 文档存储 | 多后端 | DocStoreConnection 抽象 ES/Infinity/OpenSearch |
| LLM 集成 | 工厂模式 | LLMBundle 特定于提供程序的实现 |
| API 层 | 烧瓶蓝图 | 针对不同功能领域的单独应用程序 |
| 缓存 | 基于 Redis | 任务队列和 LLM 缓存的 REDIS_CONN |
文档处理管道
文档处理管道代表了 RAGFlow 的核心工作流程,将原始文档转换为可搜索的、语义上有意义的块。
处理流架构

任务执行系统
该 task_executor.py 使用 trio 库实现了一个复杂的并发处理系统:
Core concurrency limiters
# Core concurrency limiters
task_limiter = trio.Semaphore(MAX_CONCURRENT_TASKS)
chunk_limiter = trio.CapacityLimiter(MAX_CONCURRENT_CHUNK_BUILDERS)
embed_limiter = trio.CapacityLimiter(MAX_CONCURRENT_CHUNK_BUILDERS)
minio_limiter = trio.CapacityLimiter(MAX_CONCURRENT_MINIO)
系统通过几个阶段处理单据:
- 文档分块 - build_chunks() 函数使用特定于解析器的逻辑处理文档
- 嵌入生成 - embedding() 函数使用配置的模型创建矢量表示
- 存储作 - 并发上传到文档存储和对象存储
- 进度跟踪 - set_progress() 通过 TaskService 提供实时更新
搜索和检索体系结构
搜索系统实现了混合检索,通过搜索将全文搜索与向量相似性相结合 。经销商类。
搜索引擎组件

混合搜索实现
Dealer.search() 方法实现了复杂的混合搜索,具有以下主要功能:
- 多字段匹配 :跨 content_ltks、title_tks、important_kwd 和其他字段进行搜索
- 加权融合 :使用 FusionExpr 为文本与向量相似性配置权重
- 回退逻辑 :如果未找到结果,则以较低的相似性阈值自动重试
- 排名功能 :通过 _rank_feature_scores() 结合 PageRank 和基于标签的评分
API 层架构
API 层由 Flask 蓝图应用程序组成,这些应用程序为不同的功能区域提供 REST 端点。
API 应用程序结构
| 应用 | 目的 | 关键端点 | 主要服务依赖项 |
|---|---|---|---|
| document_app.py | 文档管理 | /upload、/list、/run | 文档服务 、 任务服务 |
| conversation_app.py | 聊天界面 | /完成、/列表 | DialogService、ConversationService |
| api_app.py | 外部 API | /datasets、/chat/completions | 通过统一接口提供各种服务 |
| chunk_app.py | 块作 | /set、/get、/retrieval_test | 搜索系统, 嵌入模型 |
请求处理流程
API 层在所有应用程序中实现一致的模式:
- 身份验证 :Flask-Login 与 @login_required 装饰器集成
- 验证 :用于输入验证的自定义 @validate_request 装饰器
- 错误处理 :通过 get_json_result() 和 server_error_response() 标准化错误响应
- 服务集成 :直接调用服务层类,如 DocumentService、DialogService
服务层架构
服务层通过专门的服务类实现核心业务逻辑,这些服务类抽象了数据库作并在不同系统组件之间进行协调。
服务类层次结构

数据库集成模式
服务层使用 Peewee ORM,模式如下:
- 连接上下文 :用于事务管理的 @DB.connection_context() 装饰器
- 模型关系 : 文档 、 知识库 、 任务模型之间的外键关系
- 批量作 :bulk_insert_into_db() 用于高效的大规模作
- 迁移支持 :MySQLMigrator 和 PostgresqlMigrator 用于模式演进
配置和部署体系结构
RAGFlow 使用分层配置方法,支持基于 Docker 的部署和特定于环境的自定义。
配置系统
| 配置层 | 文件路径 | 目的 |
|---|---|---|
| 环境变量 | docker/.env | Docker 容器配置 |
| 服务配置 | docker/service_conf.yaml.template | 后台服务设置 |
| Docker Compose | docker/docker-compose.yml | 服务编排 |
| Python 配置 | api/settings.py | 运行时应用程序设置 |
系统支持基于文档引擎选择的多个部署配置文件:
# Environment variable controls backend selection
DOC_ENGINE=${DOC_ENGINE:-elasticsearch}
COMPOSE_PROFILES=${DOC_ENGINE}
这使得仅通过配置即可在 Elasticsearch、Infinity 和 OpenSearch 后端之间切换。
6244



被折叠的 条评论
为什么被折叠?



