RAG-Anything:香港大学开源的全合一多模态文档检索增强生成工具

原创 发布日期:
69

一、RAG-Anything是什么

RAG-Anything是由香港大学数据智能实验室(HKUDS)开源的一站式多模态检索增强生成(RAG)框架,基于LightRAG构建,突破传统文本类RAG系统的技术限制,可无缝处理PDF、Office文档、图片等格式中的文本、图像、表格、数学公式等异构内容,通过端到端的处理流水线、多模态知识图谱构建和模态感知检索技术,为学术研究、企业知识管理、金融分析等场景提供精准的智能问答与信息检索解决方案,支持本地部署和灵活的插件式扩展,是解决复杂多模态文档处理需求的核心工具。

简单来说,RAG-Anything是一款专门为多模态文档设计的AI工具,它将传统RAG的文本检索边界彻底打破,实现了“万物皆可RAG”的核心目标——无论是科研论文中的公式、企业报告里的表格、产品手册中的示意图,还是财务报表中的趋势图表,都能通过同一套处理流水线完成“文档解析→内容理解→知识建模→智能检索→答案生成”的全流程自动化处理。用户无需搭配多个专用工具,只需通过简单的配置和调用,就能对任意多模态文档进行精准的问答与信息检索,其底层基于Python 3.10开发,采用MIT开源协议,支持自由使用、修改和商业分发,同时提供了完善的生态配套和社区支持,成为多模态RAG领域的核心开源解决方案。

RAG-Anything的核心价值在于消除了多模态文档处理的架构碎片化:它将文本、图像、表格、公式等不同类型的内容视为相互关联的知识实体,而非孤立的数据,通过统一的语义空间建模和跨模态关系映射,让大语言模型能够真正“理解”多模态文档中的完整知识,从而生成更准确、更全面、可溯源的答案。截至目前,该项目已在GitHub开源,同时发布了相关技术论文(arXiv:2510.12323),成为学术研究和工业界落地多模态RAG应用的重要基础。

二、功能特色

RAG-Anything之所以能成为多模态RAG领域的标杆性项目,核心在于其围绕“多模态处理”打造的全链路功能体系,既覆盖了基础的文档解析与检索需求,又解决了复杂场景下的异构内容处理难题,具体功能特色可分为七大核心模块,每个模块都针对实际应用中的痛点进行了针对性优化:

1. 端到端多模态处理流水线

这是RAG-Anything最核心的功能特色,实现了从“原始文档输入”到“智能问答输出”的全流程自动化,无需人工干预中间环节。用户只需上传PDF、Word、Excel、图片等格式的文档,系统会自动完成内容提取→类型分类→模态处理→知识建模→检索匹配→答案生成的全部步骤,彻底解决了传统RAG系统需要手动拆分文档、单独处理非文本内容的问题。例如,上传一篇包含实验数据表格、实验装置图片和数学公式的科研论文,系统能一次性解析所有内容,并在用户提问时,结合表格数据、图片语义和公式含义给出完整答案。

2. 全格式通用文档支持

兼容市面上绝大多数主流的文档格式,无需进行格式转换预处理,真正实现“一键上传、无缝处理”。具体支持的格式包括:PDF(扫描版/原生版)、Office系列文档(Word、Excel、PowerPoint)、常见图像格式(BMP、PNG、JPG、TIFF、GIF、WebP)、纯文本文件(TXT、MD)等。同时,系统对不同格式的文档做了针对性的解析优化,例如对Excel表格保留单元格关联关系,对PowerPoint保留幻灯片的层级结构,对扫描版PDF通过OCR技术实现内容提取,最大限度保证原始文档的信息完整性。

3. 专属化多模态内容分析能力

针对不同类型的异构内容,设计了专用的模态处理器,避免“一刀切”的处理方式导致信息丢失,这也是RAG-Anything区别于其他多模态RAG系统的核心优势:

  • 视觉内容分析器:对图像、图表进行语义理解,生成精准的文字描述,解析图像中的空间关系、物体特征和逻辑关联,例如识别流程图的步骤顺序、柱状图的数值趋势;

  • 结构化数据解释器:对表格、Excel数据进行深度分析,提取行/列关联关系、数据趋势和统计特征,支持跨表格的语义依赖分析,例如对比不同年份财务报表的利润数据变化;

  • 数学表达式解析器:实现高精度的公式解析,支持LaTeX格式的集成与转换,能理解公式的数学含义并与文本内容关联,例如结合论文中的公式和文字说明,解答公式中参数的物理意义;

  • 可扩展模态处理器:采用插件式架构,用户可根据业务需求开发自定义的模态处理器,例如针对音频、视频、3D模型的处理模块,实现新模态的快速适配。

