一个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=" !important;./rag_storage", parser=" !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=" !important;paper.pdf" !important;)result = await rag.aquery(" !important;文档里图表说了什么", mode=" !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+就能跑。
以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~
谢谢你看我的文章,我们,下次再见。
夜雨聆风