RAGFlow 的核心架构:

ragflow架构

ragflow架构

RAGFlow 的架构设计清晰而模块化,主要可以分为以下几个层次:

  • • 输入层: 这是用户与系统交互的入口,用户可以通过提问(Questions)或上传文档(Documents,支持多种格式和 Web 链接)来提供信息。Web/Nginx 作为前端服务器,负责接收这些输入。

  • • API 服务层: API Server 是整个系统的核心大脑,负责协调和管理各个组件的工作流程。它接收来自 Web 层的请求,并进行任务分发(Task Dispatch)和查询分析(Query Analyze)。

  • • 数据处理层: 当用户上传文档后,RAGFlow 会将其分解成多个任务,由任务执行器(Task Executor)调用不同的文档处理模块,包括文档解析(Document Parser)、光学字符识别(OCR)、文档布局分析(Document Layout Analyze)和表格结构识别(Table Structure Recognition)。同时,系统还会进行关键词提取与嵌入(Keyword & Embedding),将文档内容转化为向量表示。

  • • 知识库层: 处理后的文档向量会存储在向量数据库中(Vector Database),为后续的快速语义检索提供支持。

  • • 检索与生成层: 当用户提问时,系统会通过多路召回(Multi-way Recall)机制从向量数据库中检索相关的文档片段(Chunk),然后利用重排序(Re-rank)技术选择最相关的片段。最后,大型语言模型(LLMs)会结合用户的问题和检索到的文档片段生成最终的答案(Answer)。

  • • 输出层: 系统将生成的答案返回给用户。

数据流向概览:

  • • 问题处理流程: 用户提问 -> Web 服务器 -> API 服务器 -> 查询分析 -> 向量化 -> 向量数据库检索 -> 多路召回 -> 重排序 -> 答案生成 -> 返回给用户。

  • • 文档处理流程: 用户上传文档 -> Web 服务器 -> API 服务器 -> 任务分发 -> 任务执行器 -> 文档解析/OCR/布局分析/表格识别 -> 向量化 -> 存储到向量数据库。

关键环节解析:

  • • 多路召回机制: RAGFlow 不仅仅依赖于单一的检索方法,而是结合了多种策略(如关键词匹配、语义相似度等),从而更全面地覆盖相关知识。

  • • 重排序过程: 对召回的文档片段进行精细化排序,确保返回最相关的结果,提高答案的质量。

  • • 向量化与存储: 将文档转化为向量表示并存储在专门的向量数据库中,是实现高效语义检索的关键。

  • • 任务调度与执行: 灵活的任务调度机制能够根据不同文档的类型和需求,调用相应的处理模块。

  • • 文档处理多样性: RAGFlow 支持处理多种复杂的文档格式,这得益于其强大的文档解析和识别能力。

RAGFlow 项目结构导览(核心业务模块):

RAGFlow 的代码结构组织清晰,以下是一些核心业务模块的简要介绍:

  • • rag/:RAG 模块 - 包含检索增强生成的核心实现,如文档处理 (app/)、LLM 集成 (llm/)、自然语言处理 (nlp/)、服务层 (svr/) 等。

  • • api/:API 服务模块 - 提供连接前端与后端核心功能的 RESTful 接口。

  • • deepdoc/:文档智能处理模块 - 负责从各种文档中提取结构化信息,包括文档解析和计算机视觉处理(OCR、布局分析、图表识别)。

  • • graphrag/:图形化 RAG 模块 - 将传统 RAG 与图结构结合,支持更复杂的知识推理。

  • • agent/:智能代理模块 - 将 RAG 能力与工具调用、工作流编排结合,实现更复杂的自动化任务。

  • • web/:前端模块 - 基于 React + TypeScript 开发,提供用户界面。

RAGFlow 调试秘籍:

RAGFlow 调试,一般是面向需要二次开发和查看代码流程,因此需要使用源码启动方式

对于希望深入 RAGFlow 代码进行二次开发和流程查看的开发者来说,掌握源码启动下的调试技巧至关重要。利用 VSCode 的远程调试功能,你可以像在本地开发一样方便地设置断点、单步执行、查看变量,从而更高效地理解代码逻辑和排查问题。

