每日一个开源项目(第149篇):RAG-Anything - 把图片、表格、公式当成一等公民的多模态 RAG 框架

引言

"标准 RAG 系统把文档里的一切都当成文本来处理,但表格不是文本,公式不是文本,图片更不是文本。"

这是"每日一个开源项目"系列的第149篇文章 。今天的主角是 RAG-Anything------香港大学数据科学实验室(HKUDS)开源的全模态 RAG 框架,LightRAG 的多模态扩展版本。

一篇金融报告的 PDF,里面有文字、数据表格、折线图、数学公式。你把它丢进标准 RAG 系统,问"2023 年第三季度营收增长了多少":

  • 表格被解析成乱七八糟的文本,行列关系丢失
  • 图表完全被忽略(text-only parser 跳过图片)
  • 公式变成 LaTeX 源码字符串,含义不明

你得到的回答质量,和把整个文档扔给 LLM 相比好不到哪里去。

RAG-Anything 的答案:给每种模态专门的结构化表示。表格变成行/列/单元格节点构成的子图,图片由视觉语言模型分析后变成带描述的实体,公式保留语义节点。所有模态融合进统一的知识图谱,检索时跨模态联合查询。

你将学到什么

  • 为什么"把表格转成文本"会损失关键信息
  • 双图融合架构:跨模态知识图谱 + 文本知识图谱如何构建和合并
  • 5 阶段处理流水线的每个环节
  • 三种查询模式:纯文本 / VLM 增强 / 多模态
  • DocBench 和 MMLongBench 的基准测试数据
  • 与 MMGraphRAG、LightRAG 的对比

前置知识

  • 了解 RAG 的基本概念
  • 了解知识图谱的基本概念(节点、边)
  • Python 基础

项目背景

项目简介

RAG-Anything 是一个全模态 RAG 框架,基于 LightRAG 构建,把文本、图像、表格、公式作为知识图谱的一等实体(first-class entities)来处理,而不是把所有内容都降级为纯文本。

2026 年 6 月,LightRAG 将 RAG-Anything 原生集成进主项目,成为 LightRAG 多模态能力的官方实现。

作者/团队介绍

  • 团队: 香港大学数据科学实验室(HKUDS)
  • 作者: Zirui Guo、Xubin Ren、Lingrui Xu、Jiahao Zhang、Chao Huang
  • arXiv: 2510.12323
  • License: MIT
  • PyPI : raganything

项目数据

  • ⭐ GitHub Stars: 21,900+
  • 🍴 Forks: 2,500+
  • 📄 License: MIT

核心问题:为什么"全部转文本"不够用

先把问题说清楚。

表格的结构信息在转文本时丢失

yaml 复制代码
原始表格:
       2021    2022    2023
收入   120亿   145亿   168亿
利润    18亿    22亿    31亿
增长率  15%     20.8%   42.3%

转成文本后(典型 text parser 的输出):
"收入 120亿 145亿 168亿 利润 18亿 22亿 31亿 增长率 15% 20.8% 42.3%"

行列关系全部丢失。问"2022 年的利润增长率是多少",系统可能把"22 亿"和"42.3%"联系在一起(都在 2022 和 2023 的数据里),产生错误答案。

图表对纯文本 parser 不可见

大多数文本提取工具直接跳过 PDF 里的图片和图表。这些内容往往包含文档最重要的洞察(趋势图、对比图、流程图),却完全从 RAG 系统的视野里消失了。

公式失去语义

csharp 复制代码
LaTeX 源码:$\frac{\partial L}{\partial w} = -\frac{1}{N}\sum_{i=1}^{N} x_i(y_i - \sigma(w^Tx_i))$

这是 logistic regression 的梯度公式。
直接向量化这段 LaTeX 字符串,和"梯度下降"、"参数更新"没有语义关联。

系统架构:5 阶段流水线

yaml 复制代码
文档(PDF/DOCX/PPTX/图片...)
        ↓
Stage 1: 文档解析(MinerU / Docling / PaddleOCR)
        分解为文本块 + 图片 + 表格 + 公式 + 元素列表
        ↓
Stage 2: 内容路由
        按模态类型分发到对应处理器
        ↓
