01
60 秒回答模板
可以按一条流水线回答:第一层是 ingestion,接收文件、记录来源、hash、版本、租户和权限;第二层是 format detection,不只看后缀,还要看 MIME、magic bytes 和内容特征;第三层是 parser,根据 PDF、DOCX、表格、图片、HTML/MD/TXT 采用不同解析器,尽量保留标题、页码、表格、图片、脚注和阅读顺序;第四层是 normalization,把解析结果统一成 document-section-chunk-asset schema;第五层是 chunking 和 enrichment,做规范化、去重、语言识别、表格结构化、OCR、caption、metadata 注入;第六层是 embedding 和 indexing,写入向量库、关键词索引和元数据存储;第七层是 reliability,使用异步任务、幂等键、重试、DLQ、监控、人工回溯和评估集保证生产可用。
考点 解析要保留结构
难度 真实面经题
回答目标 让候选人能从后端系统设计角度完整描述 RAG 数据解析与入库流水线,覆盖多格式解析、结构保留、chunking、embedding、索引、权限、幂等和可靠性。
02
深入解析
01 接入层和元数据
生产级 RAG 不是拿到文件后直接切文本。接入层要记录文件来源、租户、业务线、上传人、ACL、文件 hash、版本号、更新时间、解析状态和原始文件位置。hash 用于去重和幂等,版本用于增量更新和回滚,ACL 用于检索时权限过滤。没有这些元数据,后续即使向量召回准确,也可能出现重复、越权或无法追溯的问题。
02 格式识别和任务路由
文件类型不能只依赖扩展名,因为用户可能上传错误后缀或复合文档。应结合 MIME、magic bytes、解析探测和内容特征判断格式,再路由到对应 parser。对于大文件、压缩包、加密文件、损坏文件和超时文件,要有明确状态机:待解析、解析中、部分成功、失败可重试、失败需人工处理,而不是让 worker 静默失败。
03 PDF 解析策略
PDF 需要先判断是数字文本 PDF 还是扫描件。数字文本可以抽取文字、页码、坐标、标题和阅读顺序,但要处理多栏、页眉页脚、脚注、公式和跨页表格;扫描件需要 OCR,并保留 OCR 置信度和页面图像引用。复杂 PDF 中表格和图片不应被简单丢弃,而应作为结构化表格 chunk 或 asset 进入后续索引。
04 DOCX、富文本和 Markdown
DOCX 解析要保留段落、标题层级、列表、表格、页眉页脚、脚注、批注和内嵌图片。Markdown 和富文本要保留标题、代码块、链接文本、引用块和表格。对 RAG 来说,标题层级非常重要,因为它能作为 chunk 的上下文前缀,帮助召回和生成时解释片段属于哪个章节,而不是让模型看到孤立句子。
05 表格和结构化文件
表格不能简单按行拼成纯文本。需要识别 sheet、表头、合并单元格、单位、行列含义、主键列和备注。小表可以整体作为一个 chunk,大表可以按主题区域、表头加若干行切分,并把表头重复注入每个 chunk。对于 CSV、XLSX 和文档内表格,还可以同时生成结构化 JSON 表示和自然语言摘要,便于向量召回与精确过滤结合。
06 图片和多模态内容
图片至少要区分纯装饰图、包含文字的截图、图表、流程图、证件类图片和照片。包含文字的图片需要 OCR,图表和流程图可以生成 caption 或结构化描述,必要时保留图片 asset id 和页面位置,让回答可以追溯到原图。多模态内容的 embedding 可以采用文本描述 embedding、视觉 embedding 或二者结合,取决于检索需求和模型能力。
07 规范化、切分和统一 schema
解析输出应统一成 document、section、chunk、asset、metadata 等内部结构。chunking 不应只有固定 token 长度,还要利用标题、段落、列表、页码、表格边界和语义完整性。每个 chunk 要携带文档 id、版本、章节路径、页码或单元格范围、语言、权限、时间和解析器版本。这样向量命中后可以展示上下文、定位原文,并支持重建索引。
08 入库、检索和可靠性
入库通常包括对象存储保存原文和中间产物,关系库或文档库存 metadata,向量库存 embedding,关键词索引支持 BM25 或精确匹配。写入要幂等,支持删除 tombstone、版本切换和增量重建。可靠性上要有异步队列、超时控制、重试退避、死信队列、parser sandbox、指标监控、抽样人工质检和端到端检索评估,避免解析成功率高但召回不可用。
03
易错点
- 把 RAG 数据准备简化为读取文件、切 chunk、写向量库。
- PDF 解析不区分数字文本和扫描件,导致 OCR、页码和版面信息缺失。
- 把表格按普通段落切碎,丢掉表头、单位和行列关系。
- 忽略视觉素材、流程材料和表格影像中的关键信息,导致 OCR、caption 和原始区域定位都无法进入检索链路。
- chunk 里不保存文档版本、章节路径、页码、权限和解析器版本。
- 只做向量索引,不保留原文、metadata、关键词索引和可追溯定位。
- 没有幂等、重试、死信队列和增量重建机制,失败后只能人工补救。
- 缺少解析质量和检索质量评估,无法知道入库成功是否真的提升问答效果。
04
面试官追问
PDF 多栏和跨页表格怎么处理?
需要利用坐标、版面分析和表格检测恢复阅读顺序。多栏文本不能简单按抽取顺序拼接,跨页表格要识别表头延续和页码范围,必要时把表格作为独立结构化对象切分,而不是混入普通段落。
为什么 RAG 入库要保存 parser version?
解析器升级后,同一个文件可能产生不同 chunk 和 embedding。保存 parser version 可以判断哪些文档需要重建索引,也能在回答质量异常时回溯是内容变了、解析变了还是 embedding 模型变了。
表格适合怎么做 embedding?
小表可以用表名、标题、表头和全部行生成文本表示;大表可以按业务主键或行块切分,并在每个 chunk 重复表头和单位。对于需要精确数值查询的场景,还应保留结构化表格用于过滤或计算,不能只依赖向量相似度。
如何处理图片里的信息?
对含文字图片做 OCR,对图表和流程图生成描述或结构化结果,并保留原图位置、页码和置信度。检索时可以召回文本化结果,展示时再关联原图,避免模型凭空解释看不到的视觉内容。
怎样避免检索越权?
在 ingestion 阶段保存文档和 chunk 级 ACL,检索时先按用户、租户、部门或项目权限过滤候选,或在向量召回后做强制权限过滤。权限不能只在前端展示层判断,因为向量召回本身可能泄露标题或片段。