真实面经题目 · 原创解析

RAG 处理 PDF 知识库时,如何设计切片、分页元数据和检索链路来减少答非所问?

这题考察 PDF 知识库 RAG 的端到端设计:要用结构化解析保留标题、页码和版面语义,按文档结构切 chunk 并带 page span metadata,通过召回、重排和上下文组装减少答非所问,并用 badcase 闭环持续修正切片与检索链路。

出现于:腾讯 · 后端开发 · 2 条面经记录

60 秒回答模板

我会把 PDF RAG 分成解析、切片、索引、检索、组装和生成六步。解析阶段不能只按页抽文本,要尽量识别标题层级、段落、表格、列表、页眉页脚和跨页段落,并清理重复页眉、页脚、水印。切片时以章节和语义段落为主,控制 chunk 大小,给相邻 chunk overlap,表格和条款类内容尽量保持完整;页码不能当唯一切片单位,因为分页可能切断语义,但每个 chunk 必须保留 source、page_start、page_end、section_title、heading_path 等 metadata,方便召回和溯源。检索链路上先做 query rewrite 或意图识别,再混合向量召回和关键词召回,之后用 reranker 按相关性重排,必要时扩展相邻 chunk。组装上下文时去重、按章节顺序排序、控制 token 预算,并要求模型只基于证据回答;若证据不足要说明无法确定。答非所问的 badcase 要回看是解析丢信息、chunk 粒度不合适、召回漏了、重排错了,还是生成阶段没有引用约束。

考点 结构化解析是基础
难度 真实面经题
回答目标 讲清 PDF 切片和检索归因

深入解析

01

PDF 先结构化解析

PDF 的难点在于它不是天然结构化文档。直接按页提取文本会遇到多栏顺序错乱、页眉页脚重复、表格断裂、脚注混入正文、扫描件 OCR 错字和跨页段落断开。高质量链路要先做文档解析,识别标题层级、段落、表格、列表、图片说明和页码来源,清理无业务含义的页眉页脚。解析质量决定后续检索上限,如果这里把顺序和结构弄错,后面再强的 embedding 也会召回噪声。

02

按语义而不是按页切片

分页是版面结果,不一定等于语义边界。一个条款可能跨两页,一个页面也可能包含多个独立主题。切片应优先沿标题、章节、段落、条款和表格边界切,控制 chunk 在可检索和可放入上下文的大小范围内,并为连续段落设置 overlap。对于定义、流程、表格和问答型内容,要尽量保持完整单元,避免把问题和答案、表头和表体、前提和结论切开。

03

页码 metadata 要可追溯

虽然不应该只按页切片,但页码 metadata 必须保留。每个 chunk 至少要有文档 id、文件名、页码范围、章节标题、标题路径、块类型、段落序号和解析版本。跨页 chunk 可以记录 page_start 和 page_end,表格可以记录所在页和表名。这样生成答案时能引用来源,也能在 badcase 排查时知道是哪个页面、哪个章节被召回或漏召回。注意 PDF 物理页码和正文印刷页码可能不同,要统一口径。

04

召回要混合和扩展

PDF 知识库里既有语义问题,也有精确名词、编号、条款号和表格字段。只用向量召回容易漏掉精确编号,只用关键词召回又容易漏掉同义表达。更稳的做法是 query rewrite 后做混合召回:向量召回覆盖语义相似,BM25 或关键词召回覆盖术语和编号,再合并去重。召回到某个 chunk 后,可以按标题路径或相邻段落扩展上下文,补齐前置定义和后续限制条件。

05

重排和上下文组装

初召回结果通常包含相似但不回答问题的段落,需要 reranker 根据 query 和 chunk 逐对判断相关性。进入模型前还要做上下文组装:去掉重复页眉页脚类内容,按相关性和文档顺序平衡排序,把同一章节相邻 chunk 合并,保留来源标识,控制 token 预算。对于多个候选答案冲突的情况,要优先保留更直接、更新或权限更高的来源,并提示模型基于证据回答。

06

答非所问要做 badcase 归因

大模型答非所问不一定是生成模型的问题。要沿链路回放:解析文本是否正确,目标答案是否被切进某个 chunk,召回 topK 是否包含目标 chunk,reranker 是否把它排上来,上下文组装是否截断关键句,prompt 是否允许模型在证据不足时拒答。对应修复也不同:解析错要改解析器,漏召回要改 chunk 或召回策略,重排错要调 reranker,生成跑偏要增强引用约束和拒答规则。

易错点

  • 把 PDF 每页直接当一个 chunk,忽略跨页段落、表格断裂和页眉页脚噪声。
  • 只讲向量数据库和 embedding,不说明页码、标题路径、文档来源等 metadata 设计。
  • 一遇到答非所问就调 prompt,没有回放解析、切片、召回、重排和上下文组装链路。
  • chunk overlap 设得过大导致大量重复噪声,或设得过小导致定义和结论分离。
  • 让模型自由发挥答案,不要求基于证据回答、引用来源或在证据不足时拒答。

面试官追问

PDF 按页切片有什么问题?

页是排版边界,不是语义边界。按页切可能把同一条款、表格或段落拆开,也可能把多个主题混在一起。更好的做法是按结构切片,同时保留页码范围 metadata。

chunk 大小怎么选?

要在语义完整和检索精度之间折中。太小会丢上下文,太大会引入噪声并降低命中精度。通常按章节段落控制长度,对跨段依赖内容加 overlap,对表格和条款保持完整单元。

为什么需要 rerank?

初召回负责广覆盖,容易拿到语义相似但不直接回答问题的内容。reranker 会结合 query 和 chunk 重新判断相关性,把真正能回答问题的证据排到前面,减少答非所问。

如果模型根据错误上下文回答错了,怎么修?

先回放检索链路,看正确 chunk 是否进入 topK、是否被重排压低、是否在上下文组装时被截断。如果上下文本身错,修召回和重排;如果上下文正确但模型跑偏,再加强引用、拒答和答案格式约束。