启动后端(源码方式)

  1. 1. 安装 uv。如已经安装,可跳过本步骤:
    pip install pipx
    pipx install uv
    export UV_INDEX=https://mirrors.aliyun.com/pypi/simple
  1. # uv命令生效
    pipx ensurepath
    • • pip 用于安装 Python 库,这些库是构建其他 Python 项目的基础。 你通常会在项目特定的虚拟环境中使用 pip

    • • pipx 用于安装 Python 应用程序,这些应用程序是你可以直接在命令行运行的独立工具。 pipx 会确保每个应用程序都在其自己的隔离环境中运行。

  2. 2. 下载源代码并安装 Python 依赖:
    git clone https://github.com/infiniflow/ragflow.git
    cd ragflow/
    uv sync --python 3.10 --all-extras # install RAGFlow dependent python modules
  3. 3. 通过 Docker Compose 启动依赖的服务(MinIO, Elasticsearch, Redis, and MySQL):
    docker-compose -f docker/docker-compose-base.yml up -d --force-recreate
    在 /etc/hosts 中添加以下代码,将 conf/service_conf.yaml 文件中的所有 host 地址都解析为 127.0.0.1
    127.0.0.1       es01 infinity mysql minio redis
  4. 4. 如果无法访问 HuggingFace,可以把环境变量 HF_ENDPOINT 设成相应的镜像站点:
    export HF_ENDPOINT=https://hf-mirror.com
  5. 5. 启动后端服务:
    source .venv/bin/activate
    export PYTHONPATH=$(pwd)
    bash /root/ragflow/docker/launch_backend_service.sh
    正常启动,出现以下信息表示启动成功:
            ____   ___    ______ ______ __               
           / __ \ /   |  / ____// ____// /____  _      __
          / /_/ // /| | / / __ / /_   / // __ \| | /| / /
         / _, _// ___ |/ /_/ // __/  / // /_/ /| |/ |/ / 
        /_/ |_|/_/  |_|\____//_/    /_/ \____/ |__/|__/                             
    
        
    2025-04-11 11:19:01,094 INFO     27812 RAGFlow version: v0.17.2-204-g1979222b full
    2025-04-11 11:19:01,095 INFO     27812 project base: /root/ragflow
    2025-04-11 11:19:01,096 INFO     27812 Current configs, from /root/ragflow/conf/service_conf.yaml:
        ragflow: {'host': '0.0.0.0', 'http_port': 9380}
        mysql: {'name': 'rag_flow', 'user': 'root', 'password': '********', 'host': 'localhost', 'port': 5455, 'max_connections': 100, 'stale_timeout': 30}
        minio: {'user': 'rag_flow', 'password': '********', 'host': 'localhost:9000'}
        es: {'hosts': 'http://localhost:1200', 'username': 'elastic', 'password': '********'}
        infinity: {'uri': 'localhost:23817', 'db_name': 'default_db'}
        redis: {'db': 1, 'password': '********', 'host': 'localhost:6379'}
    2025-04-11 11:19:01,100 INFO     27812 Use Elasticsearch http://localhost:1200 as the doc engine.
    2025-04-11 11:19:01,126 INFO     27812 GET http://localhost:1200/ [status:200 duration:0.023s]
    2025-04-11 11:19:01,134 INFO     27812 HEAD http://localhost:1200/ [status:200 duration:0.007s]
    2025-04-11 11:19:01,136 INFO     27812 Elasticsearch http://localhost:1200 is healthy.
    2025-04-11 11:19:01,143 WARNING  27812 Load term.freq FAIL!
    2025-04-11 11:19:01,151 WARNING  27812 Realtime synonym is disabled, since no redis connection.
    2025-04-11 11:19:01,159 WARNING  27812 Load term.freq FAIL!
    2025-04-11 11:19:01,165 WARNING  27812 Realtime synonym is disabled, since no redis connection.
    2025-04-11 11:19:01,167 INFO     27812 MAX_CONTENT_LENGTH: 134217728
    2025-04-11 11:19:01,168 INFO     27812 MAX_FILE_COUNT_PER_USER: 0
    2025-04-11 11:19:04,280 INFO     27812 init web data success:2.7721996307373047
    2025-04-11 11:19:04,284 INFO     27812 update_progress lock_value: 58f01bdd-c3ab-4844-85fa-28bcd3ee09e0
    2025-04-11 11:19:04,284 INFO     27812 RAGFlow HTTP server start...
    2025-04-11 11:19:04,288 INFO     27812 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
     * Running on all addresses (0.0.0.0)
     * Running on http://127.0.0.1:9380
     * Running on http://192.168.172.128:9380

