RAG-Anything测评:港大开源的全能RAG框架,真的"万物皆可RAG"吗
丢进去一份50页的技术PDF,它能把里面的文字、图表、公式、表格全部理解,然后你随便问它什么都能答上来。听起来很爽,但实际用起来到底怎么样?我用了一天半,把真实场景跑了一遍。
RAG-Anything是什么
一句话:港大HKUDS团队开源的多模态RAG系统,能处理PDF、Office、图片、表格、公式,统一索引后做智能检索。
基于LightRAG构建。如果你用过LightRAG,RAG-Anything可以理解为它的"多模态增强版"------不是在文本RAG上拼一个图片解析插件,而是从底层就为多模态内容设计的。
GitHub仓库:HKUDS/RAG-Anything,今天早上看的时候是786 Star,写着这篇文章的时候又涨了。
为什么值得关注
传统的RAG方案有一个共同的痛点:文档里有表格和图片怎么办?
大多数RAG框架(LangChain、LlamaIndex)处理纯文本没问题,但遇到带表格的技术文档、带公式的研究论文、带图表的商业报告,要么忽略这些内容,要么需要你自己写一堆预处理代码。
RAG-Anything的卖点是:你丢一份PDF进去,它自动处理所有格式的内容,包括图表和公式,然后统一建立索引。
部署实录
环境准备
Python 3.10+
显卡:建议有GPU(文档解析阶段会用视觉模型)
硬盘:预留至少10GB(MinerU模型文件比较大)
安装
bash
# 最快的方式,pip直接装
pip install 'raganything[all]'
到这里都很顺利。
踩坑一:LibreOffice
如果你要处理Office文档(.docx、.xlsx、.pptx),必须装LibreOffice。
Windows下直接去官网下载安装就行。但有个坑:装完之后要确认环境变量里能找到soffice命令,否则RAG-Anything会报找不到LibreOffice的错误。
踩坑二:MinerU模型下载
RAG-Anything用MinerU做文档解析。第一次使用的时候会自动下载模型,大约4-5GB。国内网络直接下载可能会超时,需要挂代理或者手动下载后放到缓存目录。
踩坑三:API Key
你需要提供OpenAI兼容的API Key(用于LLM推理和Embedding)。如果用OpenAI官方的就直接设置OPENAI_API_KEY。如果想用国产模型,可以通过OPENAI_BASE_URL指向兼容的API端点。
bash
# .env 文件
OPENAI_API_KEY=sk-xxxx
OPENAI_BASE_URL=https://api.deepseek.com/v1 # 用DeepSeek的话
三个真实场景测试
场景一:技术文档检索
输入:一份45页的PRD文档(PDF格式,含需求表格、架构图、时序图)
测试方法:丢进去之后,问它一些具体的需求细节问题
问题1:用户权限模块支持哪些角色?
问题2:数据导出功能支持哪些格式?
问题3:订单模块的异常处理逻辑是什么?
结果:三个问题都答对了。而且不只是从文字里找答案,表格里的角色权限配置也被正确理解了。
处理时间:45页文档,解析+索引大约用了8分钟(RTX 3060)。
场景二:含图表的技术报告
输入:一份12页的竞品分析报告(PDF,含3个对比表格和2个数据图表)
测试方法:
css
问题1:表格里A产品和B产品的价格分别是多少?
问题2:哪个产品的月活用户增长最快?
结果:价格信息从表格里准确提取了。但图表类的问题回答得不太理想------它能识别到"图里有一个增长趋势",但具体的数值读不准。
这是RAG-Anything目前的短板:文字和表格的处理很强,但图片/图表的精确数据提取还有提升空间。
场景三:多格式混合批量处理
输入:一个文件夹,里面有:
- 3个PDF(技术文档)
- 2个DOCX(会议纪要)
- 1个XLSX(项目排期表)
- 若干PNG图片(设计稿截图)
python
await rag.process_folder_complete(
folder_path="./project_docs",
output_dir="./output",
file_extensions=[".pdf", ".docx", ".xlsx", ".png"],
recursive=True,
max_workers=4
)
结果:所有文件都处理成功了。PDF和DOCX的内容理解很好,XLSX的表格数据也能正确检索。图片(设计稿截图)识别到了,但语义理解比较浅------能描述"这是一个登录页面的设计图",但无法从设计稿中提取交互逻辑。
跟其他RAG方案对比
| 维度 | RAG-Anything | LangChain + Unstructured | LlamaIndex |
|---|---|---|---|
| 文字处理 | 好 | 好 | 好 |
| 表格理解 | 强(专用分析器) | 一般(需额外配置) | 一般 |
| 公式解析 | 支持LaTeX | 不支持 | 不支持 |
| 图片理解 | 中等(VLM增强) | 需自己接Vision模型 | 需自己接 |
| 知识图谱 | 内置(LightRAG) | 需自己搭 | 需自己搭 |
| 多格式统一索引 | 原生支持 | 需手动编排 | 需手动编排 |
| 上手难度 | 中等 | 高 | 高 |
| 灵活度 | 中等(框架定了) | 高 | 高 |
一句话概括:RAG-Anything适合"文档丢进去就能用",LangChain/LlamaIndex适合"每个环节都要自己控制"。
三种查询模式
RAG-Anything提供了三种查询方式,我用下来感受不同:
纯文本查询 (rag.aquery) 最常用的方式。问一个自然语言问题,它从知识库里找答案。支持四种模式:naive(基础向量检索)、local(局部图谱)、global(全局图谱)、hybrid(混合,推荐用这个)。
VLM增强查询 (rag.aquery(vlm_enhanced=True)) 回答问题的时候,会把相关的图片也发给视觉语言模型一起分析。适合"这个图表说明了什么"这类问题。但响应速度慢了不少,因为每次查询都要过一遍VLM。
多模态内容查询 (rag.aquery_with_multimodal) 可以手动传入表格或公式内容,跟问题一起提交。适合你已经知道要查哪个具体表格的场景。
性能实测
在我的测试环境(RTX 3060,16GB内存,i7-12700H)上:
| 操作 | 耗时 |
|---|---|
| 45页PDF解析+索引 | ~8分钟 |
| 单次文本查询 | 2-5秒 |
| VLM增强查询 | 8-15秒 |
| 批量文件夹处理(8个文件) | ~18分钟 |
| 磁盘占用(45页PDF) | ~2.3GB |
查询速度可以接受,但磁盘占用比较大。如果你要处理大量文档,存储是个需要提前规划的事。
适合什么场景
适合:
- 技术文档的知识库搭建(PRD、API文档、架构文档)
- 学术论文的检索和分析(含公式和图表的论文尤其合适)
- 企业内部文档管理(会议纪要、项目文档、竞品报告的统一检索)
- 需要处理表格数据的RAG场景(财务报表、数据报告等)
不太适合:
- 实时对话场景(索引构建时间长,不适合频繁更新的数据)
- 纯文本检索场景(杀鸡用牛刀,直接用LangChain更轻量)
- 对图片精确识别要求高的场景(设计稿、UI截图的语义理解还不够好)
写在最后
RAG-Anything解决了一个真实存在的痛点:大多数RAG框架对表格和公式的处理太弱了。
它的知识图谱+向量融合的检索方式确实比纯向量检索效果好,特别是当你需要跨文档、跨格式做关联查询的时候。
但它不是万能的。图片理解、部署复杂度、存储开销,这些都是需要你根据实际情况权衡的。
我的建议:如果你的项目里有大量带表格和公式的文档需要做检索,RAG-Anything值得一试。如果主要是纯文本,还是用你熟悉的方案就好。
代码和部署脚本我整理了一份,放在评论区了。
#RAG #知识库 #AI开发 #开源项目 #文档处理