表格、代码、扫描件这类「脏文档」怎么处理进 RAG?
谁在问:有真实落地经验的面试官;toB 项目团队必问
口语化问法
- 你们的文档都是什么格式?PDF 里的表格怎么处理的?
- 客户给的是扫描件怎么办?
- 文档预处理这块你们花了多少精力?
考察意图
这题几乎只有真做过项目的人能答好,因为解析是 demo 和生产之间最大的落差。教程里的 RAG 都从干净的 txt 开始,真实项目里 60% 的时间耗在把 PDF 变成能用的文本上。面试官问这题,就是在快速验证你是「跑过教程」还是「交付过系统」。
参考答案
60 分答案(及格线)
按文档类型分类处理:原生 PDF 用 pdfplumber / PyMuPDF 抽文字,注意多栏排版和页眉页脚要去掉;扫描件没有文字层,要走 OCR 或直接交给多模态模型识别;Word/PPT 用 python-docx / python-pptx 并保留标题层级;网页要做正文抽取去掉导航和广告;表格拍扁成文本会丢语义,一般转成 Markdown 表格整表存为一个 chunk;代码按函数或类的边界切,不能按行数切。
90 分答案(有生产经验的回答)
补三个只有踩过坑才知道的点:
- 表格的双表示法:整张表存为一个 chunk(Markdown 格式,保留行列关系),但额外用模型生成一句自然语言摘要(「本表描述 X 产品各型号的功率与接口参数」)作为检索用的向量。因为用户的提问是自然语言,直接和表格的数字文本做向量匹配几乎匹配不上——检索用摘要,回答用原表。
- 标题层级是最高性价比的投入:把「一级标题 > 二级标题 > 三级标题」这条路径作为元数据挂在每个 chunk 上。它同时服务三件事:检索过滤、给模型交代上下文、引用溯源显示出处。做这一件事的收益往往超过调半天参数。
- 解析质量要有验收:不能解析完就直接入库。实用做法是抽样人眼检查 + 自动化规则告警(比如某文档抽出的字符数远低于文件大小预期,多半是扫描件或解析失败),把解析失败的文件挑出来单独处理,而不是让它们静默地变成空 chunk 污染知识库。
再补一句判断:2026 年多模态模型的成熟改变了这一环的性价比——复杂版面的 PDF(图文混排、多栏、表格跨页)直接交给多模态模型做版面理解,往往比传统解析库调一堆规则更省事,代价是成本更高。所以策略是规则解析打底,复杂文档兜底给多模态模型。
追问链
解析是 demo 与生产最大的落差,五层全在验你踩过哪些坑
表格转成 Markdown 后,用户问「A 型号的功率是多少」检索得到吗?
期望直接匹配往往不行 —— 表格里是密集的数字和短标签,与自然语言问句在向量空间距离远;解法是「摘要向量 + 原表内容」双表示,或把关键行展开成自然语言句子(「A 型号的额定功率为 500W」)额外建索引信号坚持说「转成 Markdown 就能检索到」→ 没实际测过表格问答扫描件 OCR 出来有错字,怎么降低影响?
期望BM25 侧受影响最大(错字直接匹配不上),要提高向量检索权重;OCR 后用 LLM 做一遍纠错;型号、金额这类关键字段人工抽检;答案里标注「本内容来自 OCR 识别,可能存在误差」信号能想到「OCR 错字对 BM25 的伤害大于对向量」→ 理解很到位一个段落跨页了,页眉页脚夹在中间,怎么处理?
期望先做页眉页脚识别与剔除(位置规则或重复文本检测)→ 再做跨页段落合并(依据是否以句号结尾、缩进、字号);这类清洗规则最好可配置,不同客户的文档模板差异很大信号能说出「用重复出现的文本识别页眉页脚」这种具体手段 → 是实操过的解析这一环你怎么做质量验收?
期望抽样人眼检查最有效;自动化侧做字符数 / 文件大小比例告警、空 chunk 检测、乱码率检测;再建一份「解析失败清单」单独人工处理,绝不静默入库信号答「解析完就入库」→ 知识库大概率已经被污染客户扔来 5000 份格式各异的历史文档,工期两周,你怎么排优先级?
期望① 先做文档分布统计(哪几类占了 80% 的量和访问频次)→ ② 集中处理高频高价值的类型 → ③ 小众格式先降级处理或标注「暂不支持」→ ④ 先跑通端到端链路再回头补解析质量;全程明确告知客户哪些类型覆盖、哪些不覆盖,而不是承诺全量高质量信号想一次性把所有格式都做完美 → 缺乏交付节奏感
这题几乎只有真做过项目的人能答好:第 4 层的质量验收是分水岭 —— 没有抽检、告警和失败清单,知识库就在慢性中毒;第 5 层再验交付节奏感。
评分要点
- 按文档类型分类给出处理手段
- 知道表格不能简单拍扁,能说出摘要/双表示或行展开的思路
- 提到保留标题层级作为元数据
- 知道代码按 AST/函数边界切
- 提到扫描件走 OCR 或多模态
- 加分:有解析质量验收意识(抽检、告警、失败清单)
- 加分:能说出多模态模型在复杂版面上的性价比变化
常见错误
只答「用 PyPDF 抽文本」,没有类型分流。
认为表格转 Markdown 就万事大吉。
完全不提元数据和标题层级。
没有任何质量验收环节——解析失败的文件静默入库是知识库慢性中毒的主因。
说「这块交给算法同学/开源库处理就行」——这题问的就是工程细节,甩锅式回答直接暴露没参与过。