4. 多模态知识图谱自动构建

将文档中的多模态内容转化为结构化的知识图谱,这是实现跨模态检索和深度知识理解的关键。系统会自动从文本、图像、表格、公式中提取核心实体(如人物、数据、公式符号、物体名称),并建立实体之间的跨模态关系(如“表格中的数据对应图片中的实验结果”“公式中的参数来自文本中的定义”),同时保留原始文档的层次结构(如章节、小节、页码)。知识图谱的构建让检索不再局限于关键词匹配,而是能够基于语义关系进行关联检索,例如用户提问“某实验的结果与理论公式是否一致”,系统能通过知识图谱关联实验数据表格、公式和结果分析文本,给出精准的对比答案。

5. 灵活的自适应处理模式

提供两种核心处理模式,满足不同场景下的使用需求,兼顾灵活性和处理效率:

  • MinerU解析模式:集成高精度解析平台MinerU,实现多模态内容的结构化提取,适合对文档解析精度要求高的场景,例如科研论文、正式报告的处理;

  • 直接模态注入模式:绕过文档解析环节,直接将外部预解析的内容列表(如文本片段、图像描述、表格数据)注入系统,适合已经完成内容预处理的场景,提升处理效率。

同时,系统支持文件夹级批量处理增量更新,可一次性处理整个目录下的所有文档,并对新增文档进行实时的知识库更新,满足企业级海量文档的处理需求。

6. 模态感知的混合智能检索

突破传统文本检索的限制,实现“向量+图谱”的混合检索,并基于查询类型进行动态的模态感知排序:

  • 向量-图谱融合:将文本、图像等内容转化为语义向量,结合知识图谱的结构关系进行检索,既保证语义匹配的准确性,又能基于实体关系挖掘隐藏的知识;

  • 模态感知排序:根据用户的查询类型,动态调整不同模态内容的检索优先级,例如用户提问包含“图中显示”,则优先返回图像相关的内容;提问包含“数据显示”,则优先返回表格相关的内容;

  • 关系一致性维护:在检索结果中,保证不同模态内容的语义和结构一致性,避免出现“答案与引用的表格数据矛盾”“图像描述与文本说明不符”的情况。

7. 易扩展、易部署的工程化设计

从工程化角度做了大量优化,降低用户的使用和二次开发成本:

  • 插件式架构:采用“四接口约定”(load/encode/retrieve/generate),用户只需继承对应的接口,5分钟即可完成新模态处理器的开发与集成;

  • 主流模型无缝对接:与OpenAI、Llama-2/3、Mistral、Gemini等主流大语言模型(LLM)和视觉语言模型(VLM)无缝兼容,支持本地部署和云端调用;

  • 轻量化部署:基于LightRAG构建,核心依赖包体积小,可在普通服务器甚至个人电脑上部署运行;

  • 完善的容错机制:内置自动重试、错误隔离、进度保存功能,单个文档处理失败不会影响其他文件,且支持从失败点继续处理。

RAG-Anything:香港大学开源的全合一多模态文档检索增强生成工具

三、技术细节

RAG-Anything的技术架构围绕“多模态内容的统一处理与理解”展开,整体分为五大核心阶段,各阶段相互协作,形成完整的多模态RAG处理链路。同时,系统设计了统一语义空间插件式扩展机制,为多模态处理和功能扩展提供技术支撑,具体技术细节如下:

1. 整体技术架构:五大核心处理阶段

RAG-Anything的系统架构采用流水线式设计,分为文档解析、多模态内容理解与处理、多模态分析、多模态知识图谱索引、模态感知检索五个阶段,每个阶段都有明确的功能定位和核心算法,确保多模态内容的高效处理与深度理解:

处理阶段 核心功能 关键技术/组件
文档解析阶段 实现多模态元素的完整识别与提取,输出结构化的内容片段 结构化提取引擎(MinerU+Docling)、自适应内容分解算法、多格式兼容解析器
多模态内容理解与处理 对解析后的内容进行分类与并行处理,保留文档层次结构 自主分类路由机制、并发多流水线架构、文档层次结构维护算法
多模态分析阶段 对不同类型的异构内容进行深度分析,生成可理解的语义表示 视觉内容分析器、结构化数据解释器、数学表达式解析器、可扩展模态处理器
多模态知识图谱索引 将内容转化为结构化语义表示,建立跨模态关系 多模态实体提取算法、跨模态关系映射模型、加权关系评分机制
模态感知检索阶段 根据用户查询实现精准的内容检索与排序,为答案生成提供依据 向量-图谱融合检索算法、模态感知排序模型、关系一致性维护算法