其中:

  • • v0.17.2:官方发布的版本。

  • • 204:自官方发布以来的 git 提交次数。

  • • g1979222bg 是前缀,1979222b 是当前提交 ID 的前七个字符。

  • • full/slim:RAGFlow 的版本。

    • • full:完整的 RAGFlow 版本。

    • • slim:不包含嵌入模型和 Python 包的 RAGFlow 版本。

启动前端(源码方式)

  1. 6. 安装前端依赖:
    cd web
    apt install npm
    npm install
  2. 7. 启动前端服务:
    cd /root/ragflow/web
    npm run dev
    以下界面说明系统已经成功启动:
    Done in 1874ms.
    info  - MFSU eager strategy enabled
    info  - [MFSU][eager] restored cache
    [HPM] Proxy created: /api,/v1  -> http://127.0.0.1:9380/
    event - [MFSU][eager] start build deps
    info  - [MFSU] skip buildDeps
            ╔════════════════════════════════════════════════════╗
            ║ App listening at:                                  ║
            ║  >   Local: http://localhost:9222                  ║
    ready - ║  > Network: http://192.168.172.128:9222            ║
            ║                                                    ║
            ║ Now you can open browser with the above addresses↑ ║
            ╚════════════════════════════════════════════════════╝
    info  - [MFSU][eager] worker init, takes 2243ms

组件访问

根据 docker/.env 文件的配置,以下是各个组件的详细访问信息:

1. ElasticSearch
  • • 访问地址:http://192.168.172.128:1200

  • • 账号:elastic

  • • 密码:infini_rag_flow

  • 使用Elasticsearch Multi-head(s)查看RagFlow的向量数据信息

2. Kibana
  • • 访问地址:http://192.168.172.128:6601

  • • 账号:rag_flow

  • • 密码:infini_rag_flow

使用 Kibana 查询和可视化 Elasticsearch 中的向量数据

根据配置文件,我可以看到:

  • • Kibana 运行在 6601 端口 (KIBANA_PORT=6601)

  • • Elasticsearch 运行在 1200 端口 (ES_PORT=1200)

  • • 登录凭证:

    • • 用户名:rag_flow (KIBANA_USER)

    • • 密码:infini_rag_flow (KIBANA_PASSWORD)

让我为你详细说明如何使用 Kibana 查询向量数据:

  1. 1. 访问 Kibana

    • • 打开浏览器,访问 http://localhost:6601

    • • 使用以下凭证登录:

      • • 用户名:rag_flow

      • • 密码:infini_rag_flow

  2. 2. 查看向量数据
    在 Kibana 中查询向量数据的步骤:

  3.     a. 使用 Dev Tools

     b. 查看索引数据

    # 查看所有索引
    GET _cat/indices?v
    # 查找ragflow_开头
    # 如:ragflow_e24416a9106d11f0a4a9c73ddb33c1ac
    
    # 查看向量索引的映射结构
    GET your_index_name/_mapping
    
    GET ragflow_e24416a9106d11f0a4a9c73ddb33c1ac/_mapping

    c. 查询向量数据

    # 基本查询示例
    GET your_index_name/_search
    {
    "query":{
        "match_all":{}
    }
    }
    
    # 向量相似度查询示例
    GET ragflow_e24416a9106d11f0a4a9c73ddb33c1ac/_search
    {
    "query":{
        "script_score":{
          "query":{
            "match_all":{}
          },
          "script":{
            "source":"cosineSimilarity(params.query_vector, 'vector_field') + 1.0",
            "params":{
              "query_vector":[0.024323905304040452]// 你的查询向量
            }
          }
        }
    }
    }
    • • 点击左侧菜单栏的 "Dev Tools"(开发工具)

    • • 在 Console 中可以直接执行 Elasticsearch 查询

注意事项:

  1. 1. 向量数据通常是高维数据,直接可视化可能不太直观。建议先进行降维处理(如 PCA、t-SNE)后再可视化。

  2. 2. 在进行向量相似度搜索时,确保使用正确的相似度计算方法(cosine similarity、euclidean distance 等)。

  3. 3. 对于大规模向量数据,建议使用适当的分页和限制来优化查询性能。

3. Infinity(向量数据库,可选)
  • • Thrift 端口:23817

  • • HTTP 端口:23820

  • • PostgreSQL 端口:5432

  • • 主机名:infinity

