尼恩: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 源码》
1. RAGFlow圣经:项目介绍和概念详解
在尼恩社群中,很多小伙伴要求 深入学习一个 这个工业级的 RAG 框架 —— RAGFlow。
so, 尼恩团队的架构师们, 就写了新的系列,ragflow 圣经。
RAGFlow圣经(4):RAGFlow 数据解析与知识图谱
开篇导读
想象一下, 面对一座巨大的图书馆,里面有成千上万本书。
当你需要回答一个复杂问题时,传统的方法是:要么随便翻几本书碰运气,要么让一个"书呆子"(传统 AI)凭借记忆来回答,但这个"书呆子"经常会张口就来、胡编乱造。
RAG(检索增强生成)技术就像是给你配了一个超级聪明的图书馆助手。
当你提出问题时,这个助手会飞快地在图书馆里找到最相关的书籍、文章和资料,然后把这些"证据"交给 AI 来回答问题。这样 AI 就不再是"闭卷考试",而是变成了"开卷考试",回答自然更加准确和可靠。
传统 RAG 的痛点
在了解 RAGFlow 的优势之前,我们先看看,传统 RAG 系统的常见问题:
| 传统 RAG 痛点 | 具体表现 | RAGFlow 解决方案 |
|---|---|---|
| 📝 文档解析质量差 | 丢失表格结构、忽略图片信息 | 🎯 DeepDoc 引擎,精准识别版面结构 |
| ✂️ 分块策略简单粗暴 | 按字数硬切,破坏语义连贯性 | 🧠 版面感知分块,保持语义完整 |
| ❓ 缺乏可解释性 | 不知道答案来源,无法验证 | 🔍 详细引用来源,可点击查看 |
| 🤖 无法复杂推理 | 只能简单问答,不能多步思考 | 🔗 Agent 工作流,支持复杂推理 |
RAGFlow 是 一个超级图书馆助手系统。
它不仅能帮你管理各种文档(PDF、Word、Excel 等等),还能智能地理解这些文档的结构和内容,最后为你提供有理有据的答案。
更厉害的是,它还能搭建各种智能工作流,就像是给图书馆助手配备了各种专业工具。
本章将从最基础的概念开始,用最通俗易懂的方式,带你全面了解 RAGFlow 这个强大的智能知识处理平台。我们会从"什么是 RAG"开始讲起,然后深入 RAGFlow 的核心功能,最后通过实际代码示例让你看到这些概念是如何落地的。
1.1 什么是 RAG?为什么需要 RAG?
1.1.1 传统 AI 的"健忘症"问题
我们先来理解一个关键问题:为什么需要 RAG?
想象你有一个非常聪明的朋友,他博览群书、知识渊博,但有个致命问题——他有严重的"健忘症":
- 知识有截止日期:他只记得 2023 年之前的事情,对于最新发生的事情一无所知
- 记忆会"串门":有时候会把不同书籍的内容混在一起,说出一些似是而非的话
- 无法查证:当你问他"你这个说法的依据是什么"时,他说不清楚是从哪本书看到的
- 领域知识有限:对于你公司内部的文档、流程、数据,他完全不了解
这就是传统大语言模型(LLM)面临的问题,我们称之为:
- 知识截止:模型训练有时间界限
- 幻觉现象:模型会"编造"听起来合理但实际错误的信息
- 缺乏溯源:无法告诉你答案的具体来源
- 通用性局限:无法处理特定领域或私有的知识
1.1.2 RAG 的解决方案:给 AI 配个"智能秘书"
RAG 的核心思想非常简单,就像给那个健忘的朋友配了一个智能秘书:

