先看一次发布前判断。
用户上传一份 PDF,接口返回成功,后台也生成了文本。任务状态显示“解析完成”,接下来却还有一个没有回答的问题:这批内容能不能进入正式知识库?
接口成功只证明服务没有在这一刻报错。它没有回答正文是否完整、标题层级是否保留、扫描页有没有漏掉关键句,也没有回答用户提问时能不能找到正确证据。
解析错误往往不会让程序崩溃。标题被压成普通正文,数据库照样可以写入;同一页重复输出两次,向量仍然能够生成;引用位置发生偏移,任务状态也可能显示完成。
所以面试官问“怎么评估文档解析质量”时,不能只回答一个准确率。
为什么一个“解析准确率”不够?
假设两套解析方案都保留了页面里的绝大部分字符。
第一套仍然区分章节标题、列表前导句和正文,第二套却把它们全部压成同一级文本。若只按字符是否出现计算,两套结果可能很接近;进入 RAG 后,第二套的片段却不知道自己属于哪个章节,例外条件也可能离开它约束的正文。
再看重复问题。同一段内容被解析器输出两次,字符覆盖甚至会显得更高,但检索前几条可能被近重复 Chunk 占满。只统计“提取了多少字”,既看不出层级丢失,也会把重复内容误当成完成度提升。
所以解析质量至少要拆成四层。
第一层,文字覆盖
检查应该出现的正文有没有被提取,扫描页是否大量漏字,结果中是否混入页眉、页脚、水印和乱码。
这层关注“内容有没有”,但不能单独代表可用。
第二层,阅读顺序
检查多栏、列表、跨页段落和脚注是否按人类阅读方式连接。
每个字都在,只要顺序错了,原意就可能被改变。
第三层,结构保留
检查标题与正文、表头与数据行、图片与说明、代码与缩进是否仍然对应。
RAG 不是只搜索词,还要把一段能独立解释的证据交给模型。结构断裂会让候选看似相关,却不足以回答问题。
第四层,位置追溯
检查每段内容能否回到正确文件、页码和区域。
没有位置,系统即使生成了一段正确答案,也只能告诉用户“来自某份文档”,无法核验具体证据。

文字覆盖回答有没有提取,阅读顺序回答有没有读乱,结构保留回答关系是否还在,位置追溯回答能否回到原文。
这四层分别对应不同修复方式。
漏字可能需要 OCR 或图像预处理;顺序错误要检查版面和文本块关系;表格损坏要重建行列;追溯缺失则要在解析阶段保存页码与坐标。
如果把它们压成一个总准确率,数字下降时根本不知道该改哪里。数字上升时,也可能只是普通正文变好了,真正影响检索的跨页表格仍然错误。
固定回归集应该怎样建?
评测不能每次临时挑一份看起来复杂的文件。
解析器、OCR 模型或后处理规则发生变化后,需要用同一批样本反复比较,否则这次看到的差异可能只是输入不同。
回归集可以从真实会进入知识库的文档类型中抽取。
至少要覆盖普通电子 PDF、扫描件、双栏页面、无边框表格、跨页表格、带印章或水印的页面,以及项目实际支持的 PPT、图片说明或代码块。
关键不在数量一开始有多大,而在是否覆盖已知风险。
每个样本也不必逐字标注整份文档。更可行的方法是标注关键区域。
例如,一张双栏页标出正确阅读顺序;一张表格标出表头、关键单元格和跨页关系;一张扫描页保留人工核对的关键句;一个章节标出正确标题路径和原页坐标。
这些区域应该与用户会问的问题相连。
如果某页包含“申请材料”答案,就记录答案所在区域。下一次解析后,不仅检查这几个字是否出现,还要检查它是否仍属于正确标题,是否能组成完整 Chunk,是否能够回到同一原页。