Stage 3: 多模态分析
        ├── 图像处理器 → VLM 生成描述 + 提取实体
        ├── 表格处理器 → 行/列/单元格结构化节点
        ├── 公式处理器 → 符号节点 + 语义描述
        └── 文本处理器 → 标准 NER + 关系提取
        ↓
Stage 4: 知识图谱索引(双图融合)
        ├── 跨模态知识图谱(非文本元素为锚节点)
        ├── 文本知识图谱(LightRAG 标准图)
        └── 实体名对齐 → 融合为统一图 G=(V,E)
        ↓
Stage 5: 混合检索 + 生成
        ├── 结构导航(图遍历 + 关键词匹配)
        ├── 语义相似度(向量检索,跨模态嵌入)
        └── VLM 增强生成(检索到图片时自动传给视觉模型)

双图融合架构

这是 RAG-Anything 最核心的设计。

跨模态知识图谱

每个非文本元素(图像、表格、公式)变成图谱中的锚节点:

表格处理

less 复制代码
原始表格(收入/利润/年份)
        ↓ 构建子图
    [表格_收入利润对比]
         ├──[行: 收入]──[单元格: 120亿]──[列: 2021]
         ├──[行: 收入]──[单元格: 145亿]──[列: 2022]
         ├──[行: 利润]──[单元格: 18亿]──[列: 2021]
         └── ...
    边类型: row-of, column-of, header-applies-to

查询"2022 年利润"时,图谱可以精确导航到 行:利润 + 列:2022 的交叉节点,而不是在一串数字里猜。

图像处理

css 复制代码
图片(一张销售趋势折线图)
        ↓ VLM 分析
    [图片实体: 销售趋势图_2021-2023]
        ├── 描述:显示 2021-2023 年销售额的上升趋势
        ├── [面板节点: 主图区]──[轴节点: X轴-年份]
        ├── [轴节点: Y轴-金额(亿)]
        └── [标注节点: 2023年增幅42.3%]

图像的内容变成可检索的结构化节点,不再是黑盒。

公式处理

scss 复制代码
LaTeX 公式
        ↓ 语义分析
    [公式实体: 逻辑回归梯度]
        ├── 符号节点:∂L, ∂w, σ(·), x_i, y_i
        ├── 语义描述:logistic regression 参数梯度计算公式
        └── 关联关系:belongs_to → [算法: 逻辑回归]

文本知识图谱

对文档的文本部分,用标准的 LightRAG 方式做 NER 和关系提取。

融合

两张图通过实体名对齐合并:如果跨模态图谱的图像实体"销售趋势图"和文本图谱的"销售数据分析"指向同一个概念,它们通过实体名比对被连接在一起。


快速开始

安装

bash 复制代码
pip install raganything          # 基础版
pip install 'raganything[all]'   # 包含所有可选功能

完整初始化

python 复制代码
from raganything import RAGAnything, RAGAnythingConfig
import asyncio

# 配置
config = RAGAnythingConfig(
    working_dir="./rag_storage",
    parser="mineru",           # mineru / docling / paddleocr
    enable_image_processing=True,
    enable_table_processing=True,
    enable_equation_processing=True,
)

# LLM 和 Embedding 函数(OpenAI 兼容 API)
async def llm_func(prompt, ...): ...
async def vision_func(prompt, image_data, ...): ...  # GPT-4o 或类似
async def embedding_func(texts): ...

rag = RAGAnything(
    config=config,
    llm_model_func=llm_func,
    vision_model_func=vision_func,
    embedding_func=embedding_func,
)

# 处理文档
await rag.process_document_complete(
    file_path="annual_report.pdf",
    output_dir="./output"
)

# 查询
result = await rag.aquery(
    "2023 年第三季度的营收增长率是多少?",
    mode="hybrid"   # hybrid / local / global
)
print(result)

三种查询模式

纯文本模式(fast,走 LightRAG 标准流程):

python 复制代码
result = await rag.aquery("公司的主要竞争优势是什么?", mode="local")

VLM 增强模式(检索到图片时自动传给视觉模型):

python 复制代码
result = await rag.aquery("这张架构图说明了什么?", mode="hybrid")
# 当检索结果包含图片时,图片自动编码传给 vision_model_func
# 回答基于实际图片内容,不只是图片描述

