Chunking 策略

知识库简介

Chunking(分块)是把解析后的文档元素组织成“可独立检索、可回到原文、可放进模型上下文”的证据单元。它不是把长文本随手截短:分块边界会同时影响 Embedding 表示、召回粒度、引用精度、权限过滤、更新范围与推理成本。

没有适用于所有语料的万能尺寸。FAQ、规章制度、代码、表格和长叙事需要保留的边界不同;同一策略在“查一个数值”和“汇总跨段条件”两类问题上也可能相反。可靠流程是:先定义输入与证据锚点,建立简单基线,再用目标查询集比较质量和成本。

本库的事实边界

示例中的 lexical unit 是便于离线复现的正则计量单位,不是任何模型 tokenizer。接入真实 Embedding 或 LLM 时,必须用该模型对应的 tokenizer、输入限制和当前官方文档重新核验。

在总路线中的位置

文档解析产出带结构、位置、版本与权限的元素;本库将元素变成 chunks;知识库构建负责其生命周期与发布。随后依次通过 Embedding、向量数据库、语义搜索与Reranking建立候选链,最后由 RAG验证这些证据是否找得到、排得对、答得有依据。

学习目标

完成本库后,你应能:

  • 区分字符、词、token、句子、段落、解析元素与 chunk;
  • 把模型输入上限转换成可解释的 chunk 预算,而不是照抄一个数字;
  • 实现固定窗口、递归边界与结构感知三类基线;
  • 处理标题、列表、代码、表格和超长单元素;
  • 设计 overlap、父子块、检索上下文、来源锚点、ACL 与稳定 ID;
  • 建立锚定原始 element/span 的 gold set,比较 Recall@k、MRR、证据完整率和成本;
  • 为策略升级设计双版本重建、验证、切换与回滚。

前置知识

  • 能读写 Python 列表、函数、JSON 与命令行;
  • 理解 HTTP 文档或 Markdown 的基本结构;
  • 知道“检索先找候选,再交给模型”的流程即可,公式会从零解释。

若前置不熟,可先复习 Python基础、JSON 和 文档解析。

核心术语

术语初学者解释本库中的约束
element解析器识别出的段落、标题、表格行或代码块是稳定来源锚点,不等同于 chunk
chunk索引与召回的基本证据单元必须可回溯来源、版本、位置和权限
hard max任何 chunk 都不能超过的上限超长元素也必须二次切分
soft max希望停止继续合并的目标可为保留完整元素而略小或略大,但不能越过 hard max
overlap相邻窗口重复的来源范围只为边界证据服务,并计入成本
retrieval text用于检索或向量化的文本可含标题/表头,但须与可引用原文分开
provenance来源、版本、元素与位置证据支持引用、删除、重建和审计

推荐学习顺序

顺序课程学完能做什么
1切分单位、预算与基线定义计量单位、输入预算、chunk schema 与可比较基线
2固定窗口与递归切分写出会终止、全覆盖且不越 hard max 的切分器
3结构化与语义切分为标题、表格、代码和弱结构文本选择策略
4Overlap、元数据与上下文控制重复成本,并保持 ACL、引用和版本可追踪
5检索评测与切分项目运行离线对照实验,用来源锚点评测两种策略,并验证检索表示变化会生成新的索引记录身份

建议按顺序完成。第 1~2 课建立正确性,第 3~4 课建立工程边界,第 5 课把“感觉更好”改造成可复现证据。

动手实践入口

项目文件均在当前知识库内:

  • chunking_lab.py:结构感知策略、固定窗口基线、ACL 过滤与评测;
  • corpus.json:段落、代码、表格和超长元素;
  • queries.json:以 element_id + exact quote 锚定的查询集;
  • test_chunking_lab.py:32 项输入契约、覆盖、边界、稳定 ID、index_entry_id 失效语义与确定性测试。

在项目根目录(同时包含 docs/ 与 .website/)运行:

$env:PYTHONDONTWRITEBYTECODE = '1'  # 禁止生成 __pycache__,让运行不污染知识库。
python -B -W error '.\docs\Chunking策略\examples\chunking_lab.py'  # 运行离线切分、检索与评测实验。
python -B -W error -m unittest discover -s '.\docs\Chunking策略\examples' -p 'test_chunking_lab.py' -v  # 发现并详细执行相邻测试文件。

项目完全离线,不需要 API key,也不代表真实向量检索的生产效果。

掌握标准

  • 我能说明为何 chunk 不是页面、段落或 tokenizer token 的同义词。
  • 我能从总输入预算反推 chunk hard max,并写明计量器与版本。
  • 切分结果覆盖所有来源单位、顺序确定、不会死循环且不跨 source/revision/ACL。
  • 表格、代码、标题与超长元素有明确而可测试的策略。
  • overlap 有边界假设、重复率指标和关闭条件。
  • 检索文本、可引用原文与派生上下文分开保存并分别哈希。
  • index_entry_id 绑定 chunk、检索文本哈希、索引版本与 ACL 快照,标题或表头上下文变化后不会静默复用旧索引记录。
  • Gold 锚定稳定来源,不因 chunk ID 重建而整体失效。
  • 我会同时报告检索质量、证据完整率、上下文成本与索引成本。
  • 策略升级可以双版本验证、切换和回滚。

与其他知识库的关系

知识库输入或输出关系
文档解析提供结构元素、页/行位置、来源版本与解析告警
知识库构建管理 chunk 的修订、发布指针、删除与重建
Embedding决定实际 tokenizer、向量输入与模型版本
向量数据库存储向量、过滤字段和 chunk metadata
语义搜索检查候选召回、过滤和排序行为
Reranking在候选中重新排序并控制重复上下文
RAG验证最终引用支持、回答正确性与拒答

完成本库项目后,先进入 从来源到引用的离线证据链理解目标不变量,再运行跨模块来源适配与原子发布,观察真实 Chunking lexical span、原生 ID scheme、KB release 与 citation 如何通过显式 crosswalk 对接;最后用External Provenance Artifact v2验证完整 chunk/entry payload 离开 producer 进程后仍能重建 route、ACL 与 coverage。

主要参考资料

来源获取日期:2026-07-22。动态 SDK、模型限制与云服务行为应在实施当天复查。