<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OpenSource on Zata-砸它</title><link>https://www.zata.cc/tags/opensource/</link><description>Recent content in OpenSource on Zata-砸它</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>Example Person</copyright><lastBuildDate>Mon, 15 Jun 2026 17:30:17 +0800</lastBuildDate><atom:link href="https://www.zata.cc/tags/opensource/index.xml" rel="self" type="application/rss+xml"/><item><title>RAGFlow 深度解析：为什么它是最值得关注的 RAG 开源项目</title><link>https://www.zata.cc/p/ragflow-%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AE%83%E6%98%AF%E6%9C%80%E5%80%BC%E5%BE%97%E5%85%B3%E6%B3%A8%E7%9A%84-rag-%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/</link><pubDate>Wed, 25 Mar 2026 16:00:00 +0800</pubDate><guid>https://www.zata.cc/p/ragflow-%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AE%83%E6%98%AF%E6%9C%80%E5%80%BC%E5%BE%97%E5%85%B3%E6%B3%A8%E7%9A%84-rag-%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/</guid><description>&lt;img src="https://www.zata.cc/p/ragflow-%E6%B7%B1%E5%BA%A6%E8%A7%A3%E6%9E%90%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AE%83%E6%98%AF%E6%9C%80%E5%80%BC%E5%BE%97%E5%85%B3%E6%B3%A8%E7%9A%84-rag-%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/images/index.png" alt="Featured image of post RAGFlow 深度解析：为什么它是最值得关注的 RAG 开源项目" />&lt;p>过去两年，RAG 领域涌现了无数框架：LangChain、LlamaIndex、Haystack……它们各有侧重，但解决的核心问题相似——如何让 LLM 接地气。&lt;/p>
&lt;p>但如果你实际做过企业级 RAG 项目，会发现一个被忽视的问题：&lt;strong>文档解析&lt;/strong>。&lt;/p>
&lt;p>大部分框架默认你已经有干净、结构化的文本。现实却是：PDF 扫描件、嵌套表格、数学公式、多栏排版……这些&amp;quot;脏活累活&amp;quot;往往占据项目 60% 以上的时间。&lt;/p>
&lt;p>RAGFlow 的定位很明确：&lt;strong>从文档到答案的全流程解决方案&lt;/strong>，而不是又一个&amp;quot;需要你自己处理文档&amp;quot;的检索框架。&lt;/p>
&lt;p>这篇文章会深入分析 RAGFlow 的设计思路、核心技术和适用场景。&lt;/p>
&lt;h2 id="一ragflow-的差异化定位">一、RAGFlow 的差异化定位
&lt;/h2>&lt;h3 id="现有框架的盲区">现有框架的盲区
&lt;/h3>&lt;p>LangChain 和 LlamaIndex 的设计假设是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">输入：干净的文本 / 简单的 PDF
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">处理：Chunk → Embed → Retrieve → Generate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">输出：答案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>但企业真实场景是：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">输入：扫描件 PDF、带表格的年报、技术手册、合同......
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">预处理：OCR、布局分析、表格识别、公式识别......
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">处理：Chunk → Embed → Retrieve → Generate
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">输出：答案 + 引用
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>预处理阶段的复杂度，往往被框架忽略。&lt;/strong>&lt;/p>
&lt;h3 id="ragflow-的思路">RAGFlow 的思路
&lt;/h3>&lt;p>RAGFlow 的核心定位：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">不只是 RAG 框架，而是&amp;#34;文档理解 + RAG&amp;#34;的一体化方案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>它的技术栈覆盖：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>阶段&lt;/th>
&lt;th>能力&lt;/th>
&lt;th>技术方案&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>文档解析&lt;/td>
&lt;td>OCR、布局分析、表格识别&lt;/td>
&lt;td>DeepDoc（自研）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>文档切分&lt;/td>
&lt;td>8 种切分策略&lt;/td>
&lt;td>按文档类型选择&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>检索&lt;/td>
&lt;td>向量 + 关键词 + Rerank&lt;/td>
&lt;td>混合检索 + RRF 融合&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>生成&lt;/td>
&lt;td>多模型支持&lt;/td>
&lt;td>OpenAI、Qwen、Ollama 等&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>运维&lt;/td>
&lt;td>可视化 UI、API、监控&lt;/td>
&lt;td>企业级特性&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>一句话总结&lt;/strong>：RAGFlow 解决的是&amp;quot;从 PDF 到答案&amp;quot;的完整链路，而不是&amp;quot;从文本到答案&amp;quot;。&lt;/p>
&lt;h2 id="二deepdocragflow-的核心护城河">二、DeepDoc：RAGFlow 的核心护城河
&lt;/h2>&lt;p>DeepDoc 是 RAGFlow 自研的文档理解引擎，也是它区别于其他框架的核心竞争力。&lt;/p>
&lt;h3 id="为什么需要-deepdoc">为什么需要 DeepDoc
&lt;/h3>&lt;p>传统 PDF 解析的问题：&lt;/p>
&lt;p>&lt;strong>问题 1：OCR 质量差&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">原文：错误码 E0028
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">OCR 结果：错误码 E002B（8 被识别成 B）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">用户问：错误码 E0028 是什么意思
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">检索：找不到（因为文档里是 E002B）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>问题 2：布局信息丢失&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">原文（两栏排版）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌──────────────┬──────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ 左栏内容 │ 右栏内容 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ 跨多行... │ 跨多行... │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────┴──────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">普通解析结果：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">左栏内容
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">右栏内容 ← 两栏混在一起，语义被打断
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>问题 3：表格结构破坏&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">原文表格：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌────────┬────────┬────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ 参数 │ 类型 │ 说明 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├────────┼────────┼────────┤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ timeout│ int │ 超时时间│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ retry │ bool │ 是否重试│
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└────────┴────────┴────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">普通解析结果：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">参数 类型 说明 timeout int 超时时间 retry bool 是否重试
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">← 变成一行，结构全丢了
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="deepdoc-的技术方案">DeepDoc 的技术方案
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">DeepDoc Pipeline：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌──────────┐ ┌──────────┐ ┌──────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ Input │───▶│ Layout │───▶│ OCR Engine │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ File │ │ Analysis│ │ (PaddleOCR) │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────┘ └──────────┘ └──────┬───────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ┌──────────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌──────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ Structure Recognition │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Table │ │ Figure │ │ Formula │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ Parser │ │ Parser │ │ Parser │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └──────────┘ └──────────┘ └──────────────┘ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌──────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ Semantic Understanding │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ • 标题识别 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ • 章节分割 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ • 关系提取 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ▼
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌──────────────────────────────────────────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ Markdown / Structured Output │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└──────────────────────────────────────────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>核心技术点&lt;/strong>：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>模块&lt;/th>
&lt;th>技术方案&lt;/th>
&lt;th>解决的问题&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>OCR&lt;/strong>&lt;/td>
&lt;td>PaddleOCR&lt;/td>
&lt;td>高精度文字识别&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>布局分析&lt;/strong>&lt;/td>
&lt;td>YOLO/LayoutLM&lt;/td>
&lt;td>检测文本、表格、图片区域&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>表格识别&lt;/strong>&lt;/td>
&lt;td>Table-Transformer&lt;/td>
&lt;td>还原表格结构&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>公式识别&lt;/strong>&lt;/td>
&lt;td>LaTeX-OCR&lt;/td>
&lt;td>数学公式转 LaTeX&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>图片描述&lt;/strong>&lt;/td>
&lt;td>VLM&lt;/td>
&lt;td>生成图片文字描述&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="表格识别的原理">表格识别的原理
&lt;/h3>&lt;p>表格是最难处理的文档元素之一。DeepDoc 的表格识别流程：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Step 1: 表格检测
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">用目标检测模型定位表格区域
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Step 2: 结构识别
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Table-Transformer 识别：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 行边界
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 列边界
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 单元格合并关系
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Step 3: 内容识别
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">对每个单元格做 OCR
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Step 4: 结构化输出
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">┌────────┬────────┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ A1 │ A2 │ → [{&amp;#34;row&amp;#34;:1,&amp;#34;col&amp;#34;:1,&amp;#34;text&amp;#34;:&amp;#34;A1&amp;#34;}, ...]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├────────┼────────┤
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ B1 │ B2 │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└────────┴────────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>为什么这件事重要&lt;/strong>？&lt;/p>
&lt;p>如果表格结构丢了，用户问&amp;quot;参数 timeout 的类型是什么&amp;quot;，系统找不到答案——因为表格已经变成一团乱码。&lt;/p>
&lt;h3 id="与其他解析方案的对比">与其他解析方案的对比
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>方案&lt;/th>
&lt;th>OCR&lt;/th>
&lt;th>布局分析&lt;/th>
&lt;th>表格识别&lt;/th>
&lt;th>公式识别&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>PyPDF2&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>❌&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>pdfplumber&lt;/td>
&lt;td>❌&lt;/td>
&lt;td>⚠️ 基础&lt;/td>
&lt;td>⚠️ 基础&lt;/td>
&lt;td>❌&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Unstructured&lt;/td>
&lt;td>⚠️ 外部&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>⚠️ 基础&lt;/td>
&lt;td>❌&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>DeepDoc&lt;/strong>&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;td>✅&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>DeepDoc 是目前开源方案中对复杂文档支持最完整的。&lt;/p>
&lt;h2 id="三chunking-策略一种文档一种切法">三、Chunking 策略：一种文档一种切法
&lt;/h2>&lt;p>RAGFlow 提供了 8 种 Chunking 策略，针对不同文档类型：&lt;/p>
&lt;h3 id="为什么需要多种策略">为什么需要多种策略
&lt;/h3>&lt;p>不同类型文档的结构差异很大：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">FAQ 文档：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Q: 问题
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">A: 答案
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">─────────
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">每个 QA 对是独立的语义单元
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">技术手册：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## 安装
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">步骤 1...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">步骤 2...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## 配置
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">参数 1...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">参数 2...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">─────────
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">按章节切分，保留标题上下文
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">法律文档：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">第一条 ...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">第二条 ...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">第三条 ...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">─────────
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">按条款切分，每条有独立法律意义
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>用同一种&amp;quot;固定长度切分&amp;quot;处理所有文档，效果必然不好。&lt;/p>
&lt;h3 id="ragflow-的-8-种策略">RAGFlow 的 8 种策略
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>策略&lt;/th>
&lt;th>适用文档&lt;/th>
&lt;th>切分依据&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>Naive&lt;/strong>&lt;/td>
&lt;td>简单文本&lt;/td>
&lt;td>固定字符数&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Q&amp;amp;A&lt;/strong>&lt;/td>
&lt;td>FAQ 文档&lt;/td>
&lt;td>问题-答案对&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Book&lt;/strong>&lt;/td>
&lt;td>书籍、长文档&lt;/td>
&lt;td>章节层级&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Manual&lt;/strong>&lt;/td>
&lt;td>技术手册&lt;/td>
&lt;td>小节&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Law&lt;/strong>&lt;/td>
&lt;td>法律、合同&lt;/td>
&lt;td>条款&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Paper&lt;/strong>&lt;/td>
&lt;td>学术论文&lt;/td>
&lt;td>摘要、章节&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Table&lt;/strong>&lt;/td>
&lt;td>表格数据&lt;/td>
&lt;td>行/单元格&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Picture&lt;/strong>&lt;/td>
&lt;td>图片&lt;/td>
&lt;td>VLM 描述&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="核心思路保留语义完整性">核心思路：保留语义完整性
&lt;/h3>&lt;p>无论哪种策略，核心原则相同：&lt;strong>一个 chunk 应该能独立回答一个问题&lt;/strong>。&lt;/p>
&lt;p>以 Book Chunking 为例：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">原始文档：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># 第一章 概述
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## 1.1 背景
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文本内容...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## 1.2 目标
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文本内容...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"># 第二章 设计
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">## 2.1 架构
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">文本内容...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">切分结果：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Chunk 1: 【第一章 概述 &amp;gt; 1.1 背景】文本内容...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Chunk 2: 【第一章 概述 &amp;gt; 1.2 目标】文本内容...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Chunk 3: 【第二章 设计 &amp;gt; 2.1 架构】文本内容...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>关键设计：&lt;strong>把父级标题拼到 chunk 前面&lt;/strong>。&lt;/p>
&lt;p>这样做的原因我在 RAG 进阶篇详细讲过：Embedding 只能看到 chunk 内部的文字。如果 chunk 里没有&amp;quot;第一章&amp;quot;、&amp;ldquo;概述&amp;rdquo;、&amp;ldquo;背景&amp;quot;这些关键词，用户问&amp;quot;第一章的背景是什么&amp;quot;时就召不回。&lt;/p>
&lt;h3 id="table-chunking-的特殊性">Table Chunking 的特殊性
&lt;/h3>&lt;p>表格数据的切分需要特殊处理：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">方案 1：行级切分
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">每行一个 chunk，保留表头
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">方案 2：单元格级切分
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">每个单元格一个 chunk，附带行列信息
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RAGFlow 的做法：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 检测表格结构
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 保留表头作为上下文
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 行级切分
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 每个 chunk 包含：表头 + 该行内容
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">示例：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">原始表格：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| 参数 | 类型 | 说明 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">|------|------|------|
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">| timeout | int | 超时时间 |
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">切分后的 chunk：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">【表：API 参数配置】
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">参数: timeout | 类型: int | 说明: 超时时间
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这样用户问&amp;quot;timeout 参数的类型是什么&amp;rdquo;，就能精确召回这一行。&lt;/p>
&lt;h2 id="四检索架构混合检索--rrf-融合">四、检索架构：混合检索 + RRF 融合
&lt;/h2>&lt;p>RAGFlow 的检索架构是标准的混合检索方案：&lt;/p>
&lt;h3 id="整体架构">整体架构
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Query
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├─── 向量检索（Dense）───┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├─── 关键词检索（BM25）──┤──→ RRF 融合 ──→ Rerank ──→ Top-K
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> │ │
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └─── Metadata 过滤 ─────┘
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="rrf-融合算法">RRF 融合算法
&lt;/h3>&lt;p>RRF（Reciprocal Rank Fusion）的核心思想：&lt;strong>不依赖分数，只依赖排名&lt;/strong>。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RRF 公式：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">score(d) = Σ 1 / (k + rank_i(d))
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">其中：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- d：文档
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- rank_i(d)：文档 d 在第 i 路检索中的排名
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- k：平滑参数（通常 60）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>为什么有效&lt;/strong>？&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">问题：向量分数（0.82）和 BM25 分数（5.2）不在同一尺度
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">传统方案：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 分数归一化：复杂，不稳定
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 加权融合：权重难调
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RRF 的做法：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 不管分数多少
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 只看排名
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 排名第 1 → 得分 1/61
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 排名第 2 → 得分 1/62
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 两路都召回的文档，得分更高
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>示例&lt;/strong>：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Query：&amp;#34;错误码 401&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">向量检索：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">#1 Doc_A
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">#2 Doc_B
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">#3 Doc_C
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">BM25 检索：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">#1 Doc_D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">#2 Doc_C ← 两路都有
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">#3 Doc_A ← 两路都有
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RRF 融合：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Doc_C: 1/(60+3) + 1/(60+2) = 0.032 ← 最高
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Doc_A: 1/(60+1) + 1/(60+3) = 0.032
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Doc_B: 1/(60+2) + 0 = 0.016
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Doc_D: 0 + 1/(60+1) = 0.016
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>两路都召回的文档，得分更高，自然排在前面。&lt;/p>
&lt;h3 id="rerank-实现">Rerank 实现
&lt;/h3>&lt;p>RAGFlow 内置 Cross-Encoder Rerank：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">原理：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query + Document → Transformer → Relevance Score
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">为什么比向量检索更准：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 向量检索：Query 和 Document 各自编码，交互少
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- Cross-Encoder：Query 和 Document 拼在一起编码，充分交互
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>支持的 Rerank 模型：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>模型&lt;/th>
&lt;th>特点&lt;/th>
&lt;th>延迟（100 候选）&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>bge-reranker-v2-m3&lt;/td>
&lt;td>多语言，效果好&lt;/td>
&lt;td>~180ms&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>bge-reranker-large&lt;/td>
&lt;td>效果好&lt;/td>
&lt;td>~150ms&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>ms-marco-MiniLM&lt;/td>
&lt;td>轻量，快速&lt;/td>
&lt;td>~45ms&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Rerank 的成本很高，只能对小规模候选做精排。RAGFlow 的默认配置：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">召回：top-50（向量 + BM25）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Rerank：top-50 全部重排
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">输出：top-5
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="五与其他框架的对比">五、与其他框架的对比
&lt;/h2>&lt;h3 id="功能对比">功能对比
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>维度&lt;/th>
&lt;th>RAGFlow&lt;/th>
&lt;th>LangChain&lt;/th>
&lt;th>LlamaIndex&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>文档解析&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐⭐⭐ DeepDoc&lt;/td>
&lt;td>⭐⭐⭐ 基础&lt;/td>
&lt;td>⭐⭐⭐ 基础&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Chunking&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐⭐⭐ 8 种策略&lt;/td>
&lt;td>⭐⭐⭐ 需自己实现&lt;/td>
&lt;td>⭐⭐⭐⭐ 较丰富&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>检索&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐⭐⭐ 混合 + RRF&lt;/td>
&lt;td>⭐⭐⭐ 需组合&lt;/td>
&lt;td>⭐⭐⭐⭐ 较完整&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>可视化 UI&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐⭐⭐ 完整&lt;/td>
&lt;td>⭐⭐ LangSmith&lt;/td>
&lt;td>⭐⭐⭐ LlamaCloud&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>开箱即用&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐⭐⭐ 高&lt;/td>
&lt;td>⭐⭐⭐ 需组装&lt;/td>
&lt;td>⭐⭐⭐⭐ 较高&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>自定义扩展&lt;/strong>&lt;/td>
&lt;td>⭐⭐⭐ 中等&lt;/td>
&lt;td>⭐⭐⭐⭐⭐ 高&lt;/td>
&lt;td>⭐⭐⭐⭐⭐ 高&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="架构理念对比">架构理念对比
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RAGFlow：应用导向
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#34;我要做一个企业知识库&amp;#34; → RAGFlow 提供完整方案
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">特点：一站式，开箱即用
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LangChain：组件导向
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#34;我要组装一个 Agent&amp;#34; → LangChain 提供各种组件
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">特点：灵活，但需要自己组装
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">LlamaIndex：数据导向
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;#34;我要索引和查询数据&amp;#34; → LlamaIndex 提供数据框架
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">特点：数据处理能力强，适合研究
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="代码风格对比">代码风格对比
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># RAGFlow：高层抽象，配置驱动&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">ragflow&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">RAGFlow&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">app&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">RAGFlow&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">dataset&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">app&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create_dataset&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;knowledge&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">dataset&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">add_documents&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./docs&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">chat&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">app&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">create_chat&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">dataset&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">dataset&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">chat&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;What is RAG?&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># LangChain：Chain 组合式&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">langchain.chains&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">RetrievalQA&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">langchain.vectorstores&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Chroma&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">langchain.embeddings&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">OpenAIEmbeddings&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vectorstore&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Chroma&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">from_documents&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">docs&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">OpenAIEmbeddings&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">qa&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">RetrievalQA&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">from_chain_type&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">llm&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">ChatOpenAI&lt;/span>&lt;span class="p">(),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">retriever&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">vectorstore&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">as_retriever&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">qa&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">run&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;What is RAG?&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># LlamaIndex：索引为中心&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">llama_index&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">VectorStoreIndex&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">SimpleDirectoryReader&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">documents&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">SimpleDirectoryReader&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./docs&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">load_data&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">index&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">VectorStoreIndex&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">from_documents&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">documents&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">query_engine&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">index&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">as_query_engine&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">response&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">query_engine&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">query&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;What is RAG?&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="选型建议">选型建议
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>场景&lt;/th>
&lt;th>推荐&lt;/th>
&lt;th>理由&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>企业知识库&lt;/td>
&lt;td>RAGFlow&lt;/td>
&lt;td>开箱即用，DeepDoc 解析复杂文档&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>复杂 Agent 应用&lt;/td>
&lt;td>LangChain&lt;/td>
&lt;td>灵活的 Chain/Tool 组合&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>数据分析研究&lt;/td>
&lt;td>LlamaIndex&lt;/td>
&lt;td>强大的索引策略&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>快速原型&lt;/td>
&lt;td>RAGFlow&lt;/td>
&lt;td>最快落地&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>高度定制化&lt;/td>
&lt;td>LangChain/LlamaIndex&lt;/td>
&lt;td>更底层的控制&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="六生产级特性">六、生产级特性
&lt;/h2>&lt;h3 id="api-设计">API 设计
&lt;/h3>&lt;p>RAGFlow 提供完整的 REST API：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建数据集&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">POST /api/dataset
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">{&lt;/span>&lt;span class="s2">&amp;#34;name&amp;#34;&lt;/span>: &lt;span class="s2">&amp;#34;my_knowledge&amp;#34;&lt;/span>&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 上传文档&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">POST /api/document/upload
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-F &lt;span class="s2">&amp;#34;file=@document.pdf&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">-F &lt;span class="s2">&amp;#34;dataset_id={id}&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 对话&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">POST /api/chat/completion
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;question&amp;#34;&lt;/span>: &lt;span class="s2">&amp;#34;什么是 RAG?&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;dataset_ids&amp;#34;&lt;/span>: &lt;span class="o">[&lt;/span>&lt;span class="s2">&amp;#34;{id}&amp;#34;&lt;/span>&lt;span class="o">]&lt;/span>,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;stream&amp;#34;&lt;/span>: &lt;span class="nb">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="部署方案">部署方案
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">最小部署（Docker Compose）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── ragflow（API 服务）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── milvus（向量库）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── mysql（元数据）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── elasticsearch（可选，全文检索）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">生产部署（Kubernetes）：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Ingress
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── ragflow deployment（多副本）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── milvus cluster
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── mysql primary/replica
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── 监控（Prometheus + Grafana）
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="多租户与权限">多租户与权限
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">租户隔离：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 每个租户独立的数据集
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 数据集级别的访问控制
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- API Key 认证
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">权限模型：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 管理员：全部权限
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 编辑者：上传、解析、编辑
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 查看者：仅查询
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="可观测性">可观测性
&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">指标监控：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 文档处理吞吐量
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 检索延迟（P50/P95/P99）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- LLM 调用耗时
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 向量库查询性能
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">日志追踪：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 请求级 Trace ID
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 结构化日志
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">- 全链路追踪
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="七ragflow-的优势与局限">七、RAGFlow 的优势与局限
&lt;/h2>&lt;h3 id="优势">优势
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>维度&lt;/th>
&lt;th>说明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>DeepDoc&lt;/strong>&lt;/td>
&lt;td>业界最强的开源文档解析能力&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>开箱即用&lt;/strong>&lt;/td>
&lt;td>完整 UI + API，快速落地&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>企业级&lt;/strong>&lt;/td>
&lt;td>多租户、权限、监控完备&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>多策略 Chunking&lt;/strong>&lt;/td>
&lt;td>针对不同文档类型优化&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>混合检索&lt;/strong>&lt;/td>
&lt;td>向量 + BM25 + Rerank 完整支持&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="局限">局限
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>维度&lt;/th>
&lt;th>说明&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>灵活性&lt;/strong>&lt;/td>
&lt;td>不如 LangChain/LlamaIndex 灵活&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Agent 能力&lt;/strong>&lt;/td>
&lt;td>不适合复杂多 Agent 场景&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>定制成本&lt;/strong>&lt;/td>
&lt;td>深度定制需要理解源码&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>学习曲线&lt;/strong>&lt;/td>
&lt;td>概念较多，需要时间熟悉&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="适用场景">适用场景
&lt;/h3>&lt;p>&lt;strong>强烈推荐&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>企业内部知识库&lt;/li>
&lt;li>需要处理复杂文档（PDF、表格）&lt;/li>
&lt;li>追求快速落地&lt;/li>
&lt;li>需要可视化管理和审计&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>谨慎选择&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>复杂 Agent 编排&lt;/li>
&lt;li>需要深度定制检索逻辑&lt;/li>
&lt;li>已有 LangChain/LlamaIndex 生态&lt;/li>
&lt;/ul>
&lt;h2 id="八快速入门">八、快速入门
&lt;/h2>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 克隆项目&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone https://github.com/infiniflow/ragflow.git
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> ragflow
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Docker Compose 启动&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">docker compose up -d
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 访问 Web UI&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">open http://localhost:9380
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建数据集、上传文档、开始对话&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>核心概念：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Dataset（数据集）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── Document（文档）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── Chunk（切片）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── Embedding（向量）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── Chat（对话）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">流程：
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">上传文档 → DeepDoc 解析 → 切分 → 向量化 → 存储
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ↓
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Query → 检索 → Rerank → LLM 生成 → 答案 + 引用
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="九总结">九、总结
&lt;/h2>&lt;p>RAGFlow 不是&amp;quot;又一个 RAG 框架&amp;quot;，而是&lt;strong>从文档到答案的全流程解决方案&lt;/strong>。&lt;/p>
&lt;p>它的核心价值：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">1. DeepDoc：解决被忽视的文档解析问题
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2. 多策略 Chunking：不同文档不同切法
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">3. 混合检索：向量 + BM25 + Rerank
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">4. 开箱即用：UI + API + 部署方案
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>如果你在做企业级 RAG 项目，尤其是需要处理复杂文档的场景，RAGFlow 是目前最值得尝试的开源方案。&lt;/p>
&lt;p>它不一定是灵活性最高的，但可能是落地最快的。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>相关链接&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>GitHub: &lt;a class="link" href="https://github.com/infiniflow/ragflow" target="_blank" rel="noopener"
>https://github.com/infiniflow/ragflow&lt;/a>&lt;/li>
&lt;li>文档: &lt;a class="link" href="https://ragflow.io/docs" target="_blank" rel="noopener"
>https://ragflow.io/docs&lt;/a>&lt;/li>
&lt;li>Demo: &lt;a class="link" href="https://ragflow.io" target="_blank" rel="noopener"
>https://ragflow.io&lt;/a>&lt;/li>
&lt;/ul></description></item></channel></rss>