Skip to content

长文本切片策略专题 ​

版本:v1.1

最后更新:2026-07-06

适用对象:负责企业知识库、RAG、文档解析、向量索引、引用溯源和检索评测的算法、平台、后端与知识运营团队。


1. 为什么长文本切片很重要 ​

很多知识型 AI 系统在早期接入文档时,会先用固定 chunk size 直接切片。刚开始这通常能跑起来,但做久了会发现:

  • 切太大,检索命中后噪声多,模型难以抓重点
  • 切太小,关键上下文断裂,答案缺证据
  • 标题、段落、表格、流程步骤被切坏
  • 引用看起来不可信,因为 chunk 本身不完整
  • 同一问题召回多个碎片,模型需要自己拼上下文
  • 切片策略一改,历史评测指标无法对比

长文本切片是 RAG 的地基。它决定了:

  • 检索的最小知识单元
  • embedding 表示的语义范围
  • rerank 能否判断相关性
  • 模型最终看到的证据质量
  • 引用能否被用户验证

RAG 论文的核心思想是把外部知识检索结果作为生成依据;而在工程上,“检索结果”的基本单位通常就是 chunk。chunk 设计不好,后面的 embedding、rerank、prompt 和引用展示都会被拖累。


2. 什么是切片策略 ​

切片策略可以理解为:

  • 决定如何把长文档拆成适合索引、检索、重排、引用和模型阅读的知识单元

它不是简单的字符串截断,而是一个文档结构理解问题。

一套完整切片策略至少要回答:

  1. 按什么边界切:标题、段落、句子、页码、语义、token
  2. 每个 chunk 多大:字符数、token 数、段落数
  3. 是否需要 overlap:相邻 chunk 共享多少上下文
  4. 是否保留标题路径:章节层级是否进入 metadata
  5. 表格、代码、FAQ、流程如何特殊处理
  6. chunk 能否独立支撑一个引用
  7. 切片变更如何评测和回滚

3. 切片会直接影响 RAG 的哪些环节 ​

3.1 影响召回 ​

如果 chunk 太大,embedding 会混合多个主题,向量表示变得模糊。

如果 chunk 太小,用户问题需要的信息可能散落在多个 chunk 中,单个 chunk 相关性不足。

3.2 影响重排 ​

reranker 通常判断 query 与 chunk 的相关性。chunk 内容越完整,重排越容易判断。

如果 chunk 只有半句话或缺标题,reranker 很难判断它是否真正相关。

3.3 影响引用 ​

引用展示的基本单位通常是 chunk 或 chunk 对应原文片段。

如果 chunk 被切坏:

  • 引用只显示半个表格
  • 引用缺少条款标题
  • 引用没有前提条件
  • 用户无法验证答案来源

3.4 影响上下文成本 ​

切片太碎会召回很多小片段,prompt 里要塞更多上下文。

切片太大则每个 chunk 占用 token 多,噪声也多。

3.5 影响幻觉风险 ​

如果 chunk 缺少关键限定条件,模型可能会根据不完整证据做过度推断。

例如制度文档里:

text
员工可申请报销差旅费用。
但以下情况不予报销:私人行程、超标准住宿、无发票支出。

如果两句话被切开,模型可能只召回第一句,导致错误回答。


4. 切片的核心矛盾 ​

4.1 完整性 vs 精准性 ​

chunk 越大,上下文越完整,但噪声越多。

chunk 越小,检索越精准,但容易缺前提和结论。

4.2 召回率 vs 引用可读性 ​

为了提高召回,有时会切得更细。

但用户看引用时,更希望看到完整段落、完整条款或完整表格。

4.3 通用策略 vs 文档类型差异 ​

固定 chunk size 最简单,但不同文档结构差异很大:

  • FAQ 适合按问答对切
  • 制度文档适合按条款和标题层级切
  • 表格适合按表头和行组切
  • 代码文档适合按函数、类、示例块切
  • 流程文档适合按完整步骤组切

没有一种切法适合所有文档。


5. 常见切片方法 ​

5.1 固定长度切片 ​

按字符数或 token 数切。

优点:

  • 实现简单
  • 容易控制 chunk 大小
  • 适合快速原型

缺点:

  • 容易切断句子和段落
  • 不理解文档结构
  • 表格和流程容易被破坏

适合:

  • 结构弱、内容连续的普通文本
  • 原型阶段

不适合:

  • 制度文档
  • 合同
  • 表格
  • FAQ
  • 技术文档

5.2 递归字符切片 ​

LangChain 的 RecursiveCharacterTextSplitter 思路是按一组分隔符递归切分,优先保留段落、换行、句子等自然边界,直到满足 chunk size。

常见分隔符顺序:

text
章节标题 -> 段落 -> 换行 -> 句子 -> 空格 -> 字符

优点:

  • 比固定长度更尊重文本结构
  • 实现成本低
  • 适合作为默认策略