这个流程可以分解为三个关键步骤:
(1) Retrieval(检索):智能秘书根据问题,快速从知识库中找到最相关的信息
(2) Augmented(增强):把找到的信息作为"参考资料"提供给 AI
(3) Generation(生成):AI 基于这些参考资料生成准确、有依据的回答
1.1.3 RAG 的实际效果对比
让我们看一个具体例子:
问题:“我们公司 2024 年第三季度的销售额是多少?”
传统 LLM 回答:
抱歉,我无法提供您公司具体的销售数据,因为我无法访问实时或私有的公司信息。
建议您查询公司的财务报表或联系财务部门。
RAG 系统回答:
根据《2024年第三季度财务报告.pdf》第3页的数据显示,
公司2024年第三季度销售额为1,245万元,同比增长15.2%。
具体分解如下:
- 产品A:456万元(占比36.7%)
- 产品B:234万元(占比18.8%)
- 产品C:555万元(占比44.5%)
[引用来源:2024年第三季度财务报告.pdf,第3页]
显而易见,RAG 系统提供了:
- ✅ 准确的具体数据
- ✅ 详细的分解信息
- ✅ 明确的引用来源
- ✅ 可验证的回答
1.2 初识 RAGFlow:不只是一个问答系统
1.2.1 RAGFlow 是什么?
RAGFlow 就像是为企业打造的一个超级智能图书馆。它不仅仅是一个问答机器人,更是一个完整的知识处理和智能推理平台。
想象一下,你的公司有各种各样的文档:
- 📄 PDF 合同、报告、说明书
- 📃 Word 文档、流程手册
- 📂 Excel 表格、数据统计
- 🎨 PPT 演示文稿
- 🌐 内部 wiki、网页资料
传统的做法是:需要查资料时,你得自己翻箱倒柜地找,然后一个个打开看。而 RAGFlow 就像是给这些文档配了一个超级智能管家:
(1) 深度理解文档:不像简单的文字提取,RAGFlow 能精准识别文档的结构——哪里是标题、哪里是表格、哪里是图片,甚至能识别复杂的版面布局
(2) 智能分块策略:就像一个优秀的编辑,能把长文档切分成既独立又关联的小段落,保持语义的完整性
(3) 可追溯答案:每个答案都会明确告诉你来源于哪个文档的哪一页,就像学术论文的引用一样严谨
(4) 智能工作流:还能搭建各种复杂的智能工作流,比如自动分析合同、生成报告等
1.2.3 从项目结构看 RAGFlow 的核心模块
让我们来看看 RAGFlow 的实际项目结构(根据实际代码目录):
ragflow/
├── 🏠 web/ # 前端界面(React + TypeScript)
├── 🔗 api/ # 后端 API服务
│ ├── apps/ # 各业务模块(知识库、对话等)
│ ├── db/ # 数据库模型和服务
│ └── ragflow_server.py # 主服务入口
├── 🧠 deepdoc/ # 深度文档理解引擎
│ ├── parser/ # 各种文档解析器(PDF、Word等)
│ └── vision/ # 视觉理解模块
├── 🔍 rag/ # RAG核心引擎
│ ├── nlp/ # 自然语言处理(分词、搜索等)
│ ├── flow/ # 数据处理流水线
│ └── llm/ # 大语言模型集成
├── 🤖 agent/ # 智能体框架
│ ├── component/ # 各种智能体组件
│ ├── tools/ # 工具集合
│ └── canvas.py # 工作流画布执行引擎
├── 🐳 docker/ # Docker部署配置
├── 📁 conf/ # 系统配置文件
└── 🔗 mcp/ # MCP协议服务(模型调用)
这个结构设计非常干净,每个模块都有明确的职责:
- deepdoc:专门负责"读懂"各种复杂文档
- rag:负责整个 RAG 的核心逻辑,包括搜索、分块等
- agent:提供智能体能力,支持复杂的多步推理
- api:提供统一的 API 接口,方便集成
1.2.4 从现实场景看 RAGFlow 的应用价值
让我们用几个具体场景来看看 RAGFlow 的实际价值:
场景 1:企业内部知识管理
痛点:公司有成千上万份文档,新员工入职找不到相关资料,老员工也记不清具体流程。
RAGFlow 解决方案:
- 上传各种文档(员工手册、流程说明、规章制度)
- 员工可以直接问:“请假流程是什么?”
- 系统会提供准确答案和具体来源文档
场景 2:客服智能问答
痛点:客服经常遭遇重复性问题,需要不断查找产品手册和常见问题库。
RAGFlow 解决方案:
- 将产品说明书、FAQ、故障排除指南等上传至系统
- 客服可以快速获得准确、专业的答案
- 支持多轮对话,理解上下文语境
场景 3:研发技术文档管理
痛点:技术文档版本众多,开发者难以快速找到最新的 API 文档和最佳实践。
RAGFlow 解决方案:
- 智能管理不同版本的技术文档
- 支持代码示例查找和解释
- 自动生成技术总结和最佳实践指南
1.3 RAGFlow 核心技术深度解析
现在让我们深入了解 RAGFlow 的技术内核,看看它是如何实现这些强大功能的。
1.3.1 深度文档理解(DeepDoc):让 AI"读懂"复杂文档
想象一下,你给一个小朋友看一本复杂的教科书,他只会从左到右、从上到下一个字一个字地读,不理解标题、表格、图片的关系。而一个成熟的读者会:
- 🔍 先看标题的层次结构
- 📊 理解表格数据的行列关系
- 🖼️ 分析图片和文字的对应关系
- 📝 识别列表、段落等结构元素
RAGFlow 的 DeepDoc 引擎就像这样一个成熟的读者。让我们看看它的具体实现:
# deepdoc/parser/ 目录下的实际代码结构
deepDoc/
├── parser/ # 各种文档解析器
│ ├── pdf_parser.py # PDF解析:版面分析 + OCR
│ ├── docx_parser.py # Word解析:结构化内容提取
│ ├── excel_parser.py # Excel解析:表格数据结构化
│ └── html_parser.py # HTML解析:网页结构理解
└── vision/ # 视觉理解模块
└── layout_recognizer.py # 版面布局识别
DeepDoc 的核心能力
1. 版面结构识别:能够自动识别文档中的不同区域

