先看一个多格式入库场景。
同一个知识库页面里,用户上传了一份制度 PDF、一套培训 PPT 和一张扫描图片。三个文件都显示“上传成功”,但这并不等于它们已经变成了可以检索的知识。
有的 PDF 能直接读取字符,有的整页只是一张图片。PPT 的标题、项目符号和页序本身就在表达结构。扫描件没有可复制的正文,必须先经过文字识别。三类文件若都粗暴转成一大段纯文本,格式虽然统一,标题、位置、表格关系和图片信息却可能一起消失。
这对应一道 RAG 项目面试题:
PDF、PPT 和扫描件应该怎样进入同一个知识库?为什么不能只写一个通用解析函数?
一种常见但不完整的回答是:“判断文件后缀,调用不同的库,再把文字拼起来。”
这只能算说出了入口。面试官还会追问:不同解析器统一什么?页面只成功一半怎么办?怎样证明内容能够被检索,而不是只拿到一堆字符?
为什么“上传成功”不等于“可以检索”?
文件上传解决保存问题。RAG 入库要把内容转成可搜索、可引用、能定位到原文的单元。
RAG 可以分成离线知识入库和在线问答两个阶段。文档解析处在离线阶段最前面。解析器交给后面的内容如果已经丢失或错乱,分块、向量化和入库仍可能正常运行,只是它们会忠实地处理一份错误材料。
多格式入库首先判断“知识以什么形式存在”,不能只看文件能不能打开。
电子 PDF 的正文可能存在字符层,可以按页读取文字,但多栏排版、表格和浮动图片仍需要版面信息。扫描 PDF 看上去也是 PDF,页面内部却可能只有图像。PPT 不是一篇连续文章,一页中的标题、文本框、项目符号、图片和备注共同组成一张幻灯片。纯文本没有复杂版面,却还可能遇到编码与段落清洗问题。
只按扩展名分流还不够。同一个 PDF 中可能前几页有字符层,后几页是扫描附件。文件级判断之后,还要保留页面级判断和降级入口。

文件可以从同一个入口上传,但内容形态不同。统一的是最后交给下游的结构,不是上游处理方法。
这张图有个关键边界。解析器负责忠实恢复内容、结构和位置,不负责生成漂亮答案。后面的检索器按问题找证据,大模型再根据证据组织回答。
一条多格式解析链路应该怎么走?
可以把完整链路拆成六步。
第一步是识别文件和基础检查。
系统先确认文件类型、是否损坏、是否加密、页数或幻灯片数量是否可读取。扩展名可以作为线索,但不能成为唯一依据,因为文件名可以被改错,文件内部也可能混合不同内容形态。
第二步是格式路由。
PDF 进入 PDF 路线,PPT 进入幻灯片路线,图片或扫描件进入文字识别路线。常见做法是采用不同原生库处理不同格式,例如 PDF 按页提取,Word 按段落提取,表格文件按行转换,文本文件处理编码回退。复杂材料则还需要版面、表格和图片专项处理。
第三步是解析和结构恢复。
这一步不能只拿正文字符串。PDF 至少要保留页码以及能够帮助恢复顺序的位置;PPT 要区分标题、正文、项目符号和图片说明;扫描件的文字识别结果要带文字框坐标与质量信息。遇到表格时,还要恢复行列关系,不能只把每个单元格的字依次拼在一起。
第四步是统一输出。
不同解析器最终可以交出同一种结构单元。这不是某个框架的固定类名,而是一种统一约定。常见的最小字段集包括正文、内容类型、来源文件、页码或幻灯片位置、标题路径和解析状态。需要引用原图时,还要保留坐标或资源标识。
第五步是清洗和切分。
统一结构之后,系统才能用相对一致的方式去掉重复页眉页脚、合并同一段落、保护表格与图片说明,再按自然段或语义单元切分。切分不能反过来猜原文件结构,否则前面解析阶段丢掉的信息很难补回来。
第六步是索引与状态记录。
成功内容进入后续向量化和检索,失败内容保留错误阶段、所在页面和是否已经降级。这样用户问“为什么这份资料搜不到”时,系统能够先回答它有没有真正完成解析和入库。

