当前位置: 首页 > news >正文

Ragflow 源码:ragflow_server.py

目录

    • 介绍
      • 1. 初始化和配置
      • 2. 数据库管理
      • 3. 核心功能
      • 4. HTTP 服务
      • 5. 信号处理
      • 6. 调试支持
    • 流程图
      • 系统架构
    • 代码解释
      • 1. **初始化系统**
      • 2. **运行时控制**
      • 3. **核心服务**

介绍

ragflow_server.py 是 RAGFlow 项目的主服务器程序,负责启动和管理 RAGFlow 的核心服务。以下是它的主要功能和作用:

1. 初始化和配置

  • 日志初始化:使用 initRootLogger 初始化根日志记录器
  • 版本显示:打印 RAGFlow 的 ASCII 艺术标志和版本信息
  • 配置加载
    • 加载 API 设置 (settings.init_settings())
    • 打印 RAG 相关配置 (print_rag_settings())
    • 支持调试模式 (RAGFLOW_DEBUGPY_LISTEN 环境变量)

2. 数据库管理

  • 数据库初始化
    • init_web_db() 初始化 Web 数据库表
    • init_web_data() 初始化基础数据
  • 运行时配置:通过 RuntimeConfig 类管理运行时配置

3. 核心功能

  • 文档进度更新
    • 启动后台线程 (update_progress) 定期更新文档处理进度
    • 使用 Redis 分布式锁确保线程安全
  • 插件管理:通过 GlobalPluginManager.load_plugins() 加载插件

4. HTTP 服务

  • Web 服务启动
    • 使用 Werkzeug 的 run_simple 启动 HTTP 服务器
    • 支持多线程和调试模式
    • 监听指定的主机 IP 和端口

5. 信号处理

  • 注册信号处理器 (signal_handler) 用于优雅关闭
  • 处理 SIGINT (Ctrl+C) 和 SIGTERM 信号

6. 调试支持

  • 支持通过 debugpy 进行远程调试
  • 可通过 --debug 参数启用调试模式

流程图

系统架构

主程序 日志系统 数据库 配置系统 后台线程 HTTP服务器 Debugger Redis DocumentService 初始化日志(initRootLogger) 打印版本和配置 初始化数据库(init_web_db) 初始化数据(init_web_data) 解析命令行参数 初始化运行时配置 加载插件 启动debugpy监听 alt [调试模式] 启动文档进度更新线程 获取分布式锁 定期更新进度 启动Werkzeug服务器(run_simple) 处理HTTP请求 每6秒更新进度 loop [运行中] 设置停止事件(stop_event) 关闭服务器 opt [收到终止信号] 主程序 日志系统 数据库 配置系统 后台线程 HTTP服务器 Debugger Redis DocumentService

代码解释

1. 初始化系统

# 日志初始化(结构化日志记录)
initRootLogger("ragflow_server")  # 创建根日志器,输出到文件和控制台# 配置加载(分层配置体系)
settings.init_settings()          # 加载api/settings.py基础配置
print_rag_settings()             # 打印rag/settings.py的RAG专用配置
show_configs()                   # 显示当前运行环境配置# 数据库初始化(ORM迁移+基础数据)
init_web_db()                    # 创建所有数据库表结构
init_web_data()                  # 初始化管理员账号等基础数据

2. 运行时控制

# 命令行参数解析
parser = argparse.ArgumentParser()
parser.add_argument("--debug", action="store_true")  # 调试模式开关
args = parser.parse_args()# 运行时配置(动态环境变量)
RuntimeConfig.init_env()          # 加载环境变量
RuntimeConfig.init_config(       # 初始化核心参数JOB_SERVER_HOST=settings.HOST_IP,HTTP_PORT=settings.HOST_PORT
)

3. 核心服务

# 文档进度更新服务(分布式锁保障)
def update_progress():redis_lock = RedisDistributedLock("update_progress", timeout=60)while not stop_event.is_set():try:if redis_lock.acquire():          # 获取Redis分布式锁DocumentService.update_progress()  # 批量更新文档处理状态stop_event.wait(6)                # 每6秒执行一次finally:redis_lock.release()               # 确保锁释放# HTTP服务(Werkzeug增强服务器)
run_simple(hostname=settings.HOST_IP,    # 支持0.0.0.0监听port=settings.HOST_PORT,application=app,              # Flask应用对象threaded=True,                # 多线程模式use_reloader=RuntimeConfig.DEBUG  # 调试时自动重载
)

http://www.lqws.cn/news/477451.html

相关文章:

  • rust单体web项目模板搭建
  • vim学习流程,以及快捷键总结
  • 微服务网关/nacos/feign总结
  • Maven:依赖管理就像乐高拼装的艺术
  • Vmware WorkStation 17.5 安装 Ubuntu 24.04-LTS Server 版本
  • 软件工程核心知识全景图:从需求到部署的系统化构建指南
  • 2025年EAAI SCI1区TOP,基于低差异序列的仿果蝇无人机地下环境路径规划算法,深度解析+性能实测
  • 无人机表演越来越火,C端市场大爆发
  • 信息安全管理与评估2025湖北卷路由部分答案
  • AI产品经理的定义边界与价值重构
  • NotePad++ 怎么没有找到插件管理?
  • RN(React Native)技术应用中常出现的错误及解决办法
  • 105. 从前序与中序遍历序列构造二叉树
  • DRTM动态度量信任根的POC概念验证
  • 优化通义大模型推理性能:企业级场景下的延迟与成本削减策略
  • YSYX学习记录(十一)
  • DAY 39 图像数据与显存
  • ProtoBuf:通讯录4.0实现 序列化能⼒对⽐验证
  • Rust 引用与借用
  • 47.第二阶段x64游戏实战-封包-分析打怪call
  • winform mvvm
  • 关于存储与网络基础的详细讲解(从属GESP二级内容)
  • 【机器学习四大核心任务类型详解】分类、回归、聚类、降维都是什么?
  • 人工智能、机器人最容易取哪些体力劳动和脑力劳动
  • AWS 使用图形化界面创建 EKS 集群(零基础教程)
  • Spring AI 项目实战(十):Spring Boot + AI + DeepSeek 构建智能合同分析技术实践(附完整源码)
  • java中HashMap和ConcurrentHashMap的共性以及区别
  • 《高等数学》(同济大学·第7版)第五章 定积分 第四节反常积分
  • 用可观测工具高效定位和查找设计中深度隐藏的bug
  • 网络安全智能体:重塑重大赛事安全保障新范式