免费POC, 零成本试错
AI知识库

AI知识库

学习大模型的前沿技术与行业落地应用


收藏

开源RAG又添新军!港大开源多模态RAG神器,多文档格式统一解析、知识图谱索引与混合检索!

发布日期:2025-06-23 07:22:34 浏览次数: 3165
作者:开源星探

微信搜一搜,关注“开源星探”

推荐语

港大多模态RAG神器来袭!突破传统文本局限,实现PDF、Office文档到图像的智能解析与检索。

核心内容:
1. 端到端多模态处理流水线,覆盖文本、图像、表格等复杂内容
2. 独创知识图谱索引技术,实现跨模态语义关联
3. 灵活架构设计,支持自定义内容类型与混合检索机制

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

 

在AI驱动的信息检索领域,传统RAG(检索增强生成)系统通常局限于文本处理,难以应对包含文本、图像、表格和公式的复杂文档。

RAG-Anything 是由香港大学数据智能实验室开发的一款开源的多模态RAG系统,能够提供从文档摄取到智能查询的端到端解决方案。

与传统RAG不同,它通过多模态知识图谱、灵活的解析架构和混合检索机制,提供上下文感知的高精度查询结果,显著提升复杂文档处理能力。

文本、图像、表格、公式等多模态内容全覆盖,提供了真正端到端的一体化处理能力。

核心优势

  • • 端到端多模态流水线:从文档解析到多模态智能查询,提供一体化工作流程。
  • • 多格式文档支持:兼容PDF、Office文档(DOC/DOCX、PPT/PPTX、XLS/XLSX)、图像(JPG、PNG等)和文本文件(TXT、MD)。
  • • 多模态内容分析引擎:针对图像、表格、公式和通用文本内容部署专门的处理器,确保各类内容的精准解析。
  • • 知识图谱索引:自动提取实体和跨模态关系,构建语义连接网络。
  • • 灵活的处理架构:支持MinerU智能解析模式和直接多模态内容插入模式,适配多样化场景。
  • • 跨模态检索机制:实现跨文本和多模态内容的智能检索,提供精准的信息定位和匹配能力。

算法原理与架构

RAG-Anything采用分层架构,通过多阶段流水线扩展传统RAG,处理异构内容。其工作流程包括文档解析、内容分析、知识图谱构建和智能检索。

1、文档解析阶段

目标:从多种格式文档中提取和结构化多模态元素(文本、图像、表格、公式)。

核心组件:

  • • 结构化提取引擎:集成MinerU,实现高精度文档结构识别与内容提取。
  • • 自适应内容分解:智能分离文本、图像、表格和公式,保留语义关联(如图像与说明文字)。
  • • 多格式兼容:支持PDF、Office文档、图像和文本文件,输出标准化多模态内容。

2、多模态内容理解

目标:通过专用流水线并行处理异构内容,确保高效和完整性。

核心组件:

  • • 内容分类与路由:自动识别内容类型并分配到对应处理通道。
  • • 并发多流水线:并行处理文本和多模态内容,最大化吞吐量。
  • • 文档层次提取:保留章节、表格标题等结构关系,维护语义完整性。

3、多模态分析引擎

目标:为不同模态内容部署专用处理器,确保精准解析。

核心组件:

  • • 视觉内容分析器:基于CLIP类视觉模型,生成上下文感知的图像标题,提取空间关系。
  • • 结构化数据解释器:对表格应用统计模式识别,分析趋势和语义依赖。
  • • 数学表达式解析器:支持LaTeX公式解析,与领域知识库映射。
  • • 可扩展模态处理器:插件架构支持自定义内容类型,动态配置流水线。

4、多模态知识图谱索引

目标:将文档内容转化为结构化语义表示,提升检索效率。

核心功能:

  • • 多模态实体提取:将表格标题、图像对象等转换为知识图谱实体,附带语义标注。
  • • 跨模态关系映射:推理文本与多模态元素间的语义连接(如图像与说明)。
  • • 层次结构保持:通过“归属”关系链维护文档结构。
  • • 加权关系评分:基于语义邻近性和上下文重要性分配分数。

5、模态感知检索

目标:实现精准、上下文感知的多模态检索。

核心机制:

  • • 向量-图谱融合:结合向量相似性搜索(FAISS)和图遍历算法,覆盖语义和结构信息。
  • • 模态感知排序:根据查询的模态偏好自适应调整结果排序。
  • • 关系一致性:确保检索结果保持语义和结构连贯性。

快速使用

RAG-Anything 的安装方式非常简单,支持从PyPI安装(推荐)或者源码部署。

1、从PyPI安装(推荐)

pip install raganything

2、从源码安装

git clone https://github.com/HKUDS/RAG-Anything.git
cd RAG-Anything
pip install -e .

然后需要检查MinerU是否安装:

# 验证安装
mineru --version

# 检查是否正确配置
python -c "from raganything import RAGAnything; rag = RAGAnything(); print('✅ MinerU安装正常' if rag.check_mineru_installation() else '❌ MinerU安装有问题')"

模型在首次使用时会自动下载。

Python使用示例