路由发生在前,统一发生在后。每条路线都要保留结构与位置,再交给同一套切分和索引流程。
PDF、PPT 和扫描件分别不能丢什么?
PDF 不能只在文件级选择一条路线
同一份 PDF 可能同时包含电子正文、扫描附件和以图片形式嵌入的证明材料。只在文件入口判断一次“这是 PDF”,然后整份交给同一个提取器,最容易出现静默缺页:普通页面有文字,扫描页却只剩页码或空内容,最终任务仍然显示成功。
PDF 路线因此还要保留页面级结果。每页至少需要知道采用了哪种来源、得到多少有效内容、是否存在需要继续处理的图像区域,以及当前结果能否进入统一输出。这样第一页走字符提取、附件页走文字识别时,下游仍能按照页码和原文件顺序重新组织,而不会把一份混合 PDF 当成两份互不相关的材料。
这里强调的是路由职责,不是要求多跑一次所有解析器。已经得到完整内容的页面继续向下处理,无法取得正文或结构异常的页面才进入补充路线,并把采用的处理方式写进解析状态。
PPT 不能只把文本框全部拼起来
一张幻灯片通常先用标题说明主题,再用项目符号展开层级。图片、流程图和备注可能补充正文里没有的信息。
如果只遍历文本框并按程序返回顺序拼接,某个步骤可能离开了它所属的标题,二级要点也可能被当成新的主题。图片里的关键信息如果完全不处理,页面虽然有内容,真正的结论却没有进入知识库。
PPT 路线至少要保留幻灯片编号、页标题、项目符号层级、文本框类型以及图片与相邻说明的关系。后面即使把一页拆成多个片段,每个片段也应知道自己属于哪一页、哪个主题。
扫描件不能把文字识别结果当成最终正文
扫描件需要先渲染或读取页面图像,再进行文字识别。识别结果通常包含文字、坐标和质量信息。接下来还要恢复阅读顺序,区分标题、正文、表格和图片区域。
普通文字识别可能把表格内容串成一长行,也可能破坏代码缩进。对人眼来说,一列数值离开表头后往往没有意义。扫描路线必须把“看见了字”和“恢复了结构”分开验收。
三个典型路由错误,分别发生在哪里?
为了避免把教学案例误写成真实项目,下面三个场景只用于说明排查方式。
场景一,混合 PDF 的扫描附件被当成空页
一份 PDF 的正文页能够正常提取,最后几页附件却只有图像。文件级解析器因为前面已经读到大量文字,把整份任务标成成功,扫描附件没有进入补充路线。
在这个教学场景中,可以先按页比较原始页面、有效文字框和输出状态。若附件页只有页码或重复页眉,路由器应把它标成待补充识别,而不是把“字符串非空”当成正文存在。验证设计时还要确认附件页仍保留原文件 ID 和页码顺序,避免补充结果变成一份新的孤立文档。
场景二,PPT 找到了步骤,却不知道属于哪个主题
检索结果里出现“提交申请、等待审核、查看结果”,但没有页标题,读者无法判断这是年假流程还是报销流程。
这种情况要看标题是否在解析时被标成独立类型,标题路径是否写进每个内容单元,以及切分时有没有让正文继承上级标题。单纯把标题和正文复制到一个大字符串里,也可能在后续切分时再次分开。
场景三,不同解析器对“位置”的表达没有统一
PDF 解析器返回页码和坐标,PPT 解析器返回幻灯片编号与文本框,图片路线只返回一个临时文件名。三路内容虽然都有正文,统一输出时却无法用同一种方式回答“来自哪里”。
这时问题不在某一路识别效果,而在适配层。统一结构需要规定来源文件、页或幻灯片位置、区域标识和解析状态怎样表达;某一路暂时拿不到的字段要明确为空并记录原因,不能用含义不同的数字硬塞进同一个 page 字段。否则检索可以命中,引用与排错仍然断链。

