HKUDS/RAG-Anything
摘要
HKUDS 发布 RAG-Anything:基于 LightRAG 的开源一站式多模态检索增强生成框架。
查看缓存全文
缓存时间: 2026/04/21 14:25
HKUDS/RAG-Anything 源码:https://github.com/HKUDS/RAG-Anything
🚀 RAG-Anything:一站式 RAG 框架 — —
🎉 新闻
- [2025.10]🎯📢 🚀 我们发布了 RAG-Anything 技术报告(http://arxiv.org/abs/2510.12323),立即访问获取最新研究成果。
- [2025.08]🎯📢 🔍 RAG-Anything 新增 VLM 增强查询 模式!当文档包含图片时,系统自动将其送入 VLM 进行多模态分析,融合视觉与文本上下文,洞察更深入。
- [2025.07]🎯📢 RAG-Anything 新增上下文配置模块,可智能整合相关上下文信息,增强多模态内容处理。
- [2025.07]🎯📢 🚀 RAG-Anything 现已支持多模态查询,无缝处理文本、图像、表格、公式,RAG 能力再升级。
- [2025.07]🎯📢 🎉 RAG-Anything GitHub 星标破 1k🌟!感谢大家的鼎力支持与宝贵贡献。
🏗️ 算法与架构
核心算法
RAG-Anything 实现高效多阶段多模态流水线,在智能编排与跨模态理解基础上,将传统 RAG 架构无缝扩展至多元内容模态。
📄 文档解析 → 🧠 内容理解 → 🔍 知识图谱 → 🎯 智能检索
1. 文档解析阶段
系统通过自适应内容分解实现高保真文档抽取,智能切分异构元素并保持上下文关系,通用格式兼容由专用优化解析器完成。
关键组件:
- ⚙️ MinerU 集成:借助 MinerU(https://github.com/opendatalab/MinerU)高保真提取文档结构,跨复杂版式保持语义。
- 🧩 自适应内容分解:自动将文档划分为连贯文本块、视觉元素、结构化表格、数学公式及专用内容,同时保留上下文关系。
- 📁 全格式支持:通过专用优化解析器全面处理 PDF、Office(DOC/DOCX/PPT/PPTX/XLS/XLSX)、图片及新兴格式。
2. 多模态内容理解与处理
系统自动分类并路由内容至最优通道,采用并发流水线并行处理文本与多模态数据,转换过程中保留文档层级与关系。
关键组件:
- 🎯 自主内容分类与路由:自动识别、分类并路由不同内容类型至最优执行通道。
- ⚡ 并发多流水线架构:文本与多模态内容通过专用流水线并发执行,最大化吞吐同时保证内容完整性。
- 🏗️ 文档层级抽取:转换过程中抽取并保留原文档层级及元素间关系。
3. 多模态分析引擎
系统针对异构数据模态部署模态感知处理单元:
专用分析器:
- 🔍 视觉内容分析器:
– 集成视觉模型进行图像分析。
– 基于视觉语义生成上下文相关描述。
– 抽取视觉元素间空间关系与层级结构。 - 📊 结构化数据解释器:
– 系统化解释表格与结构化数据。
– 通过统计模式识别进行数据趋势分析。
– 识别跨表语义关系与依赖。 - 📐 数学表达式解析器:
– 高精度解析复杂数学表达式与公式。
– 原生支持 LaTeX,与学术工作流无缝集成。
– 建立数学方程与领域知识库的概念映射。 - 🔧 可扩展模态处理器:
– 提供可配置框架,支持自定义与新兴内容类型。
– 通过插件架构动态集成新模态处理器。
– 支持运行时配置专用流水线。
4. 多模态知识图谱索引
多模态知识图谱构建模块将文档内容转为结构化语义表示,抽取多模态实体、建立跨模态关系并保留层级组织,应用加权相关性评分以优化知识检索。
核心功能:
- 🔍 多模态实体抽取:将重要多模态元素转为知识图谱实体,含语义注释与元数据保留。
- 🔗 跨模态关系映射:通过自动关系推理算法,建立文本实体与多模态组件间的语义连接与依赖。
- 🏗️ 层级结构保留:通过“belongs_to”关系链保留原文档组织,维护逻辑层级与章节依赖。
- ⚖️ 加权关系评分:基于语义邻近度与上下文重要性,为关系类型分配定量相关性评分。
5. 模态感知检索
混合检索系统融合向量相似度搜索与图遍历算法,实现全面内容检索;采用模态感知排序机制,保持检索元素间关系一致性,确保上下文整合的信息交付。
检索机制:
- 🔀 向量-图谱融合:结合向量相似度与图遍历,利用语义嵌入与结构关系实现全面检索。
- 📊 模态感知排序:根据内容类型相关性自适应评分,按查询模态偏好调整排序。
- 🔗 关系一致性维护:保持检索元素间语义与结构关系,确保信息连贯与上下文完整。
🚀 快速开始
开启你的 AI 之旅
安装
方案 1:PyPI 安装(推荐)
# 基础安装
pip install raganything
# 带扩展格式支持的可选依赖:
pip install 'raganything[all]' # 全部可选特性
pip install 'raganything[image]' # 图像格式转换(BMP、TIFF、GIF、WebP)
pip install 'raganything[text]' # 文本文件处理(TXT、MD)
pip install 'raganything[image,text]' # 多特性组合
方案 2:源码安装
# 安装 uv(如未安装)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 克隆并使用 uv 配置项目
git clone https://github.com/HKUDS/RAG-Anything.git
cd RAG-Anything
# 在虚拟环境安装包及依赖
uv sync
# 若遇到网络超时(尤其 opencv 包):
# UV_HTTP_TIMEOUT=120 uv sync
# 使用 uv 直接运行(推荐)
uv run python examples/raganything_example.py --help
# 安装可选依赖
uv sync --extra image --extra text # 指定扩展
uv sync --all-extras # 全部扩展
可选依赖
[image]– 支持 BMP、TIFF、GIF、WebP 图像格式(需 Pillow)[text]– 支持 TXT、MD 文件(需 ReportLab)[all]– 包含全部 Python 可选依赖
⚠️ Office 文档处理要求:
- 需安装 LibreOffice 以处理 .doc/.docx/.ppt/.pptx/.xls/.xlsx
- 官网下载:https://www.libreoffice.org/download/download/
- Windows:官网下载安装包
- macOS:
brew install --cask libreoffice- Ubuntu/Debian:
sudo apt-get install libreoffice- CentOS/RHEL:
sudo yum install libreoffice
检查 MinerU 安装:
# 验证安装
mineru --version
# 检查配置
python -c "from raganything import RAGAnything; rag = RAGAnything(); print('✅ MinerU 安装正常' if rag.check_parser_installation() else '❌ MinerU 安装异常')"
模型首次使用自动下载。如需手动下载,参考 MinerU 模型源配置(https://github.com/opendatalab/MinerU/blob/master/README.md#22-model-source-configuration)。
使用示例
1. 端到端文档处理
import asyncio
from raganything import RAGAnything, RAGAnythingConfig
from lightrag.llm.openai import openai_complete_if_cache, openai_embed
from lightrag.utils import EmbeddingFunc
async def main():
# 配置 API
api_key = "your-api-key"
base_url = "your-base-url" # 可选
# 创建 RAGAnything 配置
config = RAGAnythingConfig(
working_dir="./rag_storage",
parser="mineru", # 解析器:mineru、docling 或 paddleocr
parse_method="auto", # 解析方式:auto、ocr 或 txt
enable_image_processing=True,
enable_table_processing=True,
enable_equation_processing=True,
)
# 定义 LLM 函数
def llm_model_func(prompt, system_prompt=None, history_messages=[], **kwargs):
return openai_complete_if_cache(
"gpt-4o-mini", prompt, system_prompt=system_prompt,
history_messages=history_messages, api_key=api_key, base_url=base_url, **kwargs
)
# 定义视觉模型函数(用于图像处理)
def vision_model_func(prompt, system_prompt=None, history_messages=[],
image_data=None, messages=None, **kwargs):
if messages: # 多模态 VLM 增强查询
return openai_complete_if_cache(
"gpt-4o", "", system_prompt=None, history_messages=[],
messages=messages, api_key=api_key, base_url=base_url, **kwargs
)
elif image_data: # 单图模式
return 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=api_key, base_url=base_url, **kwargs,
)
else: # 纯文本
return llm_model_func(prompt, system_prompt, history_messages, **kwargs)
# 定义嵌入函数
embedding_func = EmbeddingFunc(
embedding_dim=3072,
max_token_size=8192,
func=lambda texts: openai_embed.func(
texts, model="text-embedding-3-large", api_key=api_key, base_url=base_url
),
)
# 初始化 RAGAnything
rag = RAGAnything(
config=config,
llm_model_func=llm_model_func,
vision_model_func=vision_model_func,
embedding_func=embedding_func,
)
# 处理文档
await rag.process_document_complete(
file_path="path/to/your/document.pdf",
output_dir="./output",
parse_method="auto"
)
# 查询已处理内容
# 纯文本查询
text_result = await rag.aquery(
"图表和表格中的主要发现是什么?", mode="hybrid"
)
print("文本查询结果:", text_result)
# 多模态查询
multimodal_result = await rag.aquery_with_multimodal(
"解释这个公式及其与文档内容的相关性",
multimodal_content=[{
"type": "equation",
"latex": "P(d|q) = \\frac{P(q|d) \\cdot P(d)}{P(q)}",
"equation_caption": "文档相关性概率"
}],
mode="hybrid"
)
print("多模态查询结果:", multimodal_result)
if __name__ == "__main__":
asyncio.run(main())
2. 直接多模态内容处理
import asyncio
from lightrag import LightRAG
from lightrag.llm.openai import openai_complete_if_cache, openai_embed
from lightrag.utils import EmbeddingFunc
from raganything.modalprocessors import ImageModalProcessor, TableModalProcessor
async def process_multimodal_content():
# 配置 API
api_key = "your-api-key"
base_url = "your-base-url" # 可选
# 初始化 LightRAG
rag = LightRAG(
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=api_key, base_url=base_url, **kwargs
),
embedding_func=EmbeddingFunc(
embedding_dim=3072,
max_token_size=8192,
func=lambda texts: openai_embed.func(
texts, model="text-embedding-3-large", api_key=api_key, base_url=base_url
),
),
)
await rag.initialize_storages()
# 处理图像
image_processor = ImageModalProcessor(
lightrag=rag,
modal_caption_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=api_key, base_url=base_url, **kwargs,
) if image_data else openai_complete_if_cache(
"gpt-4o-mini", prompt, system_prompt, history_messages, **kwargs
),
)
相似文章
LightRAG:简单高效的检索增强生成框架
本文介绍了 LightRAG,这是一个开源框架,通过整合图结构来提升检索增强生成(RAG)的上下文感知能力与信息检索效率。
RAG-Anything:全能型 RAG 框架
RAG-Anything 是一个全新的开源框架,通过整合跨模态关系和语义匹配来增强多模态知识检索,在复杂的基准测试中表现优于现有方法。
@DanKornas:传统的以文本为中心的RAG系统无法有效处理现代文档中的图像、表格、公式、图表以及多媒体…
RAG-Anything 是一个基于 LightRAG 构建的多模态文档处理 RAG 系统,它解析文档、构建多模态知识图谱,并使用混合向量-图检索来回答问题。
RAGA:用于自主知识图谱构建和检索增强生成的阅读与图谱构建智能体
RAGA 是一个由大语言模型驱动的自主智能体,通过“阅读-搜索-验证-构建”的认知循环构建知识图谱,并集成混合符号-向量检索以实现检索增强生成,在科学问答数据集上取得了实验性改进。
Disco-RAG: 话语感知检索增强生成
Disco-RAG 提出了一个话语感知的检索增强生成框架,通过块内话语树和块间修辞图整合话语信号,以改进大语言模型的知识综合能力。该方法在问答和摘要生成基准测试中达到最先进的效果,无需微调。