(1)文档解析阶段

这是处理的第一步,核心目标是“从原始文档中精准提取所有模态的内容,并保持其原始结构”。系统集成了MinerUDocling两大高精度解析平台,构建了结构化提取引擎,能够智能识别文档中的文本、图像、表格、公式等元素,并进行自适应分解。例如,对PDF文档,系统会先解析文档的页码、章节、小节等层级结构,再针对每个章节中的内容,分离出文本段落、嵌入式图片、表格和公式;对Excel文档,会保留工作表、单元格、数据格式等结构信息;对图像文件,会通过OCR技术提取其中的文字内容,并结合视觉分析生成语义描述。

同时,该阶段支持多格式兼容处理,通过统一的解析接口,将PDF、Office、图像等不同格式的文档,转化为标准化的结构化内容输出,为后续阶段的处理奠定基础。

(2)多模态内容理解与处理阶段

在解析出结构化内容后,系统会对内容进行分类与路由,将不同类型的内容(文本、图像、表格、公式)发送至对应的优化处理通道,避免不同模态内容的处理相互干扰。例如,文本内容会被发送至文本处理通道,进行分词、语义编码;图像内容会被发送至视觉处理通道,进行特征提取和语义描述生成。

为提升处理效率,系统采用并发多流水线架构,文本与多模态数据可并行处理,同时通过文档层次结构维护算法,保留原始文档的章节、小节、段落等层级关系,以及不同模态内容之间的上下文关联(如“某张图片位于某段文字之后,是对该段文字的补充说明”)。

(3)多模态分析阶段

这是实现多模态内容“深度理解”的核心阶段,系统针对不同类型的异构数据,设计了专用的模态感知处理单元

  • 视觉内容分析器:基于CLIP、VideoMAE等视觉模型,对图像进行特征提取和语义理解,生成精准的文字描述,同时解析图像中的空间关系、物体特征和逻辑关联;

  • 结构化数据解释器:对表格数据进行结构化分析,提取行/列的关联关系、数据趋势和统计特征,支持多表之间的语义依赖分析;

  • 数学表达式解析器:基于LaTeX解析引擎和数学语义理解模型,实现高精度的公式解析,将公式转化为机器可理解的语义表示,并关联文本中的公式定义和参数说明;

  • 可扩展模态处理器:采用插件式架构,用户可根据需求开发自定义的处理单元,例如音频处理器、视频处理器等,实现新模态的快速集成。

(4)多模态知识图谱索引阶段

该阶段的核心目标是“将非结构化的多模态内容转化为结构化的知识表示”,系统通过多模态实体提取算法,从文本、图像、表格、公式中提取核心实体(如人物、数据、公式符号、物体名称),并将这些实体作为知识图谱的节点。随后,通过跨模态关系映射模型,建立实体之间的跨模态关系(如“表格中的数据是图片中实验的结果”“公式中的参数X对应文本中的某一物理量”),并将原始文档的层次结构融入知识图谱中。

同时,系统采用加权关系评分机制,根据实体之间的语义相关性和上下文关联程度,为知识图谱中的关系赋予不同的权重,为后续的检索排序提供依据。最终,知识图谱会被存储到向量数据库中,支持高效的语义检索和图遍历。

(5)模态感知检索阶段

当用户发起查询时,系统会进入检索阶段,核心目标是“从知识图谱和向量数据库中,精准检索出与查询相关的多模态内容”。首先,系统会将用户的查询(文本形式)转化为语义向量,通过向量-图谱融合检索算法,结合语义嵌入匹配和知识图谱的结构关系遍历,实现全面的内容检索。

随后,通过模态感知排序模型,根据查询的类型和语义,动态调整不同模态内容的检索结果优先级,例如查询包含“图”则优先返回图像相关内容,查询包含“数据”则优先返回表格相关内容。最后,通过关系一致性维护算法,对检索结果进行校验,确保不同模态内容的语义和结构一致,避免出现矛盾或冲突的情况,最终将整理后的检索结果传递给大语言模型,用于答案生成。

