【RAGFlow代码详解-3】核心服务
任务执行系统
任务执行系统是 RAGFlow 的主要后台处理引擎,负责文档解析、分块、嵌入生成和知识图谱构建。该系统是围绕 TaskExecutor 类构建的,并使用分布式工作器架构和基于 Redis 的任务队列。
任务执行器架构
任务执行器作为具有多个并发工作线程的分布式系统运行。每个工作线程最多可以处理 MAX_CONCURRENT_TASKS
个(默认为 5 个)并发任务,并针对不同作(如块构建 (MAX_CONCURRENT_CHUNK_BUILDERS
)和 MinIO 作 (MAX_CONCURRENT_MINIO
) 进行专门的速率限制。
任务类型和处理流程
系统支持多种类型的单据处理任务:
FACTORY
字典将解析器类型映射到其相应的处理模块,允许根据内容类型动态选择文档处理策略。
服务层架构
RAGFlow 的服务层提供了一套全面的数据库服务和业务逻辑处理程序,可在 HTTP API 层和底层存储系统之间进行协调。
核心服务组件
服务层遵循明确的关注点分离,每个服务负责特定的域逻辑和数据持久性模式。
LLM 集成和模型管理
LLMBundle
类充当所有语言模型交互的主要接口,提供跨不同模型类型和提供者的统一 API:
LLM 服务自动处理令牌计数、使用情况跟踪,并提供可选的 Langfuse 集成以实现可观测性。
后台任务管理
RAGFlow 使用 Redis 作为分布式任务队列系统来协调多个工作器实例的后台处理。该系统实现了可靠的任务生命周期,包括进度跟踪、重试机制和运行状况监控。
任务队列体系结构
系统维护所有工作器实例的详细指标,包括待处理任务、滞后任务、已完成任务和失败任务。
进度跟踪和错误处理
任务进度通过 set_progress
功能进行跟踪,该功能更新数据库并向用户提供实时反馈:
进度值范围为 0.0 到 1.0,负值表示错误。系统支持平稳任务取消和指数退避的自动重试。
跨部门通信
RAGFlow 服务使用数据库事务、Redis 消息传递和直接函数调用通过定义明确的接口进行通信。系统通过仔细协调这些通信模式来保持一致性。
服务通信模式
系统使用 Redis 分布式锁来防止文档处理等关键作期间出现争用条件,并确保跨服务边界的数据一致性。
运行状况监控和服务发现
核心服务实施全面的健康监控,以确保系统可靠性:
运行状况检查提供详细的状态信息,包括所有核心服务的响应时间、错误率和资源利用率。