Demo01:端到端文档处理

import asyncio
from raganything import RAGAnything
from lightrag.llm.openai import openai_complete_if_cache, openai_embed

async def main():
    # 初始化RAGAnything
    rag = RAGAnything(
        working_dir="./rag_storage",
        llm_model_func=lambda prompt, system_prompt=None, history_messages=[], **kwargs: openai_complete_if_cache(
            "gpt-4o-mini",
            prompt,
            system_prompt=system_prompt,
            history_messages=history_messages,
            api_key="your-api-key",
            **kwargs,
        ),
        vision_model_func=lambda prompt, system_prompt=None, history_messages=[], image_data=None, **kwargs: openai_complete_if_cache(
            "gpt-4o",
            "",
            system_prompt=None,
            history_messages=[],
            messages=[
                {"role": "system", "content": system_prompt} if system_prompt else None,
                {"role": "user", "content": [
                    {"type": "text", "text": prompt},
                    {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_data}"}}
                ]} if image_data else {"role": "user", "content": prompt}
            ],
            api_key="your-api-key",
            **kwargs,
        ) if image_data else openai_complete_if_cache(
            "gpt-4o-mini",
            prompt,
            system_prompt=system_prompt,
            history_messages=history_messages,
            api_key="your-api-key",
            **kwargs,
        ),
        embedding_func=lambda texts: openai_embed(
            texts,
            model="text-embedding-3-large",
            api_key="your-api-key",
        ),
        embedding_dim=3072,
        max_token_size=8192
    )

    # 处理文档
    await rag.process_document_complete(
        file_path="path/to/your/document.pdf",
        output_dir="./output",
        parse_method="auto"
    )

    # 查询处理后的内容
    result = await rag.query_with_multimodal(
        "图表中显示的主要发现是什么?",
        mode="hybrid"
    )
    print(result)

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

Demo02:直接多模态内容处理

import asyncio
from lightrag import LightRAG
from raganything.modalprocessors import ImageModalProcessor, TableModalProcessor

async def process_multimodal_content():
    # 初始化LightRAG
    rag = LightRAG(
        working_dir="./rag_storage",
        # ... 你的LLM和嵌入配置
    )
    await rag.initialize_storages()

    # 处理图像
    image_processor = ImageModalProcessor(
        lightrag=rag,
        modal_caption_func=your_vision_model_func
    )

    image_content = {
        "img_path": "path/to/image.jpg",
        "img_caption": ["图1:实验结果"],
        "img_footnote": ["数据收集于2024年"]
    }

    description, entity_info = await image_processor.process_multimodal_content(
        modal_content=image_content,
        content_type="image",
        file_path="research_paper.pdf",
        entity_name="实验结果图表"
    )

    # 处理表格
    table_processor = TableModalProcessor(
        lightrag=rag,
        modal_caption_func=your_llm_model_func
    )

    table_content = {
        "table_body": """
        | 方法 | 准确率 | F1分数 |
        |------|--------|--------|
        | RAGAnything | 95.2% | 0.94 |
        | 基准方法 | 87.3% | 0.85 |
        """
,
        "table_caption": ["性能对比"],
        "table_footnote": ["测试数据集结果"]
    }

    description, entity_info = await table_processor.process_multimodal_content(
        modal_content=table_content,
        content_type="table",
        file_path="research_paper.pdf",
        entity_name="性能结果表格"
    )

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

Demo03:批量处理

# 处理多个文档
await rag.process_folder_complete(
    folder_path="./documents",
    output_dir="./output",
    file_extensions=[".pdf", ".docx", ".pptx"],
    recursive=True,
    max_workers=4
)

Demo04:自定义多模态处理器

from raganything.modalprocessors import GenericModalProcessor

class CustomModalProcessor(GenericModalProcessor):
    async def process_multimodal_content(self, modal_content, content_type, file_path, entity_name):
        # 你的自定义处理逻辑
        enhanced_description = await self.analyze_custom_content(modal_content)
        entity_info = self.create_custom_entity(enhanced_description, entity_name)
        return await self._create_entity_and_chunk(enhanced_description, entity_info, file_path)

Demo05:查询选项

# 不同的查询模式
result_hybrid = await rag.query_with_multimodal("你的问题", mode="hybrid")
result_local = await rag.query_with_multimodal("你的问题", mode="local")
result_global = await rag.query_with_multimodal("你的问题", mode="global")

项目目录下也有相应的实际场景演示,examples/ 目录包含完整的使用示例:

raganything_example.py:基于MinerU的端到端文档处理
modalprocessors_example.py:直接多模态内容处理
office_document_test.py:Office文档解析测试(无需API密钥)
image_format_test.py:图像格式解析测试(无需API密钥)
text_format_test.py:文本格式解析测试(无需API密钥)

写在最后

在 RAG 系统百花齐放的今天,RAG-Anything 是少有的“真正做全”的开源RAG系统之一。

从结构化提取到多模态融合,从问答到检索,它不仅支持多种文档格式,而且能智能分析、构建知识图谱、并在上下文语义层面实现真正的信息理解与调用。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