混合页面漏路由、PPT 标题丢失和位置字段不统一,都会让下游正常处理不完整内容。排查要回到路由结果与统一输出。
一页失败,为什么不该拖垮整份文件?
解析不是只有“成功”和“失败”两个状态。
一份长 PDF 可能只有某一页是模糊扫描表格。前面的电子文本页已经可以正常提取,后面的普通页面也没有问题。如果文件级任务因为一页异常全部回滚,用户会重复等待;如果忽略异常并标记整份成功,知识库又会悄悄缺一页关键内容。
更可操作的设计是文件有总体状态,页面或内容单元有细分状态。可以区分等待处理、正在解析、部分成功、需要复核、失败和完成。成功页面可以继续进入后续流程,异常页面记录失败阶段、异常类型、耗时和使用过的降级方式。
重试也要区分原因。临时服务超时可以受控重试,文件损坏、密码保护或不支持的版面则需要换处理路径或人工处理。对确定性错误反复执行同一个解析器,只会占用队列,不会自动变正确。
面试里讲到这里,不用展示复杂状态机。关键是同时表达“文件整体可用”和“局部内容有风险”。
一页失败之外,面试官还可能追问同一份文件重新解析怎么办。这里要把“任务重试”和“内容重复入库”分开。任务因为临时超时再次执行,不代表可以把已经成功的页面再写一遍;解析规则升级后重新生成内容,也不能让旧版本继续参与检索。
一种可检查的做法,是给文件版本、页面和内容单元建立稳定关联。任务开始时记录输入文件版本与解析配置,每页完成后保存处理状态和输出标识。重跑时先读取已有状态,只重做失败页或受新规则影响的页面;得到新结果后,再比较哪些内容没有变化、哪些需要替换、哪些应该删除。只有整批必要页面通过验收,才把新版本切换为可检索状态。
这个过程还要防止两类“看起来成功”的错误。第一类是旧内容没有退出索引,导致同一道问题同时命中新旧证据。第二类是某一路适配器改变了位置字段,正文虽然相同,引用却跳到错误页。验收时因此不仅要比较文本数量,还要抽查稳定标识、来源位置和旧版本清理结果。
如果文件只部分更新,例如 PPT 替换了一页,系统也不应默认整份资料完全不变。先根据文件和页面版本确定影响范围,再让关联的 Chunk 重建;无法证明未受影响的内容,不要仅凭文件名相同直接复用。面试时把这条更新链路讲清楚,能够说明统一解析接口不只是“把格式转成文本”,还承担了可恢复、可替换和可追溯的工程契约。
文件类型判断本身也要能失败。扩展名、上传时声明的类型和文件内部特征可能互相冲突,例如文件被错误改名,或者压缩容器损坏后只能读到部分结构。此时不应凭其中一个信号强行进入某条解析路线,更不能在解析器返回空结果后仍标记完成。
可以把类型判断结果、冲突信号和尝试过的解析路线写进任务记录。能够安全确认格式时再进入对应解析器;无法确认、文件加密或内容损坏时,进入隔离与复核,并向用户返回可以理解的原因。这样既避免错误解析器制造乱码,也能区分“格式不支持”和“解析器临时失败”。
验收时可准备扩展名错误、混合页面、加密文件和截断文件,确认系统不会静默生成空知识。面试官问异常输入时,回答重点不是罗列所有文件魔数,而是说明类型识别有多信号校验、失败状态和可追踪的路由决定。
怎么证明统一输出没有掩盖问题?
“成功解析了多少文件”只能说明程序跑完,不能说明知识可用。
第一层验收看内容覆盖。
准备电子 PDF、扫描 PDF、PPT、纯文本以及带表格的代表性样本,核对标题、正文、图片说明和表格是否存在。这里不需要先追求一个漂亮总分,而要能列出哪一类内容容易缺失。
第二层验收看结构保真。
检查页面路由是否覆盖混合内容、标题和正文是否保持隶属关系、表头与单元格是否对应、项目符号层级是否仍在,以及图片和说明是否绑定。文字完全识别但关系错误,仍然应该判定为解析问题。
第三层验收看位置与溯源。
随机抽取内容单元,确认来源文件、页码或幻灯片编号能够回到原文。扫描页还应验证文字框位置是否能指向正确区域。没有位置,后续引用只能告诉用户“来自某个文件”,很难核验具体证据。
第四层验收看端到端检索。
端到端验收最好设计成跨格式对照:选择同一个业务主题,分别放入 PDF、PPT 和扫描件,再用同一道问题检查三种路线返回的证据。比较的不只是有没有命中,还包括标题是否随正文保留、位置能否使用同一种接口返回,以及某一路失败时状态是否可见。这样更容易把格式适配造成的错误,与问题本身或检索配置造成的错误分开。
第五层验收看失败可观察性。
故意放入损坏文件、缺少字符层的页面和结构复杂的表格,确认系统能指出失败发生在文件识别、文字提取、版面恢复、表格处理还是切分阶段。错误如果只能表现为最后一句“没有搜索结果”,排查链路仍然不完整。

