RAG-Anything 是一个基于 LightRAG 构建的全面的一体化多模态文档处理 RAG 系统。传统的问答系统(RAG)大多只能处理纯文本内容,但我们日常接触的文档,比如PDF、Word文档或演示文稿,往往包含着文字、图片、表格、公式等多种类型的内容。如果只提取文字,就会丢失很多关键信息。RAG-Anything解决了这个问题,它可以完整地解析这些包含多种内容的复杂文档,无论是文本、图像、表格还是数学公式,都能准确识别和理解。它把文档里的所有元素拆解、分析,然后构建成一个知识图谱,让你在提问的时候,系统不仅能理解文字,还能看懂图片内容、分析表格数据。这样一来,它就能根据文档里的全部信息,给出更全面、更准确的回答。这个系统特别适合处理学术论文、技术手册、财务报告这类信息多样的文件。
Function List
- 一体化处理流程: 从文档上传、解析,到最终的智能问答,整个流程是完整且自动化的。
- Support for multiple file formats: 用户可以上传PDF、Word、PPT、Excel、图片等多种常见格式的文件进行处理。
- 专门的内容分析器: 系统内置了专门用于识别和理解图像、表格、数学公式等不同内容的工具。
- 构建多模态知识图谱: 它能自动提取文件中的关键信息,并将文字、图片、表格等内容之间的联系建立起来,形成一个知识网络。
- 灵活的处理模式: 用户既可以选择让系统自动解析整个文档,也可以把自己已经整理好的内容直接交给系统处理。
- 混合式智能检索: 在查找答案时,系统会结合关键词匹配和上下文理解两种方式,更精准地定位信息。
- 视觉语言模型增强查询: 当用户提问涉及图片时,系统会自动调用视觉模型来分析图片内容,实现图文结合的回答。
Using Help
RAG-Anything 是一个功能强大的工具,它可以解析包含文字、图片、表格等多种内容的文档,并允许你通过提问的方式与这些文档进行交互。以下是详细的安装和使用流程。
一、 安装
安装 RAG-Anything 有两种方式,推荐使用第一种,因为它更简单。
方式一:从 PyPI 直接安装 (推荐)
这是最快捷的安装方式。打开你的终端或命令行工具,输入以下命令:
# 基础安装
pip install raganything
这个基础命令只安装了核心功能。现代文档格式多样,为了让它能处理更多类型的文件,你可以根据需要安装额外的功能包。
- 如果你想让它处理所有支持的文件类型(推荐):
pip install 'raganything[all]'
- 如果你只需要处理图片格式(如 BMP, TIFF, GIF等):
pip install 'raganything[image]'
- 如果你只需要处理纯文本文件(如 TXT, MD):
pip install 'raganything[text]'
Way 2: Install from source code
如果你想研究它的代码或者进行二次开发,可以选择这种方式。
- 首先,把代码从 GitHub 克隆到你的电脑上:
git clone https://github.com/HKUDS/RAG-Anything.git
- Go to the project catalog:
cd RAG-Anything
- 然后通过 pip 安装:
pip install -e .
- 同样地,如果需要支持所有文件格式,使用这个命令:
pip install -e '.[all]'
二、 环境配置
1. 安装 LibreOffice
RAG-Anything 在处理 Office 文档(如 .docx, .pptx, .xlsx)时,需要借助 LibreOffice 这个免费的办公软件。你必须先在你的操作系统上安装它。
- Windows (computer): Go to LibreOffice 官网Download and install.
- macOS: 使用 Homebrew 安装会很方便,命令是
brew install --cask libreoffice
The - Ubuntu/Debian: 使用命令
sudo apt-get install libreoffice
The
2. 配置 API 密钥
RAG-Anything 在理解内容和生成回答时,需要调用大语言模型(LLM),比如 OpenAI 的 GPT 系列模型。你需要一个 API 密钥。
在你的项目文件夹里,创建一个名为 .env
的文件,然后把下面的内容复制进去,并换成你自己的密钥信息。
OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxx"
# 如果你使用代理或者第三方服务,还需要配置这个地址
OPENAI_BASE_URL="https://api.your-proxy.com/v1"
三、 使用方法
下面我们通过一个完整的例子,来演示如何使用 RAG-Anything 处理一份文档并进行提问。
1. Preparatory work
首先,确保你已经安装好 RAG-Anything 并配置了 API 密钥。然后,准备一份你想要处理的文档,比如一个名为 report.pdf
of the document.
2. 编写代码
创建一个 Python 文件,例如 main.py
,然后将以下代码复制进去。这段代码演示了从配置、处理文档到提问的完整流程。
import asyncio
from raganything import RAGAnything, RAGAnythingConfig
from lightrag.llm.openai import openai_complete_if_cache, openai_embed
from lightrag.utils import EmbeddingFunc
# 异步函数是现代Python中处理高并发任务的方式
async def main():
# 1. 设置你的API密钥和代理地址
api_key = "your-api-key" # 替换成你的 OpenAI API Key
base_url = "your-base-url" # 如果有代理,替换成你的代理地址
# 2. 配置 RAG-Anything 的工作方式
config = RAGAnythingConfig(
working_dir="./rag_storage", # 指定一个文件夹,用来存放处理后的数据
parser="mineru", # 使用mineru解析器
parse_method="auto", # 自动判断解析方式
enable_image_processing=True, # 启用图片处理
enable_table_processing=True, # 启用表格处理
)
# 3. 定义与大语言模型交互的函数
# 文本模型,用于生成回答
def llm_model_func(prompt, **kwargs):
return openai_complete_if_cache(
"gpt-4o-mini",
prompt,
api_key=api_key,
base_url=base_url,
**kwargs,
)
# 视觉模型,用于理解图片内容
def vision_model_func(prompt, image_data=None, **kwargs):
return openai_complete_if_cache(
"gpt-4o",
"",
messages=[{"role": "user", "content": [{"type": "text", "text": prompt}, {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_data}"}}]}],
api_key=api_key,
base_url=base_url,
**kwargs,
)
# 嵌入模型,用于将文本转换成向量,方便计算机理解和检索
embedding_func = EmbeddingFunc(
embedding_dim=3072,
func=lambda texts: openai_embed(
texts, model="text-embedding-3-large", api_key=api_key, base_url=base_url
),
)
# 4. 初始化 RAG-Anything 系统
rag = RAGAnything(
config=config,
llm_model_func=llm_model_func,
vision_model_func=vision_model_func,
embedding_func=embedding_func,
)
# 5. 处理你的文档
# 将 "path/to/your/document.pdf" 替换成你自己的文件路径
await rag.process_document_complete(
file_path="path/to/your/document.pdf",
output_dir="./output"
)
# 6. 开始提问
print("文档处理完成,现在可以开始提问了。")
# 示例问题:一个纯文本问题
text_result = await rag.aquery(
"请总结一下这份文档的核心观点,并分析图表传达了哪些主要信息?",
mode="hybrid" # hybrid模式会结合多种方式检索,结果更准
)
print("问题的回答:", text_result)
if __name__ == "__main__":
asyncio.run(main())
3. Running the code
将代码中的 your-api-key
,your-base-url
cap (a poem) path/to/your/document.pdf
替换成你自己的实际信息。然后在终端中运行这个文件:
python main.py
程序会首先下载需要的模型,然后开始解析你指定的文档。这个过程可能会持续几分钟,具体时间取决于文档的大小和复杂程度。处理完成后,它会打印出你提出的问题的答案。
这个例子展示了 RAG-Anything 的核心用法。它还支持更多高级功能,比如批量处理整个文件夹的文档、直接传入已解析好的内容、或者对特定的图片或表格进行提问,你可以查阅官方文档来探索这些高级用法。
application scenario
- academic research
研究人员在阅读大量论文时,往往需要处理包含复杂图表、数学公式和文字的PDF文件。RAG-Anything可以完整解析这些论文,帮助研究人员快速定位关键信息、理解实验结果图表,并比较不同论文的数据,极大地提升了文献回顾和资料整理的效率。 - Enterprise Knowledge Management
公司内部通常有大量的技术手册、财务报告、市场分析和演示文稿。这些文件格式各异,内容混杂。使用RAG-Anything可以建立一个统一的企业知识库,员工可以直接用自然语言提问,比如“查询去年第三季度的销售数据图表”或“给我看一下XX产品的技术架构图”,系统能够从不同文档中精准地找到并呈现相关信息。 - 金融和法律行业
金融分析师和律师需要阅读冗长的报告和合同文件,这些文件里充满了数据表格、条款细则和图表。RAG-Anything可以帮助他们快速提取关键数据、识别合同中的特定条款,并对财务报表中的表格进行分析,辅助他们做出更准确的决策。 - Education and learning
学生和教师可以利用RAG-Anything来处理教材、课件和学习资料。学生可以上传课件PDF后,针对里面的图表和概念进行提问,系统可以提供详细的解释。教师也可以用它来快速制作问答材料,或者整理不同来源的教学资源。
QA
- RAG-Anything 和其他普通的RAG工具有什么不同?
最大的不同在于,RAG-Anything能够处理多模态内容。普通RAG工具通常只能提取和理解文档中的纯文本,会忽略掉图片、表格、公式等非文本信息。而RAG-Anything专门设计了识别这些内容的模块,它能看懂图片、解析表格数据,从而对整个文档有一个更全面的理解,提供的答案也因此更准确、信息更完整。 - 处理Office文档(Word, PPT)时,为什么必须安装LibreOffice?
RAG-Anything本身不直接解析Office文档的复杂格式,而是调用LibreOffice这个强大的开源办公软件。它利用LibreOffice将.docx、.pptx等文件转换成一种更标准、更容易处理的中间格式,然后再进行内容提取和分析。所以,LibreOffice是处理这些文件的前置依赖。 - 这个工具是免费的吗?使用它需要花钱吗?
RAG-Anything项目本身是开源免费的,你可以自由下载和使用它的代码。但是,它在运行过程中需要调用大语言模型(LLM)和嵌入模型(Embedding Model)的API,比如OpenAI的GPT-4o。这些API服务通常是按使用量收费的。所以你的成本主要来自于这些第三方API的调用费用。 - 如果我的文档里有手写的公式或者不清晰的图表,它能处理吗?
处理效果取决于内容的清晰度。对于印刷体的数学公式和清晰的图表,它的识别准确率很高。但如果图表非常模糊,或者公式是潦草的手写体,系统的OCR(光学字符识别)模块可能难以准确识别,这会影响最终的理解和问答效果。