2. 核心技术创新:统一语义空间与插件式扩展机制

除了流水线式的架构设计,RAG-Anything还有两大核心技术创新,分别解决了“跨模态语义对齐”和“功能扩展”的问题:

(1)统一语义空间:Any2Vec模块

为了解决不同模态内容“语义无法互通”的问题,RAG-Anything设计了Any2Vec模块,这是一个统一的模态编码模块,能够将任意模态的内容映射到共享的语义空间中,实现跨模态的相似度计算和语义匹配。具体来说,Any2Vec模块集成了10+种主流的模态编码器,针对不同类型的内容采用对应的编码方式:

  • 图像/视频帧:采用CLIP、VideoMAE编码器;

  • 音频:采用BEATs、Whisper编码器;

  • 3D点云:采用Uni3D编码器;

  • 时间序列:采用TimesNet编码器;

  • 文本/公式/表格:采用专用的语义编码器。

所有模态的内容经过编码后,都会转化为768/1024维的语义向量,这些向量位于同一语义空间中,因此系统能够直接计算不同模态内容之间的相似度,例如“某段文本描述”与“某张图片”的语义相似度,为跨模态检索提供了技术基础。

(2)插件式扩展机制:四接口约定

为了降低用户的二次开发成本,RAG-Anything采用了插件式架构,并制定了“四接口约定”,所有的功能扩展都可以通过实现这四个接口来完成,无需改动系统的核心代码:

  • load()接口:负责数据的加载与预处理,例如从本地文件、云端存储中加载文档,或对原始内容进行格式转换;

  • encode()接口:负责将内容转化为语义向量,对接Any2Vec模块或自定义的编码器;

  • retrieve()接口:负责检索逻辑的实现,例如自定义检索算法、调整检索参数;

  • generate()接口:负责答案的生成逻辑,对接不同的大语言模型,或自定义生成格式。

用户只需继承这四个接口,实现对应的业务逻辑,即可快速开发出自定义的模态处理器、检索器或生成器,例如开发一个专门处理工业设备图纸的模态处理器,或对接企业内部的私有大模型。

3. 技术栈与依赖说明

RAG-Anything基于Python 3.10开发,核心技术栈和主要依赖如下:

  • 核心框架:LightRAG(轻量化RAG框架,作为系统的基础底座);

  • 解析工具:MinerU、Docling(多模态文档解析)、LibreOffice(Office文档转换)、PIL/Pillow(图像处理);

  • 编码模型:CLIP、BEATs、VideoMAE、Uni3D、TimesNet(多模态编码);

  • 向量数据库:支持主流的向量数据库(如Chroma、Pinecone、Milvus);

  • 大模型对接:OpenAI API、Llama-2/3、Mistral、Gemini(问答生成);

  • 开发工具:ruff(代码格式化)、pre-commit(代码检查)、Dependabot(依赖更新)。

四、应用场景

RAG-Anything的多模态处理能力和端到端的解决方案,使其能够适配学术研究、企业管理、金融分析、教育教学、工业运维等多个领域的场景,尤其适合处理包含复杂异构内容的文档,具体典型应用场景如下:

1. 学术研究场景:科研论文智能分析与问答

科研论文是典型的多模态文档,包含大量的文本、数学公式、实验数据表格、实验装置图片、结果分析图表等内容,传统的文献管理工具仅能实现文本检索,无法快速定位公式、表格中的关键信息。RAG-Anything在该场景下的核心价值体现在:

  • 一键解析科研论文,自动构建包含公式、表格、图片的多模态知识图谱;

  • 支持精准的跨模态问答,例如“某篇论文中实验的样本量是多少?请结合表格数据说明”“该公式的参数含义是什么?对应的实验结果如何?”;

  • 实现跨论文的知识关联检索,例如“检索所有包含某一公式的论文,并对比其实验结果”。

该场景的用户主要是科研人员、研究生,能够大幅提升文献阅读和分析的效率,减少手动查找和整理数据的时间。

2. 企业知识管理场景:企业多模态文档统一检索

企业在运营过程中,会产生大量的多模态文档,例如产品手册、技术文档、培训资料、会议纪要、财务报告等,这些文档分散在不同的系统中,且格式各异,导致知识共享困难。RAG-Anything能够为企业搭建统一的多模态知识检索平台

  • 批量处理企业的历史文档和实时生成的新文档,构建企业级的多模态知识图谱;

  • 支持员工的自然语言提问,快速检索到包含文本、图片、表格的相关知识,例如“某产品的技术参数是多少?请展示对应的产品结构图”“2024年第三季度的销售额是多少?结合表格分析区域分布情况”;

  • 实现跨部门的知识共享,例如研发部门的技术文档、市场部门的产品手册、财务部门的报表数据可以相互关联,为企业决策提供全面的知识支撑。