内容覆盖、结构保真、位置溯源和真实问题检索要一起看。总字数相近不能证明解析正确。
验证时最好保存原始文件、解析中间结果、统一内容单元和最终检索结果。出现 bad case 后,可以沿这四层向前定位,而不是只在最终答案上猜原因。
解析路由被继续追问时,先守住哪些边界?
这一组追问会从“为什么分流”一路落到统一字段、局部失败和故障归因。回答时要始终区分设计原则与本人实测;处理开销、判断阈值和降级策略,只能用自己的代表性样本验证。
为什么不把所有文件都转成图片,再统一做文字识别?
因为“全部转图”把本来确定的原生结构变成了重新识别的问题。PDF 的文字位置、PPT 的文本框与项目符号、表格文件的行列原本都能直接取得;统一转成图片后,这些关系要再次猜测。多格式路由的原则应是优先保留每种文件最丰富的原生表示,只对缺失区域补充图像识别,而不是为了统一入口主动降级全部输入。
统一输出结构最少需要哪些字段?
至少包括正文、内容类型、来源文件、页码或幻灯片位置、标题路径和解析状态。表格、图片或扫描文字还需要能回到原区域的标识。字段不是越多越好,关键是后续切分、过滤、引用和排错真正用得到。
PDF 中既有电子文本页,又有扫描页怎么办?
先在页面级判断可用字符层。能可靠提取的页面走字符路线,需要文字识别的页面走图像路线,最后统一到相同结构。不要因为文件后缀是 PDF,就假定整份文件只有一种内容形态。
某一页解析失败,是否还应该入库?
可以让成功页面继续,但必须把文件标成部分成功,记录缺失页和失败原因。是否允许这份文件对外检索,要根据缺失内容的重要性和业务风险决定,不能在没有提示的情况下把部分结果伪装成完整结果。
怎样区分解析问题和检索问题?
先检查正确内容是否存在于统一输出以及切分结果中。如果原文已经丢失、顺序错乱或字段关系被拆散,问题在解析或切分。如果正确片段完整存在却没有被召回,再进入检索参数、模型和排序的排查。
把多格式解析收成一条工程回答
收口时不用重复三种文件的定义,而要把“保留原生结构、统一下游契约、局部失败可恢复、结果可验收”连成一条线:
PDF、PPT 和扫描件不能共用一种解析方法,因为它们承载内容和结构的方式不同。PDF 还可能在同一文件里混合电子页和扫描附件,需要继续做页面级判断;PPT 的标题、项目符号、页序和图片共同表达语义;扫描件则要先做文字识别,再恢复位置与结构。我的设计会先识别格式和内容形态,把不同内容路由到各自的解析器。不同路线最后统一输出正文、内容类型、标题路径、来源位置和解析状态,再进入清洗、切分与索引。失败处理上不会只返回文件级成功或失败,而会保留异常页面、失败阶段和降级记录。验收时也不只看提取字数,而是检查路由覆盖、结构保真、原文定位,并用固定问题验证正确证据能否被召回。这样统一的是下游接口,同时保留了每种格式真正需要的处理能力。