4. MySQL
  • • 访问端口:5455

  • • 数据库名:rag_flow

  • • 密码:infini_rag_flow

5. MinIO(对象存储)
  • • API 访问地址:http://192.168.172.128:9000

  • • 控制台地址:http://192.168.172.128:9001

  • • 用户名:rag_flow

  • • 密码:infini_rag_flow

6. Redis
  • • 访问地址:redis:6379

  • • 密码:infini_rag_flow

7. HuggingFace
  1. • 模型保存地址:

  2.     Linux: ~/.cache/huggingface/

  3.     MacOS: ~/Library/Caches/huggingface/

  4.     Windows: C:\Users\<YourUsername>\.cache\huggingface\

  5. • 代理地址:HF_ENDPOINT=https://hf-mirror.com

8. RAGFlow API服务
  • • API 地址:http://192.168.172.128:9222

  • • API 文档:docs/references/http_api_reference.md

后端调试

Tip

我们需要配置 VSCode 通过 SSH 连接到远程服务器,并设置 Python 调试器。

  1. 1. 开发环境:Windows 11

  2. 2. 部署环境:Ubuntu22.04,代码在/root/ragflow目录

1. 在 Windows 上的 VSCode(或Cursor) 配置
  1. 1. 安装必要的 VSCode 扩展:

    • • Remote - SSH

    • • Python

    • • Python Debug

  2. 2. 配置 SSH 连接:

    • • 按 Ctrl+Shift+P

    • • 输入 Remote-SSH: Connect to Host

    • • 添加新的 SSH 主机:root@192.168.172.128

    • • 选择 SSH 配置文件位置(通常在 C:\Users\YourUsername\.ssh\config

    • • 输入密码 fly123

2. 配置调试设置

让我们在Ubuntu环境的/root/ragflow/.vscode/launch.json创建调试配置文件:

{
    "version":"0.2.0",
    "configurations":[
        {
            "name":"Backend",
            "type":"python",
            "request":"launch",
            "program":"${workspaceFolder}/api/ragflow_server.py",
            "console":"integratedTerminal",
            "justMyCode":false,
            "env":{
                "PYTHONPATH":"${workspaceFolder}"
            }
        }
    ]
} 
3. 安装调试所需的包

让我们确保远程环境安装了调试所需的包:

pip install debugpy
4. 使用方法

现在你可以按照以下步骤进行远程调试:

  1. 1. 在 VSCode 中连接到远程服务器:

    • • 点击左下角的绿色图标

    • • 选择 "Connect to Host..."

    • • 选择 root@192.168.172.128

  2. 2. 打开项目文件夹:

    • • 在 VSCode 中,选择 "File > Open Folder"

    • • 输入 /root/ragflow

  3. 3. 设置断点:

    • • 打开你想调试的 Python 文件

    • • 点击行号左侧设置断点

  4. 4. 启动调试:

    • • 按 F5 或点击 "Run and Debug" 图标

    • • 选择相应的调试配置:

      • • "Python: RAGFlow Backend" 用于调试主服务器

      • • "Python: Task Executor" 用于调试任务执行器

  5. 5. 调试控制:

    后端调试

    后端调试

    • • F5: 继续执行

    • • F10: 单步执行(不进入函数)

    • • F11: 单步执行(进入函数)

    • • Shift+F5: 停止调试

    • • F9: 切换断点

注意事项:
  1. 1. 调试时会暂停原有的服务,建议在开发环境进行调试。

  2. 2. 如果需要同时调试多个任务执行器,可以复制 "Python: Task Executor" 配置,修改 args 中的任务 ID。

  3. 3. 调试时可以在 DEBUG CONSOLE 中查看变量值,也可以在 WATCH 窗口添加要监视的变量。

  4. 4. 如果遇到连接问题,可以检查:

    • • 防火墙设置

    • • SSH 连接是否正常

    • • debugpy 是否正确安装

结语:

理解 RAGFlow 的架构和掌握调试技巧是成为一名熟练的 RAGFlow 使用者和开发者的关键。希望本文能帮助你更深入地了解 RAGFlow 的内部运作机制,并在遇到问题时能够快速定位和解决。继续探索 RAGFlow 的更多功能和可能性,打造属于你自己的智能知识库吧!

 

 大模型&AI产品经理如何学习

求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。

1.学习路线图

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。


2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方图片前往获取

3.技术文档和电子书 

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。



4.LLM面试题和面经合集


这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。



👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集***

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