TIP出自:《RAG-Anything: All-in-One RAG Framework》
论文内容
摘要
摘要:检索增强生成已成为扩展大规模语言模型的基本范式,然而,当前的RAG能力与现实世界信息环境之间存在严重的不匹配。现代知识库本身是多模态的,包含文本内容、视觉元素、结构化表格和数学表达式。然而,现有的RAG框架仍然局限于文本内容,这在处理多模态文档时造成了根本性的问题。我们提出了RAG-Anything,一个统一的框架,能够实现跨模态的全面知识检索,涵盖了所有模态。我们的做法重新定义了多模态内容,视其为互联的知识实体,而非孤立的数据类型。该框架引入了双图构建,以捕捉跨模态关系和文本语义的统一表示。我们开发了一种跨模态混合检索技术,结合了结构化知识导航和语义匹配。这使得模型能够对异构内容进行推理,其中相关的证据跨越多种模态。RAG-Anything展示了在挑战性的多模态基准测试中显著的性能提升,尤其是在处理长文档时,其表现超过了传统方法。我们框架的建立为多模态知识检索开辟了新路径,消除了约束当前系统的架构碎片化问题。
技术挑战
- 统一的多模态表示:系统必须无缝集成不同的信息类型,保留它们的独特特征和跨模态关系。这要求采用增强型多模态编码器,能够捕捉内外模态和跨模态的依赖关系,而不会丢失重要的语义信息。
- 结构感知解构:系统必须保持层次化的结构并智能解析复杂布局,以理解这些多模态内容的语义。复杂的文档布局必须通过智能的解析机制来处理,保留视觉内容和结构组件的深层信息。
- 跨模态混合检索:这要求系统能够在多模态信息中有效地推理并检索相关证据,从而增强跨模态内容理解的能力。
贡献
为了解决这些挑战,我们提出了RAG-Anything,一个能够全面处理多模态知识检索和生成的统一框架。
- 该框架采用了一种双图构建策略,巧妙地弥合了跨模态理解和细粒度文本语义之间的差距。与将不同模态强行转化为文本的传统管道不同,RAG-Anything构建了互补知识图谱,保持了视觉元素、结构化数据和文本知识的无缝集成。
- 该系统保持了跨模态的语义完整性,确保了跨模态推理能力的流畅性。我们的跨模态混合检索机制战略性地结合了结构化知识导航和语义相似度匹配。这一架构解决了现有方法的根本性问题,即过于依赖嵌入式检索或关键词匹配。
- RAG-Anything利用显式的图关系来捕捉多跳推理模式,采用向量表示来识别语义相关的内容,同时采用基于模态感知的查询处理系统,以有效地处理跨模态的信息。这个统一的架构消除了当前RAG系统中存在的架构碎片化问题。
1.多模态RAG

这张图对比了 普通 RAG(仅文本) 和 多模态 RAG-Anything(文本 + 图片/表格/公式等) 的流程。两者共同目标是:先检索到与问题相关的资料,再交给大语言模型(LLM)生成更准确的回答。
1. 流程总览(自上而下)
- 用户问题:用户提出问题。
- 检索与知识处理阶段(核心差异点):系统从知识库中检索与问题相关的内容,并进行处理。
- 相关上下文 / 参考资料:得到与问题相关的证据材料(上下文)。
- 大语言模型(LLM):LLM 基于检索到的上下文生成答案。
- 准确的回答:输出最终结果。
2. 左侧:普通 RAG(仅文本)
普通 RAG 的知识来源主要是纯文本资料库,流程通常是:
- 纯文本资料库:文档文字内容(段落、句子等)。
- 简单关键词/语义匹配:在文本中检索相关段落(常见为关键词检索或向量检索)。
- 文本片段提取:把命中的文本片段(chunk)提取出来,作为上下文提供给 LLM。
特点与局限:
- 适合“信息主要以文字描述”为主的场景。
- 当关键知识存在于 图片、表格、公式、流程图 等非文本内容时,容易检索不到或丢信息。
3. 右侧:RAG-Anything(多模态)
RAG-Anything 将知识库扩展到多种模态,并强调“理解 + 结构化”:
- 多模态知识库:不仅包含文本,还包括 图片、表格、公式 等。
- 深度分析与知识图谱构建:对多模态内容进行解析与理解,并进行更高层次的结构化组织。
- 结构化知识表示:将多模态信息转成更利于检索与引用的结构(例如实体关系、表格结构、公式语义、图像描述等)。
优势:
- 能把“在图表/公式/表格里”的关键信息也变成可检索、可引用的证据。
- 更适合论文、技术报告、截图资料、表格密集型文档等场景。
4. 图的核心结论
- 普通 RAG:主要“检索文字段落”供 LLM 参考。
- RAG-Anything:对“文本 + 非文本资料”做理解与结构化后再检索,能覆盖更多证据来源,从而提升回答准确性。
2. 普通RAG与LightRAG核心差异