多模态查询(直接注入特定内容类型):

python 复制代码
result = await rag.aquery(
    "分析这个表格里的趋势",
    mode="hybrid",
    content_type_filter=["table"]  # 只检索表格内容
)

直接注入预解析内容

跳过内置 parser,使用自己已经解析好的内容:

python 复制代码
content_list = [
    {"content_type": "text", "content": "公司概况..."},
    {"content_type": "table", "content": table_data, "caption": "财务数据"},
    {"content_type": "image", "content": image_bytes, "caption": "产品架构图"},
]
await rag.ainsert_content_list(content_list)

基准测试结果

论文在两个长文档 QA 基准上评测:

DocBench(229 篇文档,平均 66 页):

系统 准确率
RAG-Anything 63.4%
MMGraphRAG 61.0%
LightRAG 58.4%
GPT-4o-mini(直接输入) 51.2%

MMLongBench(135 篇文档,平均 47.5 页):

系统 准确率
RAG-Anything 42.8%
LightRAG 38.9%
MMGraphRAG 37.7%
GPT-4o-mini(直接输入) 33.5%

100 页以上长文档的表现差异更大:RAG-Anything ~68% vs MMGraphRAG ~55%,超过 13 个百分点。文档越长,结构化表示的优势越明显------因为纯文本越长,"在噪声里找结构性信息"的难度越高。

消融实验关键结果

  • 去掉图谱构建(只用 chunk 检索):63.4% → 60.0%
  • 去掉重排序器:只损失约 1 个百分点
  • 结论:性能提升主要来自图谱架构本身,而非重排序技巧

支持的解析器

解析器 最适合 特点
MinerU PDF + 复杂排版 支持 GPU 加速,OCR 能力强
Docling Office 文档(DOCX/PPTX/XLSX) 结构保留好,支持 HTML
PaddleOCR 图像密集型 PDF 擅长中文 OCR

Office 格式(.doc/.ppt/.xls)需要 LibreOffice 转换:

bash 复制代码
sudo apt-get install libreoffice

项目地址与资源


总结

RAG-Anything 解决的问题在实际企业文档处理中非常常见:合同、财报、学术论文、技术手册------这些文档里的核心信息往往就藏在表格和图表里,而不是纯文本段落里。把这些内容压缩成文本,然后说"RAG 处理文档",更像是在处理文档的影子。

双图融合架构(跨模态图谱 + 文本图谱合并)是合理的技术路径:用结构化节点表示表格的行列关系,用 VLM 把图片转成可检索的语义实体,用符号节点保留公式的语义。消融实验的结果进一步验证了图谱才是核心,不是检索后处理的技巧。

2026 年 6 月 LightRAG 把它原生集成进主项目,说明这套设计已经得到上游认可。对于需要处理包含图表、表格、公式的复杂文档的 RAG 系统,RAG-Anything 是目前开源生态里最完整的解决方案之一。


探索 PrimeSkills ------ 精选 AI Agent 与技能的市场,每一个都经过真实企业工作流验证,去掉浮夸,留下真正有用的。

欢迎访问我的个人主页,发现更多有价值的见解和有趣的产品。

相关推荐
米小虾1 小时前
AI Agent 安全实战指南:当智能体开始"不听话",开发者该如何应对?
人工智能·安全·agent
IT_陈寒3 小时前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
阿里云大数据AI技术5 小时前
构建高转化海外电商搜索:阿里云OpenSearch行业算法版的全链路智能优化策略实战
人工智能·搜索引擎
Awu12275 小时前
⚡从零开发 Agent CLI(五)实现一个可治理、可扩展的工具系统
前端·人工智能·claude
字节跳动视频云技术团队5 小时前
让 Agent 成为音视频工作台:AI MediaKit CLI + Skill 发布
人工智能·音视频开发
魏祖潇5 小时前
framework 整合实战——DDD/TDD/SDD 三件套在 framework 仓的真实落地
人工智能·后端
Token炼金师6 小时前
去噪扩散:从随机噪声到高保真图像的数学之路
人工智能·aigc
这个DBA有点耶6 小时前
AI写的SQL跑崩了生产库,这锅谁背?
数据库·人工智能·程序员