回归集不追求一开始标完整个知识库,而是固定真实难页、关键结构和证据位置,让每次解析改动都能复现比较。
还要保存解析器版本和配置。
同一份文档今天和明天输出不同,可能是文件变化,也可能是 OCR、版面模型、参数或后处理规则变化。没有版本记录,团队只能看到结果不一致,却无法还原原因。
一条回归记录至少应知道:输入文件版本、解析器和配置、处理时间、关键区域结果、异常类型,以及这次结果是否被允许入库。
怎样把解析评测和 RAG 问题连起来?
解析结果看起来正确,不代表用户一定能搜到答案。
但最终答案错误,也不代表一定是解析器的问题。
最有效的办法,是给评测问题同时标注参考答案和支持证据。
支持证据不能只写文档名。长文档里可能有很多相近段落,找到同一份文件不等于找到回答问题的那一段。最好记录到内容区域、页码或对应 Chunk。
有了证据位置,错误就能沿链路拆开。
第一种情况,正确证据在解析结果里就不存在。
这时先看原页是否漏识别、顺序是否错乱、表格是否丢结构,或者清洗时是否把内容误删。
第二种情况,解析结果里有证据,但切分后任何 Chunk 都没有完整保留。
这时问题更可能在切分边界、标题继承、表头补齐或跨页合并。
第三种情况,正确 Chunk 存在,却没有进入前几条检索结果。
这时再查问题改写、关键词与向量召回、过滤条件、融合和重排。
第四种情况,正确证据已经排在前面,模型仍然答错。
这时才去看提示词、上下文组织、引用约束和生成模型。