根据企业部署案例显示,RAG-Anything能将企业文档的检索准确率提升40%,知识获取效率提高3倍。

3. 金融分析场景:财务报告多维度解析

金融机构和企业的财务部门需要处理大量的财务报告,这些报告包含文本描述、财务数据表格、趋势分析图表、审计说明等多模态内容,传统的财务分析工具难以实现数据与文本的深度关联分析。RAG-Anything在该场景下的应用价值包括:

  • 自动提取财务报告中的表格数据,进行结构化分析,识别数据趋势和异常值;

  • 结合文本描述和图表信息,解答财务相关问题,例如“某公司2024年的净利润同比增长了多少?主要受哪些因素影响?”“该财务指标的变化趋势与行业平均水平相比如何?”;

  • 实现合规检查的自动化,例如检索财务报告中的相关条款和数据,验证是否符合监管要求。

某金融机构的部署案例显示,RAG-Anything将风险识别准确率提高了45%,合规检查效率提升了80%。

4. 教育教学场景:教材与课件智能问答

教育领域的教材、课件、教辅资料同样包含大量的多模态内容,例如数学公式、物理实验装置图、化学方程式、历史时间轴表格等。RAG-Anything能够为师生搭建智能学习助手

  • 学生可通过自然语言提问,获取包含公式、图片、表格的详细解答,例如“请解释这个物理公式的含义,并结合实验图说明实验过程”“这个数学定理的证明过程是什么?对应的例题数据是多少?”;

  • 教师可快速检索教材和课件中的内容,辅助备课,例如“检索所有与‘牛顿第一定律’相关的内容,包括文本、实验图和例题”。

5. 工业运维场景:设备文档与故障诊断

工业企业的设备手册、运维报告、故障记录等文档,包含设备结构图、技术参数表格、故障代码说明、维修流程示意图等多模态内容,现场工程师需要快速获取相关知识来解决设备故障。RAG-Anything在该场景下的应用包括:

  • 构建设备多模态知识图谱,整合设备手册、运维报告、故障记录等文档;

  • 现场工程师可通过手机上传设备故障图片或输入故障描述,系统检索相关的维修流程、故障原因和解决方案,例如“该设备的报警代码是什么含义?请结合设备结构图说明故障位置和维修方法”;

  • 实现设备故障的智能诊断,结合历史故障案例和设备参数,生成初步的诊断报告。

RAG-Anything:香港大学开源的全合一多模态文档检索增强生成工具

五、使用方法

RAG-Anything的使用门槛较低,支持本地部署快速体验两种方式,同时提供了丰富的示例代码和配置说明,用户可根据自身需求选择对应的使用方式。以下是详细的使用步骤,包括环境准备、安装部署、快速体验和高级使用:

1. 环境准备

首先需要准备符合要求的运行环境,核心要求如下:

  • 操作系统:支持Windows、Linux、macOS;

  • Python版本:3.10(推荐,兼容3.9+);

  • 硬件要求:普通服务器/个人电脑即可,若处理大量图像或视频,建议配备独立显卡(NVIDIA GPU,显存4G+);

  • 依赖工具:需要安装LibreOffice(用于Office文档转换),可从官网下载对应版本的安装包。

2. 安装部署

RAG-Anything提供了PyPI包安装源码克隆安装两种方式,其中源码克隆安装支持获取最新的开发版本,推荐用于二次开发;PyPI包安装适合快速使用,具体步骤如下:

(1)源码克隆安装(推荐)

# 1. 从GitHub克隆项目源码
git clone https://github.com/HKUDS/RAG-Anything.git

# 2. 进入项目目录
cd RAG-Anything

# 3. 创建虚拟环境(避免依赖冲突)
python -m venv venv

# 4. 激活虚拟环境
# Windows系统
.\venv\Scripts\Activate.ps1
# Linux/macOS系统
source venv/bin/activate

# 5. 安装基础依赖
pip install -e .

# 6. 安装完整扩展依赖(包含所有模态处理能力)
pip install -e '.(all)'

(2)PyPI包安装

