我花了两年时间调RAG,最后发现SQL查个like都比它准”一个技术负责人的忏悔录:别让 PDF 解析毁了你所有的 AI 投入
一、事情是这样的
去年 Q4,我们团队接到了一个“看起来很简单”的任务:
把公司 2000+ 份行业研究报告做成一个智能问答系统,业务方说人话就能查到想要的数据。
老板给的预算不低,团队配置也挺豪华。我们用了当时最火的框架,选了性能最强的向量数据库,调了业界口碑最好的大模型API,甚至还专门请了个 Prompt Engineer。
两个月后上线演示,翻车翻得亲妈都不认识。
业务老大问了一个很朴素的问题:“去年 Q3 华东区那个混合储能项目的投资回报率是多少?”
系统沉默了三秒,吐出一段文不对题的废话,里面还杜撰了一个不存在的项目名称。
会议室安静了。然后业务老大说了句让我至今难忘的话:
“我用Excel的Ctrl+F搜PDF,都比你这玩意儿准。”
二、问题到底出在哪?
我花了整整一周排查问题。向量检索的召回率看着还行,大模型的参数也没调错,Embedding模型选的是最新的中文优化版本。
最后我发现了真相——数据本身是脏的。
我做了一个实验:随机抽取 10 份 PDF,用肉眼比对原始文件内容和我们存入数据库的文本。
结果触目惊心:
| 问题类型 | 占比 | 具体表现 |
|---|---|---|
| 文字顺序错乱 | 40% | 双栏文档的左右栏被混在一起,变成了一锅粥 |
| 表格数据丢失 | 35% | 关键财务数据从表格里消失了,只剩下表头 |
| 公式变成乱码 | 20% | 一些技术参数的数字变成了特殊符号 |
| 段落归属错误 | 30% | 第二章的内容被错误地拼接到了第四章 |
换句话说,我们花了几十万的算力、用着最先进的模型,一直在用一堆垃圾做检索和推理。
“垃圾进,垃圾出”——这句在数据领域被说烂了的话,在我们身上应验了。而更讽刺的是,我们明明知道这个道理,却把所有的精力都花在了“出”这一端,从没认真审视过“进”的质量。
三、圈内藏着一个心照不宣的谎言
我后来和几个做同类项目的朋友聊了聊,发现这不是我们团队的个例。
几乎所有人都在回避一个残酷的事实:
RAG 系统最大的瓶颈不是模型,不是算力,不是向量数据库——而是那个没人愿意花时间搞好的文档解析环节。
为什么大家不愿意搞?
因为不性感。
你可以去任何一个 AI 技术大会上听演讲,台上的人会跟你讲:
- 怎么用 LangChain 编排复杂的 Agent 链路
- 怎么用 RAPTOR 做递归摘要式检索
- 怎么用 GraphRAG 构建知识图谱
- 怎么用 Agentic RAG 让系统自己决定检索策略
这些话题多酷啊,多前沿啊,写在简历上多好看啊。
但是,没有人愿意上台讲:我是怎么把一个 200MB 的扫描件 PDF 里的表格无损提取出来的。
因为——不够高级。
然而现实是,90% 的企业核心数据都封存在这些“不高级”的 PDF 里。它们排版复杂、包含大量图表和公式、双栏甚至三栏排版比比皆是。
你不解决这个问题,后面所有的“高级玩法”都是在沙子上盖城堡。
四、一个险些被我们错过的工具
在换了第三套 PDF 解析方案后,我们找到了 MinerU。
让我印象最深的不是它的技术指标,而是一个场景:
我们有一份 80 多页的行业白皮书,里面包含:
- 7 个跨页的大型数据表格
- 十几处包含希腊字母和上下标的数学公式
- 大量穿插在正文之间的插图说明
- 典型的双栏学术排版
用之前的方案处理,表格数据残缺,公式全部乱码,双栏内容混杂。
MinerU 跑完,除了页眉页脚被自动剥离,其他内容几乎完美还原。
我盯着输出的 Markdown 文件看了三分钟,确认每一行数据都和原文对得上。
那种感觉怎么说呢?就像你找了三年的钥匙,发现它一直挂在你腰带上。
MinerU 到底做对了什么?
后来我认真研究了它的技术方案,总结出三个关键点:
1. 它先“看”版面,再“读”文字
大多数解析工具是一上来就拉取文本流,结果双栏文档左右混在一起。MinerU 先做物理版面分析,识别出标题区、正文区、表格区、图片区,再根据逻辑排版顺序拼接内容。
这个顺序调换,效果天差地别。
2. 它把表格和公式当做“一等公民”
传统的 PDF 解析把表格视作普通文本块,结果行列关系全乱。MinerU 内置了专门的表格识别和公式识别模型,表格输出为结构化 Markdown,公式输出为 LaTeX 代码——这些都是大模型真正能“看懂”的语言。
3. 它保留了文档的“骨架”
MinerU 输出的结构化数据保留了完整的标题层级(H1/H2/H3)、段落边界和列表结构。这使得我们可以基于语义进行切片,而不是暴力按字数切割。
很多技术难题,解决方案往往不是做加法,而是做减法。MinerU 只是做对了一件事:尊重文档原本的结构。
五、效果到底怎么样?我说三个真实场景
场景一:跨表格的数据查询
改造前:
问:“表 4-2 里 2023 年新能源装机容量的数据是多少?”
系统答:“抱歉,我无法找到相关信息。”
因为表格数据在解析时丢失了行列关系,大模型根本看不懂那团乱码。
改造后(接入 MinerU):
问:“2023 年新能源装机容量的数据是多少?”
系统答:“根据表 4-2 的数据,2023 年全国新能源装机容量为 892GW,其中光伏 432GW、风电 460GW。数据来源:《2023 年中国能源发展报告》第 47 页。”
准确,有据可查,有出处引用。
场景二:多文档的交叉验证
改造前:
问:“公司对 AI 研发的投入连续三年是什么趋势?”
系统答:“逐年递增。”(然后给了一个笼统的描述)
因为没有正确的语义切片,系统只能检索到零散的片段,无法形成完整的趋势判断。
改造后(接入 MinerU):
问:“AI 研发投入的趋势是什么?”
系统答:“根据 2021-2023 年财报数据,公司 AI 研发投入分别为 3.2 亿、4.8 亿和 6.5 亿元,年均增长率约为 42.5%。具体来看:2021 年处于起步阶段,主要投入在基础设施建设;2022 年进入应用落地阶段;2023 年全面转向业务场景赋能。”
有了结构和连续性,AI 才能真正“理解”数据。
场景三:包含公式的技术查询
改造前:
问:“报告中提到的 P/E 估值模型是怎么计算的?”
系统答:“P/E 是……(一段从网上抄来的通用定义)”
因为原始公式被解析成了乱码,大模型只能用训练数据中的通用知识来回答,完全没有利用文档中的专业内容。
改造后(接入 MinerU):
问:“这套估值模型的具体参数是什么?”
系统答:“报告第 23 页提出了一套改良版 P/E 模型:P/E = (1+g) / (r - g) × (1 + α × β),其中 g=8.5%、r=11.2%、α=1.3、β 取近三年营收增长率的变异系数。模型额外引入了行业竞争系数 α 和 β…”
有公式、有参数、有上下文——这才叫真正的“基于文档”的问答。
六、回过头来看,我们到底错在哪?
我不是来给 MinerU 写软文的。它确实好用,但我想说的是更深层的反思:
我们这些做技术的人,太容易被“新概念”吸引了。
- GraphRAG 一出,全网都在搞知识图谱
- Agent 概念火了,人人都在编排多智能体协作
- RAPTOR 看起来很酷,一窝蜂去建递归摘要树
然后呢?基础数据质量没人管。
这就好比你要做一顿米其林大餐,价格最高、工序最复杂的步骤你全都安排上了,唯独在最基础的“洗菜切菜”环节马虎了。
再好的厨子,也做不出一盘烂菜叶上的佳肴。
在 AI 应用落地的过程中,最值钱的能力不是用最前沿的模型做推理,而是把最基础的脏活、累活干到极致。
七、如果让我重新来一次
如果时光倒流到那个项目开始之前,我会做几件和现在完全不同的事:
- 花 2 天时间做好 PDF 解析评测,而不是上来就选框架
- 先拿 50 份真实文档跑通全链路,确认数据质量达标,再上量
- 让 MinerU 成为数据预处理的标准组件,而不是想起来才加
- 把文档解析质量纳入 RAG 系统的核心监控指标
这些事情一点都不酷,也不值得到处吹嘘。
但它们能保证你的系统真正“能用”。
而在这个 AI 泡沫此起彼伏的行业里,“能用”两个字,已经足够打败 80% 的竞品了。
写在最后
那个被业务老大当众嘲讽的下午,是我职业生涯里最尴尬的 30 分钟。
但也是最有价值的 30 分钟。
它让我彻底明白了一个道理:在 AI 时代,你的模型可以不是最强的,但你的数据必须是最干净的。
因为模型是别人的,算力是云上的,而数据——那是你唯一能守住的东西。
别让 PDF 解析,成为你 AI 系统里那根最短的木板。
如果你也在构建 RAG 系统,正在被 PDF 解析折磨,欢迎在评论区分享你的“翻车”经历。技术踩坑不可怕,可怕的是踩了同一坑两次。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)