先确认正确证据在哪一层消失,再决定检查解析、切分、检索还是生成。最终答案错误不能直接归因于大模型。
这种分层有一个直接好处:修改目标变得清楚。
如果正确单元格从未被还原,换 Rerank 没有意义。如果证据存在但总排在后面,继续调 OCR 也不会解决排序问题。
指标应该怎样选?
解析评测不需要堆满所有指标,但每个指标都要对应一个可以处理的问题。
文字层可以检查字符或词的差异、关键句覆盖以及噪声比例。对于普通电子文本,重点往往是漏段和重复;对于扫描页,才更需要关注 OCR 识别质量。
顺序层可以检查固定区域的先后关系。双栏页是否先读完一栏,跨页段落是否错误插入页眉,列表前导句是否仍在列表之前。
结构层可以看标题层级、表头和数据行关系、图片说明关联、代码块边界。这里更适合按关键结构是否完整计算,而不是把整个页面压成字符相似度。
追溯层可以检查返回内容是否带有正确文件、页码、区域和标题路径。引用落在错误页,即使答案文字一样,也不能算完全正确。
下游还要看检索指标。
Recall@K 关注标注证据有没有进入前 K 条,Precision@K 关注返回内容里有多少真正相关,MRR 关注第一条正确证据排在哪里,冗余率关注前几条是否反复返回相邻重复片段。
这些检索指标不能替代解析指标。
如果一个问题答错,Recall@K 下降只告诉我们证据没被找回。继续查看解析关键区和 Chunk,才能知道它是在入库前消失,还是在检索时落后。
同样,解析指标也不能替代检索测试。页面结构看起来完好,却可能因为标题、表头或位置没有进入可检索字段,导致用户问题仍然找不到答案。
一张解析评测记录,应该留下什么?
评测结果如果只剩一个汇总数字,下一次失败时很难复用。
更实用的记录方式,是把文档、页面、关键区域、检索问题和处理版本连在一起。
文档层记录文件标识、格式和版本,用来确认本次比较面对的是同一份输入。
页面层记录页码、页面类型和已知风险。例如它是普通正文、扫描页、双栏页还是跨页表格的一部分。这个分类不要求一次做到完美,目的是让结果可以按问题类型汇总。
区域层记录原页坐标、内容类型、人工确认的文字或结构,以及解析结果是否通过。表格区域不能只存整页截图,还应知道哪一行表头、哪个单元格和哪段续表关系最关键。
问题层记录用户问题、参考答案和支持证据位置。这样才能把“页面解析正确”与“证据可以被召回”放在同一条记录里。
版本层记录解析器、OCR、后处理和切分配置。某次改动只调整了顺序校正,就应该能比较它对双栏样本和其他页面分别造成了什么影响。
最后保留失败原因和处理决定。
失败原因可以是漏字、错序、表格断裂、重复内容、位置错误或无法判断。处理决定可以是放行、重试、降级或人工复核。不要只写“未通过”,否则系统知道它失败,却不知道下一步送到哪里。
这种记录让解析评测从一次验收变成可重复的工程过程。新版本上线前可以按类型回归,线上出现问题也能快速找到相似样本,而不是重新从一堆文件里猜测原因。
记录还要保留原始解析片段,而不只是人工修正后的版本。否则评测人员看到的是已经改好的答案,无法判断解析器本身做对了多少,也无法确认后处理是否误改了原文。
四个坏样本,分别应该看什么?
下面是教学用例,用来解释评测方法,不代表真实项目已经得到某组实验结果。
标题层级丢失,但所有文字都在
文字覆盖可以很高,问题出在结构保留。
人工标注章节标题、列表前导句和正文的隶属关系,再比较解析结果。检索测试要分别问章节主题和具体条目,确认返回片段既包含答案,也知道答案属于哪个标题路径。
扫描页只有少量字符
先检查图像是否清晰、方向是否正确,页面有没有文本层,再看 OCR 输出和置信信息。
如果关键句缺失,这一页不能因为任务没报错就算通过。它应进入重试或复核,并把文档状态标记为不完整。
同一段内容进入了两个 Chunk
字符覆盖看起来更完整,候选空间却被重复证据占用。
评测要比较规范化文本、来源区域和稳定 ID,判断重复来自解析器多路输出,还是切分与重跑过程。检索测试还要观察前 K 条中近重复内容是否挤掉了其他必要证据。
引用能回答问题,却跳到错误页
这属于位置追溯失败。
检查内容 ID、页码、坐标和源文件版本在解析、切分和索引时是否保持一致。不能因为答案内容正确就忽略引用错误,因为用户无法验证来源。
坏样本要长期保留。
修复一次只说明当前版本通过。解析器升级、文档类型扩展或清洗规则改变后,都可能让旧问题再次出现。
固定回归集也不能永远不变。它负责保证已知问题不复发,却可能看不到后来出现的新文档和新失败。更稳妥的做法,是让固定集和持续抽检分工:固定集守住已经确认的关键结构,抽检从新入库资料、失败任务和用户无法找到答案的反馈中补充未知问题。
新样本进入回归集之前,要先确认失败发生在哪一层。最终回答错误但解析结果完整的样本,不应直接塞进解析集;否则评测会把检索或生成问题误标成解析缺陷。应先保存原页、解析结果、Chunk、检索候选和最终上下文,再确认正确证据是在解析阶段丢失、关系错乱或位置漂移。
抽样也要防止只挑容易查看的页面。普通正文数量多,如果按文件随机抽取,回归结果很容易被简单页面主导。可以按扫描、双栏、表格、图文混排、代码和已知异常分别分层,再按文档类型与处理路线查看结果。汇总数字可以保留,但发布门槛要继续关注关键类型和阻断样本。
当某个线上问题被修复后,应把触发问题的最小页面、预期结构、证据位置和用户问题一起固化。这样下一次升级不仅能检查文字是否还在,也能确认结构、引用和检索仍然成立。回归集因此是一份持续积累的故障知识,而不是一次验收后不再维护的文件清单。
人工标注本身也需要验收。两个人可能对跨页表格是否合并、图片说明属于哪一段、脚注是否必须随正文返回有不同判断。若标准答案不一致,解析器无论输出什么都可能被一部分人判错。
可以先写清标注单位和判定规则,再让少量重叠样本由多人独立检查。出现分歧时保留原页和理由,讨论后更新规则,而不是只强行选择一个标签。对无法确认的区域应标成待定,不要把猜测写成唯一标准。
评测记录还要区分机器原始结果与人工修正结果。前者用于判断解析能力,后者可以作为后续知识内容,但不能反过来证明解析器已经正确。面试时说明这一点,能够避免用人工整理后的完美文本给自动链路打出虚高成绩。
解析版本应该怎样决定是否发布?
回归结果最终要落到一个发布决定,而不是停在“新版平均分更高”。
先固定输入范围。候选版本与当前版本使用同一批文件、同一组关键区域和同一批检索问题运行,并保存解析器、OCR、后处理和切分配置。输入与配置没有对齐,分数变化就无法归因。
再定义阻断条件。关键证据缺失、标题与正文关系错误、来源位置跳错,以及已经修复的高风险坏样本再次出现,都不应被普通页面上的小幅改善抵消。平均结果上升但关键条款页退化,仍然不能直接发布。
随后查看逐样本差异。每个变化要能落到具体文档、页面、区域和问题,说明它属于文字、顺序、结构、追溯还是检索层。无法解释的批量变化应先暂停,检查版本映射或输出结构是否发生了意外调整。
发布决定可以分三类:全部通过后替换旧版本;只有低风险类型通过时限定范围发布并保留复核;触发阻断条件时拒绝发布或回到上一版本。无论选择哪一种,都要保存输入版本、配置、失败样本和决定理由,下一次回归才能在同一基线上继续比较。
这样,解析评测不再只是质量报告,而成为版本发布门槛。它回答的不只是“新版是否更好”,还包括“哪些内容可以放行、哪些风险仍然存在、出了问题能否回到上一份可用结果”。