# 1. 创建虚拟环境
python -m venv venv

# 2. 激活虚拟环境(步骤同源码安装)
# Windows: .\venv\Scripts\Activate.ps1
# Linux/macOS: source venv/bin/activate

# 3. 安装基础包
pip install raganything

# 4. 安装完整功能包
pip install 'raganything(all)'

(3)安装验证

安装完成后,可通过以下命令验证安装是否成功,重点验证MinerU解析器(核心解析组件)的安装情况:

# 查看MinerU版本
mineru --version

# 验证RAG-Anything与MinerU的兼容性
python -c "from raganything import RAGAnything; rag = RAGAnything(); print('✅ 安装成功' if rag.check_parser_installation() else '❌ 安装失败')"

若输出“✅ 安装成功”,则说明环境配置完成;若出现安装失败,可参考本文“六、常见问题解答”中的相关内容进行排查。

3. 快速体验

为了让用户快速感受RAG-Anything的功能,项目提供了Gradio Demo官方示例代码两种快速体验方式,无需复杂的配置即可实现多模态文档的问答与处理。

(1)启动Gradio Demo(可视化界面)

通过以下命令启动内置的Gradio可视化演示程序,支持上传多模态文档并进行自然语言提问:

# 启动Gradio Demo,指定使用的大模型(以llama3-8b-instruct为例)
python demo/app.py --model_name llama3-8b-instruct