缺点:

  • 仍然不真正理解业务语义
  • 对表格、PDF 版面、FAQ 不够精细

5.3 结构化切片 ​

按文档结构切。

例如:

  • Markdown 标题层级
  • PDF 页码和标题
  • Word 样式标题
  • HTML heading
  • 表格
  • 列表
  • 代码块

优点:

  • 保留文档原始结构
  • 引用更可读
  • 便于追溯到原文位置

缺点:

  • 需要文档解析能力
  • 不同文件格式要适配
  • 结构解析错误会影响切片

5.4 语义切片 ​

按主题或语义边界切。

思路:

  • 判断相邻句子或段落是否属于同一主题
  • 主题变化时切开
  • 每个 chunk 尽量保持语义完整

优点:

  • 更符合用户提问方式
  • 能减少主题混杂

缺点:

  • 成本更高
  • 结果不一定稳定
  • 需要额外模型或 embedding 判断

5.5 层级切片 ​

同时保留大块和小块。

例如:

text
章节级 chunk:用于粗召回
段落级 chunk:用于精确引用
句子级 chunk:用于 evidence 对齐

优点:

  • 兼顾召回和引用
  • 适合复杂知识库

缺点:

  • 索引和去重更复杂
  • 需要 parent-child 关系管理

6. chunk size 与 overlap 怎么选 ​

6.1 chunk size 不是越大越好 ​

大 chunk 的问题:

  • embedding 主题混杂
  • rerank 难判断
  • prompt 成本高
  • 引用噪声多

6.2 chunk size 也不是越小越好 ​

小 chunk 的问题:

  • 前后文断裂
  • 条件和结论分离
  • 召回结果碎片化
  • 需要拼接更多 chunk

6.3 overlap 的作用 ​

overlap 用来缓解边界断裂。

例如 chunk A 结尾有条件,chunk B 开头有结论,overlap 可以让两个 chunk 都保留部分上下文。

但 overlap 过大也有问题:

  • 索引变大
  • 重复召回增加
  • 成本上升
  • 引用重复

6.4 起步建议 ​

不同系统差异很大,但可以这样起步:

文档类型chunk 建议overlap 建议
普通说明文300-800 tokens50-150 tokens
FAQ一问一答为一个 chunk通常不需要
制度条款按条款或小节保留标题路径
技术文档按标题、段落、代码块适度 overlap
表格按表头 + 行组保留表头
长报告章节粗切 + 段落细切分层处理

这些不是固定标准,而是调参起点。最终要通过回放评测决定。


7. 不同文档类型的切片策略 ​

7.1 FAQ ​

推荐:

  • 一组问答作为一个 chunk
  • 保留问题、答案、适用场景
  • 相似问法作为 metadata 或别名

不要:

  • 把问题和答案切开
  • 把多个无关 FAQ 合并成一个 chunk

7.2 制度与政策文档 ​

推荐:

  • 按标题层级和条款切
  • chunk 中保留标题路径
  • 条件、例外、限制要和结论放在一起

metadata 示例:

json
{
  "doc_title": "差旅报销制度",
  "section_path": "报销范围 > 不予报销情形",
  "article_no": "3.2",
  "page": 4
}

7.3 表格 ​

表格最容易被切坏。

推荐:

  • 保留表头
  • 按语义行组切
  • 每个 chunk 带表格标题
  • 对跨页表格保留续表关系
  • 重要数值字段保留原格式

不要:

  • 只把表格转成无结构文本
  • 把表头和数据行切开
  • 把金额、单位、日期拆散

7.4 流程文档 ​

推荐:

  • 按完整流程阶段切
  • 保留步骤顺序
  • 条件分支不要和结果分离
  • 必要时单独构造流程图或结构化字段

7.5 合同和法律文档 ​

推荐:

  • 按条款切
  • 保留条款编号
  • 保留定义条款和引用关系
  • 对“除外”“但书”“前提条件”特别处理

合同切片最怕只召回结论,不召回限制条件。

7.6 技术文档和代码文档 ​

推荐:

  • 按标题和代码块切
  • 代码示例不要被截断
  • API 参数表要保留字段、类型、说明
  • 错误码表要保留错误码和解释

8. chunk metadata 设计 ​

好的切片一定要有 metadata。

8.1 基础 metadata ​

建议包含:

  • doc_id
  • doc_title
  • source_url
  • file_path
  • page
  • section_path
  • chunk_id
  • chunk_index
  • char_start
  • char_end
  • token_count
  • created_at
  • document_version

8.2 检索 metadata ​

可选:

  • doc_type
  • business_domain
  • risk_level
  • permission_scope
  • language
  • effective_date
  • expire_date
  • owner

这些字段可以支持权限过滤、时间过滤和业务域过滤。

8.3 引用 metadata ​

引用需要:

  • 页码
  • 标题路径
  • 原文位置
  • 表格编号
  • 条款编号
  • URL anchor

没有 metadata,后续很难做可验证引用。