固定输入与配置完成对照,阻断条件守住高风险样本,逐项差异再决定放行、限定发布或拒绝版本。
面试官继续追问,怎么接?
为什么不能只看 OCR 准确率?
因为 OCR 只覆盖文字识别。电子 PDF 可能根本不需要 OCR,却仍会出现双栏顺序、标题层级和表格结构问题。即使字符全对,顺序和关系错误也会破坏证据。
解析评测为什么一定要带检索问题?
因为 RAG 最终需要找到支持答案的内容。结构检查能发现页面是否保真,检索问题则验证这些结构是否真的成为可召回证据。两者结合才能区分“页面好看”和“系统可用”。
自动生成评测问题可不可以?
可以用来扩充初稿,但要人工检查问题是否自然、参考答案能否由证据推出、证据位置是否准确,以及是否只是对同一句话换词。否则评测集本身就可能把错误当标准。
一个总分方便汇报,为什么还要拆指标?
总分可以用于观察趋势,但排错必须保留分层结果。相同总分可能对应完全不同的失败类型,只有知道是漏字、顺序、结构还是追溯,团队才知道下一步改什么。
平均分提高,但一个高风险样本退化,能不能发布?
不能只凭平均分放行。先判断退化样本是否影响关键事实、权限、金额、时效或来源核验;若命中阻断条件,应拒绝发布或限定新版本只服务已验证的文档类型。汇总指标用于看趋势,高风险样本需要单独通过。
解析质量验收,面试时按四层展开
需要把方法讲完整时,可以按下面的顺序组织:
文件上传和解析任务成功,只说明程序执行完成,不能证明内容适合 RAG。我会把解析质量拆成文字覆盖、阅读顺序、结构保留和位置追溯四层,分别检查正文是否完整、多栏和跨页是否读对、表格与标题关系是否保留,以及每段内容能否回到原文件和页码。
评测上,我会从实际文档里固定普通 PDF、扫描件、标题层级、表格、水印等难页,人工标注关键区域、正确结构和证据位置,并保存解析器与配置版本。每次修改后先跑页面级回归,再用同一批问题、参考答案和正确证据做检索测试。
定位错误时,证据没有进入 Chunk 就先查解析和切分,Chunk 存在但没召回就查检索,证据已经排在前面仍答错才查生成。新版本还要在同一批输入和配置上与当前版本比较;关键证据缺失、来源跳错或旧高风险样本复发时直接阻断,全部通过后再进入正式索引,并保存每次发布决定。
真正的分界线,是能否把“任务完成”“质量可用”和“版本允许发布”三个结论分别证明。只有一个解析成功率,既无法支撑这三个决定,也无法解释退化发生在哪一层。