标准回答
为什么重要
RAG 的回答建立在检索到的上下文之上,而检索的质量上限取决于入库内容的质量——「垃圾进,垃圾出」。如果入库的是带满页眉页脚、乱码、重复段落、丢失结构的文本,再好的嵌入模型和 reranker 也救不回来:召回会不准、上下文会被噪声稀释,模型据此生成时更容易答非所问或产生幻觉。所以数据清洗与预处理是 RAG 工程里投入产出比最高的环节之一。
解析(Parsing)
把各种来源转成干净、结构化的文本。PDF、HTML、Office 文档各有解析坑,扫描件和图片型 PDF 需要 OCR。关键是不仅取出文字,还要尽量保留标题层级、列表、表格等结构信息,这些结构后续对分块边界和元数据都很有价值。
清洗(Cleaning)
去掉与正文无关的噪声:重复出现的页眉页脚、网页导航与广告、版权声明、乱码字符、不可见控制字符、多余的转义符等。这一步直接决定了入库文本的信噪比。
规范化(Normalization)
统一编码(统一到 UTF-8)、归一空白与换行、统一全半角标点、合并被错误换行打断的句子。规范化让相同含义的文本有一致表示,提升嵌入的稳定性与匹配度。
去重(Deduplication)
精确去重清掉完全相同的副本,近似去重(如 SimHash/MinHash 或向量相似度)清掉高度相似的冗余内容。否则检索 Top-K 会被多份近乎相同的片段占满,挤掉真正多样、互补的信息。
元数据抽取(Metadata Extraction)
抽取标题、章节、日期、来源、作者、文档类型等结构化字段,存入向量库的 metadata。它们支撑按时间/来源/权限过滤,也支撑 Self-Query(让 LLM 把自然语言里的条件转成元数据过滤),显著提升检索精度与可控性。
表格与图片单独处理
表格直接当普通文本分块往往破坏行列语义,应单独抽取并转成 Markdown 表格或结构化描述;图片可用多模态模型生成图注/描述再入库。
敏感信息脱敏
在入库前识别并脱敏个人隐私、密钥、内部机密等,避免敏感内容被检索出来泄露给用户。
进入分块
以上都处理完,得到干净、结构化、带元数据的文本后,才进入分块(chunking)与嵌入入库环节。顺序不能颠倒——先治理再切分,分块边界和元数据才会准确。
常见误区
⚠️ 常见踩坑
不要把脏文档直接丢进分块器就嵌入入库——跳过解析与清洗,页眉页脚、乱码、重复内容会污染整个向量库,后续 rerank 和提示工程都补救不了,召回精度和幻觉问题从源头就被注定。
追问
追问 1:近似去重为什么必要?只做精确去重不够吗?
企业语料里常有大量「换了个版本号、改了几个字」的近重复文档,精确去重抓不到它们。若不做近似去重,检索 Top-K 会被这些高度相似的片段占满,挤掉真正互补的信息,既浪费上下文窗口又降低答案的全面性。可用 SimHash/MinHash 做粗筛,再用嵌入向量相似度做精筛,按阈值合并或保留最新版本。
追问 2:抽取的元数据在检索时具体怎么用?
一是做硬过滤,比如「只查 2025 年之后、来源为官方文档」的片段,缩小检索范围、提升精度;二是支撑 Self-Query,让 LLM 把用户自然语言里的隐含条件(时间、作者、类型)解析成结构化过滤条件再检索;三是用于结果展示与溯源,把来源、章节回传给用户增强可信度。
追问 3:表格内容为什么不能像普通段落一样直接分块?
表格的语义依赖二维行列关系,按字符流切分会把表头与数据行拆散、跨单元格串读,嵌入后语义混乱、检索基本失效。应单独识别表格,转成 Markdown 表格或「字段=值」的结构化文本,必要时为每行补上表头上下文,甚至让 LLM 生成一段表格摘要一并入库,让数值型问题也能被检索到。
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习