乐于分享
好东西不私藏

一个RAG框架,把PDF里的图片表格公式全吃掉了

一个RAG框架,把PDF里的图片表格公式全吃掉了

一个RAG框架,把PDF里的图片表格公式全吃掉了

事情是这样的,最近刷GitHub的时候,看到一个项目让我眼前一亮。

叫RAG-Anything,香港大学HKUDS团队搞的,基于他们之前那个很火的LightRAG做的。

简单说,就是一个All-in-One的多模态RAG框架。

你丢给它一个PDF,里面有文字、有图片、有表格、有公式,它全都能处理。不是只抽文字那种,是真正的多模态理解。

我用了大概一天时间,把文档和代码都过了一遍,有些感受想聊聊。

先说它到底解决了什么问题。

传统RAG的痛点

你知道的,现在绝大多数RAG系统,处理PDF就是OCR加文本提取。

图片?跳过。

表格?变成乱码。

公式?直接丢掉。

结果就是你问它问题,它只能基于文字回答,文档里最有价值的信息全丢了。

这就像你买了一本百科全书,但只读了目录。

RAG-Anything做的事情,是把整个文档当成一个整体来理解。

它是怎么做到的

整个流程分五个阶段,我按自己的理解捋一捋。

第一阶段,文档解析。

它集成了MinerU,一个开源的文档结构提取工具。MinerU会把PDF拆成文本块、图片、表格、公式,每个部分单独处理,但保持它们之间的关联。

除了PDF,还支持Office全家桶,DOC、DOCX、PPT、PPTX、XLS、XLSX,甚至图片和纯文本都行。

第二阶段,内容分类路由。

拆完之后,系统自动判断每块内容是什么类型,然后送到对应的处理器。

文字走NLP管道,图片走视觉模型,表格走结构化分析,公式走LaTeX解析。

这些管道是并发跑的,不是串行的,所以速度不慢。

第三阶段,多模态分析引擎。

这是我觉得最有意思的部分。

图片不是简单跳过,而是调用视觉模型(比如GPT-4o)生成描述。表格不是转成字符串,而是做统计模式识别,理解数据趋势。公式不是丢掉,而是解析成LaTeX,建立和领域知识的映射。

第四阶段,多模态知识图谱。

所有提取出来的实体,不管是文字里的还是图片里的,都建到一个知识图谱里。

文本实体和图片、表格、公式之间自动建立语义连接。

这就是它叫All-in-One的原因,所有模态的信息在一个图谱里关联起来了。

第五阶段,混合检索。

检索的时候,向量搜索加图谱遍历一起上。

不只是关键词匹配,还能通过图谱关系找到间接相关的内容。

而且检索结果会根据内容类型自适应排序,你问的问题如果更偏向图表,图表相关的结果就排前面。

用起来怎么样

说实话,上手门槛不高。

class="language-bash">pip install raganything

一行命令装好。然后配置一下OpenAI的API key,就能用了。

class="language-python">from raganything import RAGAnything, RAGAnythingConfigconfig = RAGAnythingConfig(    working_dir=&quot !important;./rag_storage",    parser=&quot !important;mineru",    enable_image_processing=True,    enable_table_processing=True,    enable_equation_processing=True,)rag = RAGAnything(config=config, llm_model_func=..., vision_model_func=..., embedding_func=...)await rag.process_document_complete(file_path=&quot !important;paper.pdf&quot !important;)result = await rag.aquery(&quot !important;文档里图表说了什么", mode=&quot !important;hybrid")

核心代码就这几行。

它支持三种查询方式:

纯文本查询,就是正常的RAG问答。

VLM增强查询,这个比较有意思,如果检索结果里包含图片,系统会自动把图片和文字上下文一起发给视觉模型,让模型综合分析。比如你问"图表趋势说明了什么",它能真的看到图表再回答。

多模态查询,你可以带着具体的表格数据或公式去问,它会结合文档内容一起分析。

几个我觉得不错的点

第一个,架构设计比较干净。

它是基于LightRAG做的扩展,LightRAG本身就是一个轻量级的RAG框架,RAG-Anything在保留轻量特性的同时加了多模态能力。

不是从零造轮子,而是在成熟基础上扩展,这个思路我挺认可。

第二个,处理器是可插拔的。

你想加一个新的模态处理器,继承一个GenericModalProcessor,实现自己的逻辑就行。插件化架构,扩展性没问题。

第三个,支持直接插入多模态内容。

不是所有场景都需要解析PDF,有时候你手上已经有一堆图片和表格了,直接丢给它处理就行。

这个灵活性在实际工作中很实用。

当然也有需要注意的地方

MinerU需要额外安装,而且首次使用会自动下载模型,网络不好的话可能比较慢。

Office文档处理需要装LibreOffice,这个在服务器上可能需要额外配置。

底层依赖OpenAI兼容的API,不管是用OpenAI还是其他兼容接口,都需要LLM和VLM的支持。

这些不算缺点,但部署的时候确实要考虑。

适合什么场景

我觉得几个方向特别合适。

学术研究,论文里大量图表公式,传统RAG处理不了,这个可以。

金融报告,财报、行业分析报告,表格数据是核心,它能理解表格内容。

技术文档,架构图、流程图、API文档,混合内容多,它处理得了。

企业知识库,各种格式的文档混在一起,一个框架全搞定,不用为每种内容类型配一个工具。

最后说两句

这个项目让我觉得有意思的地方在于,它没有把RAG局限在文字层面。

现实世界的文档本来就是多模态的,一份报告里有文字有图表有公式,这才是常态。

能把整个文档真正吃透,而不是只吃文字部分,这才是RAG该有的样子。

GitHub上已经21.2K多star了,还在快速迭代。

项目地址:github.com/HKUDS/RAG-Anything

基于LightRAG做的,开源协议友好,Python 3.10+就能跑。

以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~

谢谢你看我的文章,我们,下次再见。