2. 表格结构保持:不仅仅是提取文字,还要保持数据的逻辑关系
传统方法:
姓名 张三 年龄 25 部门 研发部 工资 15000
姓名 李四 年龄 30 部门 市场部 工资 18000
RAGFlow 的 DeepDoc 处理后:
<table>
<thead>
<tr>
<th>姓名</th>
<th>年龄</th>
<th>部门</th>
<th>工资</th>
</tr>
</thead>
<tbody>
<tr>
<td>张三</td>
<td>25</td>
<td>研发部</td>
<td>15000</td>
</tr>
<tr>
<td>李四</td>
<td>30</td>
<td>市场部</td>
<td>18000</td>
</tr>
</tbody>
</table>
1.3.2 智能分块策略:像编辑一样精巧地切分内容
分块就像是把一本厚厚的书拆成一个个独立的章节,既要保证每个章节的完整性,又要让它们之间有适当的联系。
传统分块 vs RAGFlow 智能分块
| 对比维度 | 传统分块 | RAGFlow 智能分块 |
|---|---|---|
| 切分依据 | 固定字数(比如 500 字) | 🧠 语义边界 + 结构边界 |
| 结构理解 | 无结构理解 | 🏷️ 版面感知,识别段落、标题 |
| 语义完整性 | 经常破坏句子完整性 | ✅ 保持语义单元完整 |
| 上下文保持 | 无上下文关联 | 🔗 智能重叠,保持语境 |
从实际代码看,RAGFlow 提供了多种分块策略:
# 从 rag/app/naive.py 中看到的实际分块策略
CHUNKER_FACTORY = {
"general": general_chunker, # 通用分块:适用于大部分文档
"naive": naive_chunker, # 简单分块:纯文本快速处理
"manual": manual_chunker, # 手册分块:技术文档优化
"paper": paper_chunker, # 论文分块:学术格式优化
"book": book_chunker, # 书籍分块:长文档章节感知
"laws": laws_chunker, # 法律文件:法条结构保持
"presentation": ppt_chunker, # 演示文稿:幻灯片逻辑保持
}
1.2 核心概念与代码实现
理解 RAGFlow 的关键在于掌握其核心概念,并将这些概念与具体的代码实现对应起来。
本节将按照 STAR 法则(Situation-Task-Action-Result)来组织介绍各个核心概念。
1.2.1 知识库 (Knowledge Base)
情境 (Situation): 在传统的 RAG 系统中,文档管理往往杂乱无序,缺乏统一的组织和配置管理。
任务 (Task): 需要一种结构化的方式来组织和管理相关文档,并为它们提供统一的处理流程。
行动 (Action): RAGFlow 引入了“知识库”概念,作为组织和管理数据的基本单位。
结果 (Result):
-
概念定义: 知识库是 RAGFlow 中组织和管理数据的基本单位。它是一个文档的集合,所有文档共享相同的处理流程,包括分块方法、嵌入模型、检索策略等配置。
-
代码关联: 知识库的管理主要由以下模块负责:
# api/apps/kb_app.py - 知识库 API 管理 @manager.route("/datasets", methods=["GET"]) def datasets(): # 获取知识库列表 pass @manager.route("/datasets", methods=["POST"]) def create_dataset(): # 创建新的知识库 pass -
配置管理: 每个知识库的配置信息(如选择的嵌入模型、分块策略)存储在关系型数据库中,并通过
api/db/services/knowledgebase_service.py进行管理。
1.2.2 文本分块 (Chunking)
情境 (Situation): 大型文档无法直接输入到 LLM 中,而简单的切分方法又会破坏语义连贯性。
任务 (Task): 需要将长文档切分成语义完整、大小适中的文本块,以便进行后续的检索和理解。
行动 (Action): RAGFlow 实现了多种智能分块策略,特别是版面感知的分块算法。
结果 (Result):
-
概念定义: 文本分块是将长文档切分成语义完整、大小适中的文本块 (Chunk) 的过程。分块的质量直接影响检索召回的效果。一个好的分块应该既包含足够的上下文,又不过于冗长以至于引入噪音。
-
代码关联: 分块的核心逻辑在
rag/flow/chunker/目录下。主要类结构如下:# rag/flow/chunker/chunker.py - 核心分块类 class Chunker(ProcessBase): component_name = "Chunker" def _general(self, from_upstream): # 通用分块策略 if from_upstream.output_format in ["markdown", "text", "html"]: # 对纯文本进行分块 cks = naive_merge( payload, self._param.chunk_token_size, self._param.delimiter, self._param.overlapped_percent, ) else: # 对结构化数据进行版面感知分块 chunks, images = naive_merge_with_images( sections, section_images,

最低0.47元/天 解锁文章

1946

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