这张图展示了普通RAG(Standard RAG)与LightRAG之间的核心架构差异:
左侧:普通 RAG(扁平化、碎片化)
| 组件 | 说明 |
|---|---|
| 简单文本切分与向量化 | 将文档机械地切成固定大小的文本块 |
| 向量数据库 (Vector DB) | 独立存储这些孤立的文本块(Chunk1、Chunk2、Chunk3) |
| 关键词/相似度匹配 | 仅通过向量相似度进行检索 |
问题:文本块之间没有关联,容易产生”幻觉”回答,因为 LLM 只能看到零散的片段。
右侧:LightRAG(立体化、网络化)
| 组件 | 说明 |
|---|---|
| 实体关系抽取与图谱构建 | 从文档中识别实体(人名、概念、公式等)及其关系 |
| 深度预处理 | 不仅切分文本,还理解语义和关系 |
| 知识图谱 + 向量数据库 | 实体以网络形式互相连接,保留知识之间的关系 |
| 混合检索 | 同时使用向量检索 + 图谱遍历,获得更全面、有深度的回答 |
优势:通过知识图谱理解”谁和谁有关系”,回答更准确、更有逻辑。
3. 大模型在系统中的具体调用位置

RAG-Anything 本身不包含任何大模型,它通过调用外部提供的函数来使用大模型。大模型主要在以下 3 个核心位置 被调用:
调用位置总览
| 位置 | 模块 | 使用的模型 | 具体功能 |
|---|---|---|---|
| 1. 多模态内容处理 | Modal Processors | VLM/LLM | 图片分析、表格分析、公式解释 |
| 2. 实体与关系提取 | LightRAG 内部 | LLM | 从文本中识别实体、构建关系图谱 |
| 3. 查询与回答 | Query & Answering | LLM/VLM | 生成回答、VLM 增强查询 |
详细说明
位置1:多模态内容处理(Modal Processors)
- 图片分析 (Image Analysis):调用 VLM(如 GPT-4V)理解图片内容
- 表格分析 (Table Analysis):调用 LLM 分析表格结构和数据
- 公式解释 (Equation Explanation):调用 LLM 解释数学公式的含义
位置2:实体与关系提取(LightRAG 内部)
- 实体提取 (Entity Extraction):调用 LLM 识别文本中的实体
- 关系构建 (Relation Building):调用 LLM 识别实体间关系,构建知识图谱
位置3:查询与回答
- 生成回答 (Generate Answer):调用 LLM 基于检索内容生成回答
- VLM 增强查询 (VLM Enhanced Query):调用 VLM 分析检索到的图片内容
全局通用:向量生成(Embedding)
贯穿整个系统的还有 Embedding 模型:
- 将文本/查询输入转换为向量表示
- 存入向量库,支持相似度搜索
4. 多模态RAG详细架构

这张图展示了 RAGAnything 的完整系统架构,采用 Mixin 设计模式,将功能模块化:
顶层:RAGAnything 主类
主类通过继承多个 Mixin 类获得不同功能:
| Mixin | 职责 | 核心方法 |
|---|---|---|
| ProcessorMixin | 文档处理 | parse_document(), process_document_complete() |
| QueryMixin | 查询功能 | aquery(), aquery_with_multimodal(), aquery_vlm_enhanced() |
| BatchMixin | 批量处理 | process_folder_complete() |
中层:Modal Processors(多模态内容处理器)
| 处理器 | 处理对象 | 调用模型 |
|---|---|---|
| Image Processor | 图片 | VLM 分析 |
| Table Processor | 表格 | LLM 分析结构 |
| Equation Processor | 数学公式 | LLM 解释含义 |
| Generic Processor | 其他内容 | - |
中层:Document Parsers(文档解析器)
| 解析器 | 擅长格式 | 特点 |
|---|---|---|
| MineruParser | 支持 OCR、图片解析 | |
| DoclingParser | Office、HTML | 直接支持多格式 |
底层:LightRAG(核心框架)
| 组件 | 作用 |
|---|---|
| 向量数据库 | 存储文本向量 |
| 知识图谱 | 存储实体和关系 |
| 缓存系统 | 缓存 LLM 响应 |
5. 项目整体结构

