
在 RAG(检索增强生成)领域,HKUDS 团队一直是重要的开源贡献者。继 LightRAG 之后,他们又带来了一个重磅项目——RAG-Anything。
如果说 LightRAG 解决的是"文本知识库"的问题,那么 RAG-Anything 解决的是"一切文档"的知识库问题——不仅是文本,还包括图片、表格、公式、图表等非结构化多模态内容。
本文所有技术细节均来自 RAG-Anything 官方 GitHub 仓库(https://github.com/HKUDS/RAG-Anything)及技术报告(arXiv:2510.12323)。
RAG-Anything 的官方定位是 All-in-One Multimodal Document Processing RAG system(一站式多模态文档处理 RAG 系统),构建于 LightRAG 之上。项目由香港大学数据科学实验室(HKUDS)的 Zirui Guo 主导开发,采用 MIT 开源协议。
现代企业文档中充斥着多模态内容——文本、图像、表格、公式、图表和多媒体元素,传统的纯文本 RAG 系统无法有效处理这些内容。RAG-Anything 要解决的就是这个核心痛点:一个统一框架处理所有文档类型中的所有内容模态。
时间节点 | 里程碑 |
|---|---|
2025.06 | 项目初始发布 |
2025.07 | GitHub 1K ⭐ Stars |
2025.07 | 支持多模态查询,无缝处理文本、图像、表格和公式 |
2025.08 | VLM-Enhanced Query 模式,整合视觉语言模型实现深度多模态分析 |
2025.10 | 发布技术报告 arXiv:2510.12323 |
2026.06 | LightRAG 通过原生集成 RAG-Anything 实现多模态 RAG |
RAG-Anything 实现了真正的"万物皆可解析",支持的文件类型覆盖了日常办公和科研场景的绝大部分需求:
来源:RAG-Anything README.md - “Universal Format Support” 章节
文件类型 | 格式 | 说明 |
|---|---|---|
高保真结构提取 | ||
Word 文档 | .doc / .docx | 需安装 LibreOffice |
PowerPoint | .ppt / .pptx | 需安装 LibreOffice |
Excel 表格 | .xls / .xlsx | 需安装 LibreOffice |
图片 | .png, .jpg, .bmp, .tiff, .gif, .webp | 需安装 [image] 可选依赖 |
文本文件 | .txt, .md | 需安装 [text] 可选依赖 |
解析引擎集成了 MinerU(由 OpenDataLab 开发的高保真文档结构提取工具),能够自动将文档分解为文本块、视觉元素、结构化表格和数学公式,同时保持上下文关联关系。
想象一个渗透测试报告场景。这份 PDF 报告包含:
传统 RAG 系统只能读取其中的文字部分,而截图、拓扑图、表格中的数据全部被忽略。
据行业估算,企业文档中 70% 以上的信息不在纯文本中——它们存在于图片、图表、表格、公式等非文本载体中。
RAG-Anything 的架构通过 5 个阶段解决了这一问题:
这意味着一份渗透测试报告中的网络拓扑图截图会被视觉分析器识别,CVSS 评分表会被结构化数据解释器解析,命令输出会被作为代码块处理——所有信息最终汇聚到一个统一的知识图谱中。
维度 | LangChain | LlamaIndex | GraphRAG | RAG-Anything |
|---|---|---|---|---|
多模态支持 | ❌ 需拼接大量组件 | ⚠️ 能力有限 | ❌ 文本为主 | ✅ 原生支持 |
图像解析 | 需外接工具 | 有限支持 | ❌ | ✅ 专用视觉分析器 |
表格理解 | 需外接工具 | ⚠️ 基础支持 | ❌ | ✅ 结构化数据解释器 |
公式解析 | ❌ | ❌ | ❌ | ✅ 原生 LaTeX 支持 |
知识图谱 | 无 | 无 | ✅ 但成本高 | ✅ 多模态知识图谱 |
配置复杂度 | 高 | 中 | 极高 | 低(开箱即用) |
成本 | 中 | 中 | 极高(需大量 Token) | 可控 |
注:以上对比基于各项目在 2025-2026 年间的公开文档和社区反馈。
RAG-Anything 最大的差异化在于其 All-in-One 的设计理念:
在体验 RAG-Anything 之后,我认为它是目前最接近"企业级多模态知识库"的开源方案。
# 基础安装
pip install raganything
# 全功能安装
pip install 'raganything[all]'来源:RAG-Anything README.md - “Installation” 章节
需要注意:处理 Office 文档需要额外安装 LibreOffice(免费开源),模型在首次使用时自动下载。
RAG-Anything 的 5 阶段流水线设计值得深入理解:
以下代码来自 RAG-Anything 官方示例文件 examples/raganything_example.py,展示了完整的文档处理与多模态查询流程:
import asyncio
from functools import partial
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:
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=partial(
openai_embed.func,
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="your-document.pdf",
output_dir="./output",
parse_method="auto"
)
# 文本查询
result = await rag.aquery("文档的主要内容是什么?", mode="hybrid")
print(f"Answer: {result}")
# 多模态查询 - 结合表格数据进行检索
multimodal_result = await rag.aquery_with_multimodal(
"请分析这份性能数据并与文档中的类似结果对比",
multimodal_content=[{
"type": "table",
"table_data": """Method,Accuracy,Processing_Time
RAGAnything,95.2%,120ms
Traditional_RAG,87.3%,180ms
Baseline,82.1%,200ms""",
"table_caption": "性能对比结果",
}],
mode="hybrid",
)
print(f"Answer: {multimodal_result}")
# 多模态查询 - 结合数学公式
equation_result = await rag.aquery_with_multimodal(
"解释这个公式并与文档中的相关概念关联",
multimodal_content=[{
"type": "equation",
"latex": r"F1 = 2 \cdot \frac{precision \cdot recall}{precision + recall}",
"equation_caption": "F1-Score 计算公式",
}],
mode="hybrid",
)
print(f"Answer: {equation_result}")
if __name__ == "__main__":
asyncio.run(main())代码来源:https://github.com/HKUDS/RAG-Anything/blob/main/examples/raganything_example.py,有删减和注释调整
aquery() 执行纯文本查询,aquery_with_multimodal() 支持注入表格/公式等多模态内容进行联合检索回顾全文,我们讨论了以下核心要点:
一句话总结:RAG-Anything 让 “RAG” 不再局限于文字——它是通往"AI 真正理解你的所有文档"之路上的关键一步。
—