9. 切片与引用设计联动 ​

很多引用不可信,不是 UI 问题,而是 chunk 本身无法独立支撑结论。

9.1 好 chunk 的标准 ​

一个可引用 chunk 应该:

  • 有明确主题
  • 保留必要标题
  • 条件和结论完整
  • 能追溯到原文位置
  • 不混入太多无关内容
  • 能被用户独立阅读

9.2 引用最小单位 ​

不同场景的引用单位不同:

场景推荐引用单位
FAQ完整问答对
制度条款或小节
表格表头 + 相关行
合同条款编号 + 条款内容
报告段落 + 页码
技术文档参数表或代码块

10. 切片策略评测 ​

切片策略必须通过回放评测,而不是只靠感觉。

10.1 评测样本 ​

准备:

  • 高频真实问题
  • 历史检索失败问题
  • 高风险问答
  • 需要表格证据的问题
  • 需要多段证据的问题
  • 证据不足应拒答的问题

10.2 指标 ​

建议看:

  • Recall@K:正确证据是否进入前 K
  • MRR:正确证据排名是否靠前
  • nDCG:排序质量
  • 引用准确率
  • 答案忠实性
  • 证据完整率
  • 平均 chunk token
  • 检索成本
  • 重复召回率

10.3 切片回放流程 ​

text
固定问题集
 -> 方案 A 切片并索引
 -> 方案 B 切片并索引
 -> 跑同一批检索
 -> 对比召回、排序、引用和答案质量
 -> 分析失败样例

切片方案变更必须能解释指标变化。


11. 常见失败与修复 ​

失败现象可能原因修复
检索结果主题混杂chunk 太大减小 chunk 或按结构切
召回片段缺前提chunk 太小或 overlap 不足增加 overlap 或按条款切
表格问答错误表头和数据行分离表格专用切片
引用不可读chunk 缺标题和位置增加 section_path 和页码
同一内容重复召回overlap 过大或重复文档去重、调小 overlap
长报告只召回局部缺层级索引章节级 + 段落级双索引
权限过滤失效metadata 缺权限字段增加 permission_scope

12. 切片策略变更治理 ​

切片策略属于知识库基础设施变更,不能随手改。

每次变更要记录:

  • 策略版本
  • chunk size
  • overlap
  • 分隔符
  • 文档类型规则
  • 影响文档范围
  • 重建索引时间
  • 回放评测结果
  • 是否需要回滚

12.1 版本示例 ​

json
{
  "chunking_policy_version": "chunk_policy_v2.1",
  "doc_type": "policy",
  "chunk_size_tokens": 600,
  "chunk_overlap_tokens": 100,
  "split_rules": ["heading", "paragraph", "sentence"],
  "metadata_required": ["doc_id", "section_path", "page", "permission_scope"]
}

12.2 什么时候需要重建索引 ​

需要重建:

  • chunk size 变化
  • overlap 变化
  • 结构解析规则变化
  • metadata 字段变化
  • 文档解析器升级
  • 权限字段变化

重建后必须跑回放评测。


13. 推荐落地流程 ​

text
文档解析
 -> 识别文档类型
 -> 应用对应切片策略
 -> 生成 chunk + metadata
 -> 建立向量索引和关键词索引
 -> 检索回放评测
 -> 分析失败样例
 -> 调整策略并版本化

13.1 最小可用版本 ​

如果团队刚开始,可以先做:

  • Markdown/HTML 按标题切
  • 普通文本用递归切分
  • FAQ 一问一答切
  • 表格保留表头
  • 所有 chunk 保留 doc_id、title、section_path、page

13.2 生产增强版本 ​

更成熟后补充:

  • 文档类型识别
  • 表格专用解析
  • 层级索引
  • 权限 metadata
  • 切片策略版本
  • 回放评测
  • 失败样例归因

14. 落地检查清单 ​

14.1 策略设计 ​

  • 是否区分不同文档类型
  • 是否保留标题层级
  • 是否保留页码或原文位置
  • 是否对表格、FAQ、流程、代码做专用策略
  • 是否设置合理 overlap

14.2 metadata ​

  • 是否有 doc_id
  • 是否有 chunk_id
  • 是否有 section_path
  • 是否有 page 或位置
  • 是否有 document_version
  • 是否有 permission_scope

14.3 评测与治理 ​

  • 是否有固定问题集
  • 是否能计算 Recall@K 和引用准确率
  • 是否能比较不同切片版本
  • 是否记录切片策略版本
  • 是否把检索失败样例回流
  • 是否能回滚到旧索引

15. 推荐搭配阅读 ​


16. 推荐资料 ​

以下资料在 2026-07-06 检查时可访问。

官方文档 ​

论文 ​


17. 一句话总结 ​

长文本切片策略的核心不是找到一个万能 chunk size,而是根据文档结构、业务场景、引用要求和检索评测结果,把长文档拆成既能被准确召回、又能独立支撑答案的知识单元。