一、系列回顾:从"能用"到"精准"
前两篇分别讲了Dify的企业级改造和LightRAG知识图谱RAG。
第一篇:Dify二开实战。双层配额管理,防止Token费用失控;账号同步和软删除,解决运维痛点。
第二篇:用LightRAG的知识图谱RAG,准确率从75%提升到90%。
这两个改造上线后,技术文档问答系统运行得挺顺畅。
但新问题又来了。
二、新痛点:LightRAG处理不了复杂文档
上周,产品经理又找我:“你的RAG系统,遇到带表格的PDF就瞎了。”
我一愣。
她给我看了个例子:一篇性能测试报告,里面有张性能对比表:
| 方法 | QPS | P95延迟 | 内存占用 ||------|-----|---------|----------|| 传统RAG | 1200 | 85ms | 2.1GB || 知识图谱RAG | 950 | 120ms | 3.5GB || 混合RAG | 1350 | 95ms | 3.2GB |用户问:“哪种方法的QPS最高?”
LightRAG回答:“文档中提到了三种RAG方法…”
没有直接回答。
我去查日志。
LightRAG提取到的实体只有"传统RAG"、“知识图谱RAG”、“混合RAG”。
表格里的数据,完全丢了。
再试了一个数学公式的例子:一篇机器学习论文,里面有个F1-score的计算公式。
用户问:“F1-score的计算公式是什么?”
LightRAG回答:“F1-score是评估指标,用于衡量模型准确性。”
公式内容,也丢了。
我懵了。
LightRAG在纯文本场景表现很好,为啥遇到表格和公式就不行了?
三、问题根源:LightRAG只能处理纯文本
去翻LightRAG的文档,发现了问题。
LightRAG的处理流程:
PDF文档 → 提取文本 → 实体识别 → 关系提取 → 构建知识图谱关键问题在第一步:提取文本。
LightRAG用的是传统的PDF文本提取工具,只能提取纯文本。
遇到表格,提取出来是这样:
方法QPS P95延迟内存占用传统RAG 1200 85ms 2.1GB知识图谱RAG 950 120ms 3.5GB混合RAG 1350 95ms 3.2GB表格结构全乱了。
遇到公式,提取出来是这样:
F1 = 2 precision recall precision + recallLaTeX公式变成了纯文本,符号全错了。
这就是纯文本RAG的局限性:无法理解文档的"结构化信息"。
统计数据很扎心
我统计了一下公司内部的文档库:
- • 技术文档:约500篇,其中85%包含表格
- • 学术论文:约200篇,其中70%包含数学公式
- • 年度报告:约100篇,其中95%包含图表
也就是说,纯文本RAG只能处理不到20%的文档。
剩下80%的文档,要么信息丢失,要么准确率很低。
这在企业里没法接受。
四、解决方案:多模态RAG
我开始调研解决方案。
Google了一圈,看到港大在2025年6月推出的RAG-Anything。
官方介绍:“All-in-One Multimodal Document Processing RAG”
关键词:Multimodal(多模态)
什么是多模态RAG?
传统RAG:只处理文本。
多模态RAG:同时处理文本、表格、图片、公式。
具体来说:
表格:能看懂表格结构,知道每个单元格是什么数据,怎么对应行列。
公式:能认出LaTeX公式,变成能查询的格式。
图片:用GPT-4o这样的Vision模型看图,生成文字描述。
文档里不管是文字、表格、还是公式,都能准确提取和查询。
RAG-Anything的架构
RAG-Anything是港大专门给LightRAG做的多模态扩展,架构如下:
PDF文档 ↓MinerU解析(提取表格、公式、图片) ↓Vision模型处理图片(GPT-4o) ↓LLM模型提取实体(GPT-4o-mini) ↓构建知识图谱(LightRAG) ↓多模态查询核心组件:
- MinerU:上海AI实验室开源的文档解析工具
- • 表格 → 转HTML格式
- • 公式 → 转LaTeX格式
- • 图片 → 提取base64编码
- 双模型架构:
- •LLM模型(GPT-4o-mini):处理文本,提取实体,便宜
- •Vision模型(GPT-4o):处理图片,看懂视觉内容,强但贵
- LightRAG知识图谱:底层引擎,管实体关系和向量检索
五、实战:集成RAG-Anything到LightRAG
看完文档,我决定试试。
好消息:LightRAG官方在2025.06.16已经支持RAG-Anything集成。
GitHub的README里有明确说明:“RAG-Anything: All-in-One Multimodal RAG”。
Step 1:安装RAG-Anything
pip install raganything这个包会自动安装依赖:
- • MinerU(文档解析)
- • LightRAG(知识图谱RAG)
Step 2:配置双模型
创建配置文件.env:
# LLM模型(用于实体提取,成本低)LLM_MODEL=gpt-4o-miniOPENAI_API_KEY=sk-...# Vision模型(用于图像处理,能力强)VLM_MODEL=gpt-4oVLM_BINDING_API_KEY=sk-... # 可以和LLM用同一个key# Embedding模型(用于向量检索)EMBEDDING_MODEL=text-embedding-3-largeEMBEDDING_DIM=3072# MinerU配置MINERU_PARSE_METHOD=auto # 自动选择最优解析器MINERU_OUTPUT_DIR=./mineru_output关键配置说明(截至2026年1月):
LLM_MODEL=gpt-4o-mini:处理纯文本,每1K tokens约$0.00015,便宜VLM_MODEL=gpt-4o:处理图片,每1K tokens约$0.0025,贵但能力强MINERU_PARSE_METHOD=auto:自动判断文档类型,选最优解析策略
Step 3:初始化RAGAnything实例
核心代码(基于我的实际项目):
from raganything import RAGAnything, RAGAnythingConfigfrom lightrag import LightRAGfrom lightrag.llm.openai import openai_complete_if_cache, openai_embedfrom lightrag.utils import EmbeddingFunc# 1. 创建底层的LightRAG实例rag = LightRAG( working_dir="./rag_storage", workspace="my_kb", llm_model_func=lambda prompt, **kwargs: openai_complete_if_cache( "gpt-4o-mini", prompt, api_key=OPENAI_API_KEY, **kwargs ), embedding_func=EmbeddingFunc( embedding_dim=3072, func=lambda texts: openai_embed( texts, model="text-embedding-3-large", api_key=OPENAI_API_KEY, ), ),)# 2. 创建Vision模型函数(处理图片)async def vision_model_func(prompt, image_data=None, **kwargs): """Vision模型:用GPT-4o处理图片""" if image_data: return await 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=OPENAI_API_KEY, **kwargs, ) else: # 无图片时,退化为普通LLM return await openai_complete_if_cache( "gpt-4o-mini", prompt, api_key=OPENAI_API_KEY, **kwargs )# 3. 配置RAGAnythingconfig = RAGAnythingConfig( working_dir="./rag_storage", parser='mineru', # 使用MinerU解析器 parse_method='auto', # 自动选择解析策略 parser_output_dir='./mineru_output', enable_image_processing=True, # 开启图片处理 enable_table_processing=True, # 开启表格处理 enable_equation_processing=True, # 开启公式处理)# 4. 包装为RAGAnythingrag_anything = RAGAnything( lightrag=rag, # 底层LightRAG实例 llm_model_func=rag.llm_model_func, # LLM函数 vision_model_func=vision_model_func, # Vision函数 config=config,)print("RAGAnything初始化成功!")print(f" - 图片处理: {config.enable_image_processing}")print(f" - 表格处理: {config.enable_table_processing}")print(f" - 公式处理: {config.enable_equation_processing}")代码要点:
LightRAG做底层引擎。
Vision模型单独定义,专门看图,支持base64编码的图片输入。
三大多模态能力全开:图片、表格、公式。
最后包装成RAGAnything,在LightRAG基础上加多模态处理能力。
Step 4:处理带表格/公式的PDF
# 处理文档(MinerU会自动提取表格和公式)await rag_anything.process_document_complete( file_path="performance_report.pdf", output_dir="./output", parse_method="auto")print("文档处理完成!")处理流程:
MinerU先解析PDF。表格转HTML,公式转LaTeX,图片提取base64编码。
Vision模型(GPT-4o)看图片,理解内容,生成文字描述。比如:“这是一张柱状图,展示了三种RAG方法的QPS对比”。
LLM从文本、表格、公式中提取实体,构建跨模态关系。比如:“传统RAG --[QPS]–> 1200”。
最后构建知识图谱,存入LightRAG的图数据库,生成向量索引。
Step 5:多模态查询
# 查询1:纯文本查询(不带额外数据)result = await rag_anything.aquery( "哪种RAG方法的QPS最高?", mode="hybrid")print(result)# 输出: "根据性能测试报告,混合RAG的QPS最高,达到1350。"# 查询2:多模态查询(带表格数据)result = await rag_anything.aquery_with_multimodal( "对比这个新测试结果和文档中的数据", multimodal_content=[ { "type": "table", "table_data": """方法,QPS,P95延迟 新方法,1500,80ms""", "table_caption": "新测试结果" } ], mode="hybrid")print(result)# 输出: "新方法的QPS(1500)比文档中的混合RAG(1350)高11%,且延迟更低。"# 查询3:公式查询result = await rag_anything.aquery_with_multimodal( "解释这个公式的含义", multimodal_content=[ { "type": "equation", "latex": "F1 = 2 \\cdot \\frac{precision \\cdot recall}{precision + recall}", "equation_caption": "F1-score计算公式" } ], mode="hybrid")print(result)# 输出: "F1-score是precision和recall的调和平均数,用于评估分类模型的综合性能..."查询方式对比:
| 查询方式 | 适用场景 | 示例 |
|---|---|---|
aquery() | 纯文本查询 | “什么是Redis?” |
aquery_with_multimodal() | 带额外数据的查询 | “对比这个表格和文档” |
六、效果对比:纯文本RAG vs 多模态RAG
测试场景
我用公司的技术文档做了测试:
- 文档数量:50篇技术文档和论文
- 文档类型:30篇包含表格,20篇包含公式
- 测试问题:30个(15个表格相关,15个公式相关)
- 评估标准:准确率(能否正确回答问题)
说明:以下数据基于小规模实际测试,具体效果因知识库内容和查询类型而异。
准确率对比
| 查询类型 | LightRAG(纯文本) | LightRAG+RAGAnything | 提升 |
|---|---|---|---|
| 表格数据查询(15个) | 约40% (6/15) | 约93% (14/15) | +53% |
| 公式相关查询(15个) | 约33% (5/15) | 约87% (13/15) | +54% |
| 整体准确率(30个) | 约37% (11/30) | 约90% (27/30) | +53% |
关键发现:
纯文本LightRAG在表格和公式场景准确率不到40%。
集成RAGAnything后,准确率提升到90%左右。
提升幅度超过50%。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。