RAG 文档切分
文档切分(Chunking)是把长文档拆成适合检索和作为模型上下文的片段。切分影响系统能否找到完整证据,而不只是控制文本长度。
为什么要切分
整篇文档通常包含多个主题,直接检索整篇可能引入大量无关内容;片段过小又可能丢失主语、条件和上下文。例如把“仅适用于试用用户”与对应规则分开,可能使回答错误地把规则解释为适用于所有用户。
切分的目标是在检索精度、语义完整性与上下文预算之间取得平衡。
常见方式
| 方式 | 特点 |
|---|---|
| 固定长度 | 实现简单,但容易截断句子或结构 |
| 递归切分 | 先尝试较大的分隔边界,过长时再细分 |
| 按文档结构 | 依据标题、段落、列表等组织片段,保留章节关系 |
| 语义切分 | 根据主题或语义变化确定边界,需要额外计算和验证 |
递归切分可以优先保留段落,再按较细边界拆分;中文等文本需要考虑相应标点,不能只依赖空格。递归切分说明
长度与重叠
片段大小必须注明单位:字符数与 token 数不是一回事,同一段文本在不同计量方式下长度不同。分块还应满足 Embedding 输入限制和回答模型的上下文预算。
重叠让相邻片段共享一部分内容,缓解边界处信息丢失,但也增加存储、向量化和重复召回。它不能替代合理的结构解析,不存在适合所有文档的固定最佳比例。
保留结构和来源
片段应关联原始文档、章节、位置与版本。标题或必要背景可以作为元数据保存,也可以作为检索输入的一部分;若改变了实际送入 Embedding 的文本,原向量不能仅因正文未变就直接复用。
表格需保留列名与对应行的关系,代码应尽量保留完整语法单元,列表应保留引导条件。目录树可以辅助限定范围或找到上级背景,但目录位置本身不证明内容支持答案。
如何判断切分是否合适
使用有明确支持资料的问题集,检查关键证据是否被切散、是否召回过多重复内容,以及回答是否因缺少限定条件而出错。一次只改变少量切分参数,分别观察召回、上下文长度和回答质量,避免把结果变化都归因于生成模型。
相关基础见检索增强生成(RAG)。