尼恩:LLM大模型学习圣经PDF的起源
在40岁老架构师 尼恩的读者交流群(50+)中,经常性的指导小伙伴们改造简历。
经过尼恩的改造之后,很多小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试机会,拿到了大厂机会。
2025年开始,尼恩一直在辅导小伙伴们做 AI 架构面试, 很多小伙伴 拿到了 Java + AI 架构offer ,比如下面的案例:
34岁无路可走,一个月翻盘,拿 3个架构offer,靠 Java+Al 逆天改命!!!
3年 程序媛 被裁, 25W-》40W 上岸, 逆涨60%。 Java+AI 太神了, 架构小白 2个月逆天改命
36岁/失业7个月/彻底绝望 。狠卷 3个月 Java+AI ,终于逆风翻盘,顺利 上岸
尼恩架构团队,通过 梳理一个《LLM大模型学习圣经》 帮助更多的人做LLM架构,拿到年薪100W, 这个内容体系包括下面的内容:
- 《Python学习圣经:从0到1精通Python,打好AI基础》
- 《LLM大模型学习圣经:从0到1吃透Transformer技术底座》
- 《LangChain学习圣经:从0到1精通LLM大模型应用开发的基础框架》
- 《LLM大模型学习圣经:从0到1精通RAG架构,基于LLM+RAG构建生产级企业知识库》
- 《SpringCloud + Python 混合微服务架构,打造AI分布式业务应用的技术底层》
- 《LLM大模型学习圣经:从0到1吃透大模型的顶级架构》
- 《LLM 智能体 学习圣经:从0到1吃透 LLM 智能体 的架构 与实操》
- 《LLM 智能体 学习圣经:从0到1吃透 LLM 智能体 的 中台 架构 与实操》
- 《 阿里面试:RAG 怎么优化?探讨一下 RAG优化的7大黄金法则 ?》
- 《LangChain 源码 + GOF设计模式:基于GOF的设计模式,穿透 LangChain 源码》
2. RAGFlow 项目整体架构设计
在尼恩社群中,很多小伙伴要求 深入学习一个 这个工业级的 RAG 框架 —— RAGFlow。
so, 尼恩团队的架构师们, 就写了新的系列,ragflow 圣经。
RAGFlow圣经(4):RAGFlow 数据解析与知识图谱
你有没有想过,现代化的图书馆是如何运作的?
当你走进一座智能图书馆,扫描书籍条码就能自动借阅,输入关键词就能找到相关资料,甚至还能和智能助手对话获取知识解答。
这一切看似神奇的功能背后,其实是一套精密的系统架构在默默运行。
RAGFlow 就像是这样一座现代化的智能图书馆,它不仅能存储和管理文档,更能深度理解文档内容,并通过智能对话为用户提供精准的答案。
在前一章中,我们了解了 RAGFlow 的核心概念——就像了解了图书馆的基本功能。现在,我们要深入"建筑内部",看看这个智能系统是如何设计和建造的。
想象一下,如果你要设计一座能处理数百万份文档、同时服务成千上万用户的智能图书馆,你会怎么设计?
- 需要一个接待大厅处理用户请求
- 需要专门的文档分析中心理解每份文档
- 需要强大的检索系统快速找到相关信息
- 需要智能对话区域与用户交流
- 需要可靠的存储仓库保管所有资料
RAGFlow 的架构设计就是基于这样的现实需求。它采用了微服务架构——就像图书馆的不同功能区域,每个区域都有专门的工作人员和设备,各司其职又协调配合。通过本章的深入分析,你将理解 RAGFlow 如何通过精巧的架构设计,实现一个高性能、高可用的企业级 RAG 平台。
2.1 架构设计理念 - 像设计现代化图书馆一样思考
2.1.1 微服务架构选择 - 就像专业化的分工协作
想象一下现代医院的运作方式:挂号处、化验科、影像科、各个专科门诊都有自己的专业团队,但它们通过完善的流程协调配合。RAGFlow 的架构设计也是这个思路:

为什么选择微服务?
(1) 专业化分工:就像医院里的科室,每个服务都专注于自己最擅长的事情
(2) 独立扩展能力:文档解析很耗 CPU?单独给它加机器。检索压力大?给检索服务单独扩容
(3) 技术选择自由:Python 写 AI 算法,JavaScript 做前端交互,Go 做高并发服务
(4) 故障隔离:一个服务挂了不会让整个系统瘫痪,就像一个科室停诊不影响其他科室
让我们看看 RAGFlow 项目的实际目录结构,就像参观图书馆的各个功能区域:
2.1.2 RAGFlow 项目目录结构详解
ragflow/
├── 📁 api/ # API网关和前端服务 (像图书馆的接待大厅)
│ ├── apps/ # 各个业务模块的API接口
│ │ ├── conversation_app.py # 对话管理接口
│ │ ├── dataset_app.py # 知识库管理接口
│ │ ├── document_app.py # 文档管理接口
│ │ ├── file_app.py # 文件上传接口
│ │ ├── llm_app.py # 大模型配置接口
│ │ └── user_app.py # 用户管理接口
│ ├── db/ # 数据库操作层
│ │ ├── db_models.py # 数据模型定义
│ │ └── services/ # 业务逻辑服务
│ ├── ragflow_server.py # 主服务器入口
│ └── settings.py # API服务配置
│
├── 📁 rag/ # RAG核心引擎 (像图书馆的智能检索系统)
│ ├── app/ # RAG业务逻辑
│ │ ├── retrieval.py # 检索逻辑
│ │ ├── generator.py # 生成逻辑
│ │ └── qa.py # 问答处理
│ ├── flow/ # 工作流管理
│ ├── llm/ # 大模型适配器
│ │ ├── chat_model.py # 对话模型封装
│ │ ├── embedding_model.py # 嵌入模型封装
│ │ └── rerank_model.py # 重排序模型封装
│ ├── nlp/ # 自然语言处理工具
│ │ ├── rag_tokenizer.py # 分词器
│ │ └── search.py # 搜索算法
│ └── utils/ # 工具函数
│
├── 📁 deepdoc/ # 深度文档理解引擎 (像图书馆的文档分析中心)
│ ├── parser/ # 各种文档解析器
│ │ ├── excel_parser.py # Excel解析器
│ │ ├── pdf_parser.py # PDF解析器
│ │ ├── word_parser.py # Word解析器
│ │ └── presentation_parser.py # PPT解析器
│ └── vision/ # 视觉理解模块
│ ├── layout_recognizer.py # 版面识别
│ ├── ocr.py # 光学字符识别
│ └── table_recognizer.py # 表格识别
│
├── 📁 agent/ # Agent智能体系统 (像图书馆的AI助手)
│ ├── component/ # 智能体组件
│ │ ├── begin.py # 开始节点
│ │ ├── retrieval.py # 检索节点
│ │ ├── generate.py # 生成节点
│ │ └── rewrite.py # 重写节点
│ ├── tools/ # 外部工具集成
│ │ ├── bing_search.py # 必应搜索
│ │ ├── google_search.py # 谷歌搜索
│ │ ├── wikipedia.py # 维基百科
│ │ └── arxiv.py # 学术论文搜索
│ └── templates/ # 工作流模板
│
├── 📁 web/ # 前端用户界面 (像图书馆的用户终端)
│ ├── src/
│ │ ├── components/ # React组件
│ │ ├── pages/ # 页面组件
│ │ ├── hooks/ # React Hooks
│ │ └── utils/ # 前端工具函数
│ ├── package.json # 前端依赖配置
│ └── .umirc.ts # UmiJS配置
│
├── 📁 docker/ # 容器化部署 (像图书馆的基础设施)
│ ├── docker-compose.yml # 主服务编排
│ ├── docker-compose-base.yml # 基础服务编排
│ ├── .env # 环境变量配置
│ ├── service_conf.yaml.template # 服务配置模板
│ └── nginx/ # Nginx反向代理配置
│
├── 📁 conf/ # 配置文件 (像图书馆的管理制度)
│ ├── service_conf.yaml # 主服务配置
│ └── logging.yml # 日志配置
│
├── 📁 sandbox/ # 代码执行沙箱 (像图书馆的安全实验室)
│ ├── executor_manager.py # 执行器管理
│ └── runtime/ # 各语言运行时
│
├── 📁 test/ # 测试代码
├── 📁 docs/ # 项目文档
├── pyproject.toml # Python项目配置
├── Dockerfile # Docker镜像构建文件
└── README.md # 项目说明
2.1.3 分层架构设计 - 像盖楼一样层次分明
RAGFlow 的架构就像一栋设计精良的办公楼,每一层都有明确的功能定位:

2.1.4 云原生设计 - 为现代部署而生
现在的应用就像乐高积木,要能够灵活组装、随时拆换。RAGFlow 从设计之初就考虑了这些现代化需求:
容器化就像标准化的货柜:
- 所有服务都打包成 Docker 镜像,就像把货物装进标准货柜
- 不管是在开发环境、测试环境还是生产环境,都能一致地运行
配置外部化就像换衣服:
- 通过
docker/.env和conf/service_conf.yaml灵活配置 - 同一套代码可以适应不同的运行环境
健康检查就像体检:
- 每个服务都有健康检查接口,系统能及时发现问题
- 不健康的服务会被自动重启或替换
2.2 实际架构分析 - 基于 Docker Compose 的现代化部署
理解 RAGFlow 架构最直观的方式就是分析它的 Docker Compose 配置。就像看一份现代化建筑的设计图纸,这些文件定义了构成 RAGFlow 系统的所有服务容器以及它们之间的依赖关系。
2.2.1 容器化架构总览
通过分析实际的 docker-compose.yml 和 docker-compose-base.yml 文件,我们可以看到 RAGFlow 的完整部署架构:

2.2.2 主要服务组件详解
让我们深入了解每个服务组件,就像详细了解一座现代化图书馆的各个部门:
🚀 ragflow-server (API 网关与前端服务)
这就像图书馆的接待大厅和客服中心,是用户与 RAGFlow 系统交互的唯一入口。
核心职责:
- 处理所有 HTTP 请求和 WebSocket 实时连接
- 用户身份认证和权限管理
- 提供 RESTful API 服务
- 前端静态资源服务
实际配置(根据 docker-compose.yml):
ragflow:
image: ${
RAGFLOW_IMAGE} # 使用环境变量指定镜像版本
container_name: ragflow-server
ports:
- ${
SVR_HTTP_PORT}:9380 # 主 HTTP 服务端口
- 80:80 # 标准 HTTP 端口
- 443:443 # HTTPS 端口
- 9382:9382 # MCP 服务端口
volumes:
- ./ragflow-logs:/ragflow/logs # 日志目录
- ./nginx/ragflow.conf:/etc/nginx/conf.d/ragflow.conf # Nginx 配置
- ./service_conf.yaml.template:/ragflow/conf/service_conf.yaml.template
代码结构:
api/ragflow_server.py- 主入口文件api/apps/- 各业务模块 API 接口web/- React 前端用户界面
📊 MySQL 8.0.39 (主数据库)
就像图书馆的主要目录系统,存储所有关键的结构化数据。
存储内容:用户账户、知识库元数据、文档元数据、对话历史、系统配置
实际配置:
mysql:
image: mysql:8.0.39
command: --max_connections=1000 --character-set-server=utf8mb4
environment:
- MYSQL_ROOT_PASSWORD=${
MYSQL_PASSWORD}
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
🔍 Elasticsearch 8.11.0 (检索引擎)
就像图书馆的智能检索系统,能够快速找到相关内容。
存储内容:文档分块文本、文本向量嵌入、全文检索索引、语义相似性检索索引
🟥 Redis/Valkey 8 (缓存系统)
就像图书馆的快速借阅区,存放经常被访问的热门信息。
存储内容:用户会话状态、API 访问频率限制、暂时计算结果缓存、分布式锁和任务队列
📰 MinIO (对象存储)
就像图书馆的大型仓库,存放所有的实体文件和多媒体资料。
存储内容:原始文档文件、处理后的文本文件、图片和多媒体文件、备份和导出数据
2.2.3 数据流转分析 - 一份文档的奇妙之旅
想象一下,当你在图书馆上传一份 PDF 文档时,它会经历一段怎样的奇妙之旅呢?让我们跟随一份文档的完整流程:

