一、事情是这样的

去年 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 应用落地的过程中,最值钱的能力不是用最前沿的模型做推理,而是把最基础的脏活、累活干到极致。


七、如果让我重新来一次

如果时光倒流到那个项目开始之前,我会做几件和现在完全不同的事:

  1. 花 2 天时间做好 PDF 解析评测,而不是上来就选框架
  2. 先拿 50 份真实文档跑通全链路,确认数据质量达标,再上量
  3. 让 MinerU 成为数据预处理的标准组件,而不是想起来才加
  4. 把文档解析质量纳入 RAG 系统的核心监控指标

这些事情一点都不酷,也不值得到处吹嘘。

但它们能保证你的系统真正“能用”。

而在这个 AI 泡沫此起彼伏的行业里,“能用”两个字,已经足够打败 80% 的竞品了。


写在最后

那个被业务老大当众嘲讽的下午,是我职业生涯里最尴尬的 30 分钟。

但也是最有价值的 30 分钟。

它让我彻底明白了一个道理:在 AI 时代,你的模型可以不是最强的,但你的数据必须是最干净的。

因为模型是别人的,算力是云上的,而数据——那是你唯一能守住的东西。

别让 PDF 解析,成为你 AI 系统里那根最短的木板。


如果你也在构建 RAG 系统,正在被 PDF 解析折磨,欢迎在评论区分享你的“翻车”经历。技术踩坑不可怕,可怕的是踩了同一坑两次。

 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