你把一份几十页的报告交给 AI,问题的答案明明在表格里,它却说文档没有提到。问题可能不在 AI,而在更早的一步:PDF 解析时,表格已经被拆成一堆失去关系的文字。Angela Shi 在 Enterprise Document Intelligence 系列 Part III 的这篇文章中提出,与其给每一页都上最贵的工具,不如先做廉价解析,再用一连串检查找出失败页面,逐级加码。
这里的数字和案例均来自作者文章及其配套项目,只有一个独立信源。尤其是速度和成本数据缺少测试环境,适合用来说明数量级差异,不应视作通用基准。
PDF 看得见,不等于机器读得懂
PDF 更像一张规定文字、线条和图片摆放位置的电子纸,而不是结构清楚的文档。解析器必须自行还原段落、表格和阅读顺序;如果页面是扫描图片,还要先做 OCR——把图片中的字符识别成文字。
作者建议分两步处理。第一步是初始化:根据文档类型选择基础解析器。原生 PDF 先用 PyMuPDF;扫描件则从免费的 OCR 引擎开始。两类工具输出相同格式的逐行数据,让后续系统不必关心前面用了哪一种解析器。
第二步才是关键:检查基础结果,把有问题的页面升级给能力更强、成本也更高的解析器。作者将这种安排称为 escalation cascade,也就是“升级级联”:像医院分诊一样,普通页面在基础环节结束,疑难页面才进入更重的检查。
先找明显失败,再讨论理解
最便宜的一层是确定性检查——按照明确规则寻找明显异常。配套 GitHub 项目 doc-intel/notebooks-vol1 提供了 pre_parse_signals,可输出每页的字符数 char_count、图片数 image_count,以及根据逐行数据 line_df 识别扁平表格的特征。
这些规则不负责判断机器是否真正“理解”了内容。它们更像质量闸门:文本是不是少得反常,页面是否有图片却没有对应文字,表格是否被拆成彼此孤立的行。一旦触发信号,系统就把页面送往更重的工具。
文章用 2017 年的 Attention paper 举了两个例子。第 9 页的 Table 3 经扁平解析后,每个单元格各占一行,原本的行列关系随之消失。第 3 页的 Figure 1 则更直接:PyMuPDF 返回的图示主体为空。便宜解析器没有报错,却丢掉了回答问题所需的信息,这正是“静默失败”最麻烦的地方。
检查不只发生在入口
作者设计的级联贯穿整条 RAG 文档管线。RAG 是一种先从文档中找相关内容,再让语言模型依据这些内容回答的流程。解析位于入口;入口丢了表格或打乱阅读顺序,后面的检索和生成再强也很难补回来。
这套级联依次利用四类信号:解析前的元数据先为大部分文档选择路线;解析过程的输出暴露扁平表格和无法读取的图;检索评分检查找到的内容是否偏离问题中的关键线索;最后,生成阶段的反馈捕捉此前漏过的失败。只要某一层认为现有结果不足以回答问题,系统便升级解析。
本文重点讲的是级联中便宜的一端。更深层解析器如何实际处理表格与图形,作者计划放在第二篇文章中;供稿时该文尚未发布。
为什么值得关注
据作者给出的示意数据,PyMuPDF 解析一页约需 5 毫秒,也不产生按次的模型调用费用;视觉 LLM——能直接观察页面图像的语言模型——处理同一页可能贵约 10,000 倍,并耗时约 10 秒。这里的“免费”只表示没有模型 API 费用,不代表计算和运维没有成本。
真正有用的不是某个具体倍数,而是架构上的取舍。普通文字页通常不需要视觉模型;表格、图形、扫描区域和被压平的复杂版面却可能需要。逐页都用重型工具会浪费资源,只用基础工具又会漏掉关键信息。按失败升级,把成本花在暴露出风险的页面上,才有机会同时守住费用和质量。
局限与未知
- 所有结论目前只有作者文章及同项目仓库这一个独立信源,尚未形成交叉验证。
- 5 毫秒、10 秒和 10,000 倍均未披露硬件、模型、分辨率、计费口径及重复测试条件,不能当作普适基准。
- Attention paper 的两个解析结果可能受 PDF 版本、PyMuPDF 版本和参数影响;文章提供了复现入口,但本文材料没有独立复现实验结果。