这张图展示了 RAG-Anything-main/ 项目的目录结构和文件重要性:
核心源码目录:raganything/
| 文件 | 重要性 | 说明 |
|---|---|---|
raganything.py | ⭐⭐⭐ | 主入口类,必须理解,是核心入口 |
modalprocessors.py | ⭐⭐⭐ | 多模态处理器,必须理解,多模态的核心 |
processor.py | ⭐⭐ | 文档处理逻辑 |
query.py | ⭐⭐ | 查询功能 |
config.py | ⭐ | 配置管理 |
parser.py | ⭐ | 文档解析 |
utils.py | - | 工具函数,需要时查阅 |
其他重要目录
| 目录 | 内容 |
|---|---|
| examples/ | 使用示例(新手必看) |
| docs/ | 文档目录 |
6. RAG-Anything核心处理系统

这张图展示了从输入文档到智能问答响应的完整数据处理流程:
输入端:多模态源文档
支持的文档格式:
- PDF 文件
- Word 文档
- PPT 演示文稿
- 图片文件
核心处理阶段
多模态源文档 │ ▼┌─────────────────┐│ 多模态解析与提取 ││ ││ 分离出: ││ • 文本内容 ││ • 图像/图表 ││ • 表格数据 ││ • 数学公式 │└────────┬────────┘ │ ▼┌─────────────────────────────────────┐│ 核心概念处理 ││ ││ ┌──────────────────────────────┐ ││ │ 文本分块 (Chunking) │ ││ │ 将长文档切成便于处理的小段落 │ ││ └──────────────────────────────┘ ││ ││ ┌──────────────────────────────┐ ││ │ 向量化 (Embedding) │ ││ │ 文字 → [0.12, 0.45, ...] │ ││ │ 转换成计算机可理解的数字 │ ││ └──────────────────────────────┘ ││ ││ ┌──────────────────────────────┐ ││ │ 实体与关系抽取 │ ││ │ 实体A ─关系→ 实体B │ ││ │ 识别文档中的重要概念及其关联 │ ││ └──────────────────────────────┘ │└─────────────────────────────────────┘知识库构建
处理后的数据存入两个核心存储:
| 存储类型 | 内容 | 用途 |
|---|---|---|
| 向量数据库 | 文本向量 | 语义相似度检索 |
| 知识图谱 | 实体和关系 | 结构化知识推理 |
查询响应流程
当用户提问时:
- 检索模块:从向量库和知识图谱中检索相关信息
- 生成模块:调用大语言模型(LLM)/视觉语言模型(VLM)
- 智能问答响应:输出准确的回答
7. RAG-Anything与LightRAG关系

这张图清晰地展示了 RAG-Anything 与其核心底层框架 LightRAG 之间的关系:
核心底层框架:LightRAG
LightRAG 由香港大学(HKU)开发,提供以下核心能力:
| 功能 | 说明 |
|---|---|
| 🗄️ 向量数据库 | 存储和检索文本向量 |
| 🕸️ 知识图谱 | 存储实体和关系 |
| 🔍 实体提取 | 从文本中识别实体 |
| 🔗 关系构建 | 识别实体之间的关系 |
| 🔀 混合检索 | 向量检索 + 图谱检索 |
| 💬 查询生成 | 调用 LLM 生成回答 |
RAG-Anything 增加的能力
在 LightRAG 基础上,RAG-Anything 扩展了以下功能:
| 功能 | 说明 |
|---|---|
| 🖼️ 多模态处理 | 图片、表格、公式的理解与处理 |
| 📄 文档解析 | PDF、Office 等格式解析 |
| 👁️ VLM 集成 | 视觉语言模型集成,实现视觉理解 |
| 📁 批量处理 | 支持同时处理多个文档 |
类比理解
如果把 RAG-Anything 比作一辆汽车,那么 LightRAG 就是发动机。
- LightRAG 提供核心的”动力系统”(知识图谱 + 向量检索)
- RAG-Anything 在此基础上增加了”车身”(多模态处理)、“仪表盘”(文档解析)、“导航系统”(VLM 集成)等功能