命令执行成功后,会在终端输出本地访问地址(通常为http://localhost:7860),打开浏览器访问该地址,即可进入可视化界面:

  • 上传文档:点击“上传文件”,选择PDF、Word、图片等多模态文档;

  • 发起查询:在输入框中输入自然语言问题,例如“文档中的核心实验数据是什么?”“图中展示的设备结构是什么?”;

  • 查看结果:系统会自动解析文档并生成答案,同时展示答案对应的引用片段(文本、表格、图片描述),支持溯源验证。

(2)运行官方示例代码

项目提供了多个示例代码,覆盖端到端处理、单独模态处理、不同格式文档解析等场景,用户可直接运行示例代码,快速了解系统的使用方式,核心示例如下:

# 1. 端到端多模态文档处理(核心示例)
# 替换path/to/document.pdf为实际的文档路径,YOUR_API_KEY为大模型API密钥
python examples/raganything_example.py path/to/document.pdf --api-key YOUR_API_KEY --parser mineru

# 2. 单独模态处理(仅处理图像/表格/公式)
python examples/modalprocessors_example.py --api-key YOUR_API_KEY

# 3. Office文档解析测试(仅MinerU功能)
python examples/office_document_test.py --file path/to/document.docx

# 4. 图像格式解析测试(仅MinerU功能)
python examples/image_format_test.py --file path/to/image.bmp

注意:运行示例代码需要配置大模型的API密钥,支持OpenAI、硅基流动、智谱AI等主流大模型平台,用户可根据自身情况选择对应的平台并获取API密钥。

4. 高级使用:自定义配置与二次开发

对于有个性化需求的用户,RAG-Anything支持自定义配置二次开发,例如对接私有大模型、开发自定义模态处理器、优化知识图谱构建规则等。

(1)自定义大模型配置

以对接硅基流动平台的大模型为例,可通过以下代码进行配置:

import asyncio
from raganything import RAGAnything, RAGAnythingConfig
from lightrag.llm.openai import openai_complete_if_cache, openai_embed
from lightrag.utils import EmbeddingFunc
import os

async def main():
  # 1. 设置API配置
  api_key = "your_api_key" # 替换为硅基流动的API密钥
  base_url = "https://api.siliconflow.cn/v1" # 硅基流动的基础地址

  # 2. 配置RAG-Anything
  config = RAGAnythingConfig(
    llm_complete_func=lambda prompt: openai_complete_if_cache(
      prompt,
      api_key=api_key,
      base_url=base_url,
      model="llama3-8b-instruct"
    ),
    embed_func=EmbeddingFunc(
      lambda texts: openai_embed(
        texts,
        api_key=api_key,
        base_url=base_url,
        model="text-embedding-ada-002"
      )
    )
  )

  # 3. 初始化RAG-Anything
  rag = RAGAnything(config=config)

  # 4. 处理文档并发起查询
  # 加载文档
  await rag.load_document("path/to/your/document.pdf", parser="mineru")
  # 发起查询
  answer, refs = await rag.query("请总结文档的核心内容,并列出关键数据")
  # 输出结果
  print("答案:", answer)
  print("引用片段:", refs)

if __name__ == "__main__":
  asyncio.run(main())

(2)开发自定义模态处理器

基于系统的插件式架构,用户可开发自定义的模态处理器,例如针对企业业务的专用处理器,核心步骤如下:

from raganything.modalprocessors import GenericModalProcessor

# 定义自定义模态处理器,继承GenericModalProcessor
class BusinessModalProcessor(GenericModalProcessor):
  async def process_multimodal_content(self, modal_content, content_type, file_path, entity_name):
    # 自定义业务处理逻辑,例如分析企业业务文档中的特定内容
    enhanced_description = await self.analyze_business_content(modal_content)
    # 创建业务实体
    entity_info = self.create_business_entity(enhanced_description, entity_name)
    # 生成实体和内容片段
    return await self._create_entity_and_chunk(enhanced_description, entity_info, file_path)

  # 自定义业务分析方法
  async def analyze_business_content(self, modal_content):
    # 实现具体的业务分析逻辑,例如提取企业文档中的客户信息、订单数据等
    return f"【业务增强描述】{modal_content}"

# 使用自定义模态处理器
from raganything import RAGAnything
rag = RAGAnything()
# 注册自定义模态处理器
rag.register_modal_processor("business", BusinessModalProcessor(rag.llm, rag.embed_func))
# 加载并处理企业业务文档
await rag.load_document("path/to/business_document.pdf", parser="mineru")

六、常见问题解答

(1)MinerU解析器安装失败,抛出MineruExecutionError异常

问题原因:LibreOffice配置不正确、网络连接不稳定,或系统缺少必要的依赖库。
解决方案

  1. 手动下载MinerU模型,参考MinerU官方文档配置模型源;

  2. 初始化RAG-Anything时,设置skip_installation_check=True参数,跳过安装检查:

  from raganything import RAGAnything
  rag = RAGAnything(skip_installation_check=True)
  1. 验证LibreOffice的安装情况,执行命令:libreoffice --version,若未安装,从官网下载并安装;

  2. 检查网络连接,确保能够访问PyPI和MinerU的模型仓库。

(2)安装过程中出现依赖包版本冲突

问题原因:系统中已安装的其他Python包与RAG-Anything的依赖包版本不兼容。
解决方案

  1. 严格使用虚拟环境进行安装,避免与系统全局的Python包冲突(推荐方式);

  2. 若已出现冲突,删除现有虚拟环境,重新创建并安装:

  # 删除旧虚拟环境
  rm -rf venv # Linux/macOS
  # 或
  rmdir /s /q venv # Windows

  # 重新创建并安装
  python -m venv venv
  source venv/bin/activate # Linux/macOS
  # .\venv\Scripts\Activate.ps1 # Windows
  pip install -e '.(all)'
  1. 若特定依赖包冲突,可手动指定版本进行安装,例如:pip install requests==2.31.0

(3)处理Office文档时,抛出“PDF conversion failed - no PDF file generated”错误

问题原因:LibreOffice未正确安装、文档文件损坏,或系统磁盘空间不足。
解决方案

  1. 验证LibreOffice的安装和配置,确保其能正常运行;

  2. 检查文档文件是否损坏,尝试用Office软件打开并重新保存;

  3. 清理系统磁盘,确保有足够的空间用于文档转换;

  4. 执行项目提供的Office文档检查脚本,排查问题:

  python examples/office_document_test.py --check-libreoffice --file dummy

(4)图像、表格或公式提取不完整,缺失部分内容

问题原因:未启用对应的模态处理功能,或解析器的配置参数不正确。
解决方案

  1. 初始化RAG-Anything时,明确启用图像、表格、公式的处理功能:

  rag = RAGAnything(
    enable_image_processing=True,
    enable_table_processing=True,
    enable_equation_processing=True
  )
  1. 调整解析器的解析方法,例如将表格解析方法改为OCR模式:

  await rag.load_document("path/to/document.pdf", parser="mineru", parse_method="ocr")
  1. 确保安装了完整的扩展依赖,执行pip install 'raganything(all)'重新安装。

(5)图像格式不支持,抛出“Unsupported image format”错误

问题原因:系统缺少对应的图像处理依赖库,或图像格式为罕见格式。
解决方案

  1. 安装图像处理的专用依赖包:pip install 'raganything(image)'

  2. 将罕见格式的图像转换为常见格式(如PNG、JPG)后再进行处理;

  3. 执行图像检查脚本,验证PIL/Pillow的安装情况:

  python examples/image_format_test.py --check-pillow --file dummy

(6)使用混合检索模式(mode="hybrid")时,检索结果不准确或为空

问题原因:向量数据库配置不正确、知识图谱构建不完整,或检索参数设置不合理。
解决方案

  1. 尝试切换其他检索模式,例如local(本地检索)、global(全局检索)、naive(简单检索):

  answer, refs = await rag.query("你的问题", mode="local")
  1. 检查向量数据库的配置,确保其能正常存储和检索语义向量;

  2. 重新加载文档,确保知识图谱构建完整,可通过rag.knowledge_graph查看知识图谱的实体和关系;

  3. 调整检索的Top-K参数,增加返回的检索结果数量:

  answer, refs = await rag.query("你的问题", top_k=10)

(7)生成的答案缺少引用片段,或引用与答案矛盾

问题原因:关系一致性维护机制未正常生效,或大模型的生成参数设置不合理。
解决方案

  1. 初始化RAG-Anything时,启用关系一致性校验:

  rag = RAGAnything(enable_relation_consistency_check=True)
  1. 调整大模型的生成参数,例如降低温度值(temperature),提高生成的准确性:

  config = RAGAnythingConfig(llm_temperature=0.1)
  rag = RAGAnything(config=config)
  1. 检查检索结果的完整性,确保引用片段包含足够的信息用于答案生成。

(8)处理大量文档时,出现内存不足或资源耗尽的错误

问题原因:并发处理的数量过多,导致系统内存和CPU资源被耗尽。
解决方案

  1. 减少并发处理的数量,在批量处理文档时,设置max_workers参数:

  await rag.process_folder_complete(
    folder_path="./documents",
    output_dir="./output",
    max_workers=2 # 根据系统配置调整,建议2-4
  )
  1. 分批次处理文档,避免一次性加载大量文档到内存中;

  2. 升级系统硬件,增加内存和CPU核心数。

(9)异步任务执行异常,抛出asyncio.TimeoutError错误

问题原因:文档处理时间过长,超出了异步任务的超时时间限制。
解决方案

  1. 增加异步任务的超时时间,在初始化时配置:

  config = RAGAnythingConfig(async_timeout=300) # 超时时间设置为300秒
  rag = RAGAnything(config=config)
  1. 对超大文档进行拆分,分成多个小文档后再进行处理;

  2. 检查网络连接,确保大模型的API调用能够快速响应。

(10)如何查看详细的运行日志,快速定位问题?

解决方案

  1. 在代码中启用DEBUG级别的日志,查看详细的运行信息:

  import logging
  logging.basicConfig(level=logging.DEBUG)
  1. 系统的核心日志会记录在raganything/parser.pyraganything/processor.py文件中,可直接查看这些文件的日志输出;

  2. 结合项目提供的检查脚本,逐步排查问题,例如验证LibreOffice、PIL/Pillow、ReportLab等依赖的安装情况。

七、相关链接

  1. GitHub源码仓库https://github.com/HKUDS/RAG-Anything

  2. PyPI包地址https://pypi.org/project/raganything/

  3. 技术论文地址https://arxiv.org/abs/2510.12323

  4. MinerU介绍https://www.aipuzi.cn/ai-news/mineru.html

八、总结

RAG-Anything是由香港大学数据智能实验室开源的一站式多模态检索增强生成框架,基于LightRAG构建,核心解决了传统文本类RAG系统无法处理图像、表格、公式等异构内容的行业痛点,通过端到端的多模态处理流水线、统一的语义空间建模、多模态知识图谱构建和模态感知检索技术,实现了对PDF、Office文档、图片等多格式多模态文档的无缝处理与精准检索;该项目采用Python开发,遵循MIT开源协议,支持本地部署和插件式扩展,与主流大语言模型和视觉语言模型无缝兼容,同时提供了完善的示例代码、可视化Demo和故障排查方案,降低了用户的使用和二次开发成本;在学术研究、企业知识管理、金融分析、教育教学、工业运维等多个场景中,RAG-Anything都展现出了显著的应用价值,能够大幅提升多模态文档的处理效率和知识检索的准确性,成为多模态RAG领域的核心开源解决方案,为大语言模型在复杂多模态场景下的落地提供了重要的技术支撑。

打赏
THE END
作者头像
97ai
我不是在训练模型,而是在与未来的自己对话。