这个流程就像一本书在图书馆的完整生命周期:从进馆登记、分类编目、上架存放,到最终被读者查找和阅读。每一步都经过精心设计,确保信息能够被准确理解和快速检索。
2.3 核心模块深度剥析 - 深入各个专业部门
现在让我们走进 RAGFlow 的各个“专业部门”,看看它们是如何各司其职的。
2.3.1 📄 DeepDoc 深度文档理解引擎
这就像图书馆的专业文档分析师,能够理解各种复杂文档的结构和内容。
模块位置:deepdoc/ 目录
核心能力:
| 解析器 | 支持格式 | 核心功能 |
|---|---|---|
| PDF 解析器 | OCR 文字识别、版面分析、表格提取 | |
| Word 解析器 | DOCX/DOC | 样式保持、内嵌对象处理 |
| Excel 解析器 | XLSX/XLS | 表格结构解析、数据类型推断 |
| PPT 解析器 | PPTX/PPT | 幻灯片内容提取、图文结合 |
智能分块策略:
- 语义分块:按照语义逻辑切分,保持内容的完整性
- 结构分块:基于文档结构(标题、段落、表格)进行切分
- 动态分块:根据内容复杂度动态调整分块大小
2.3.2 🔍 RAG 检索增强生成引擎
这就像图书馆的智能检索系统和知识顾问,能够精准找到相关信息并综合生成答案。
模块位置:rag/ 目录
检索策略组合:

多维度检索算法:
(1) 关键词全文检索:传统 BM25 算法,快速匹配关键词
(2) 语义向量检索:基于 Embedding 的语义相似性匹配
(3) 混合检索:结合多种算法,取优补短
(4) 重排序机制:使用专门的排序模型优化结果
2.3.3 🤖 RAG 的Agent 智能体系统
这就像图书馆的专业研究员,能够根据复杂问题设计研究方案,调用各种工具和资源。
模块位置:agent/ 目录
工作流组件:
| 组件类型 | 功能描述 | 应用场景 |
|---|---|---|
| 开始节点 | 工作流入口,接收用户输入 | 所有工作流 |
| 检索节点 | 从知识库检索相关信息 | 知识问答 |
| 生成节点 | 调用大模型生成内容 | 文本生成 |
| 工具节点 | 调用外部 API 和工具 | 信息查询 |
| 条件节点 | 根据条件判断流程走向 | 复杂逻辑 |
可集成工具:
- 搜索引擎:Google、必应、百度等
- 学术资源:arXiv、学术搜索等
- 知识库:维基百科、百度百科等
- 计算工具:代码执行、数学计算等
2.3.4 🌐 Web 前端用户界面
这就像图书馆的现代化用户终端,提供直观友好的操作界面。
模块位置:web/ 目录
技术栈:
- 框架:React 18 + UmiJS 4
- 状态管理:Redux Toolkit + React Query
- UI 组件:Antd 5.x
- 样式方案:Tailwind CSS
- 类型检查:TypeScript
核心功能模块:
| 功能模块 | 主要页面 | 核心特性 |
|---|---|---|
| 知识库管理 | 知识库列表、创建、设置 | 文档上传、分块预览、状态监控 |
| 文档管理 | 文档列表、详情、编辑 | 批量上传、解析进度、错误处理 |
| 对话问答 | 聊天界面、历史记录 | 流式响应、引用源显示、多轮对话 |
| Agent 工作流 | 可视化编辑器、调试 | 拖拽式设计、实时执行、日志查看 |
| 系统管理 | 用户管理、模型配置 | 角色权限、API 配置、监控看板 |
2.4 技术亮点与创新特性
2.4.1 多租户架构设计
就像一座现代化商业大厅,能同时服务多个不同的租户,但每个租户的数据和资源都是完全隔离的。
数据隔离策略:
- 数据库级别

最低0.47元/天 解锁文章
1509

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



