一句话定义
Chunking 是把长文档切成适合嵌入和检索的块(chunk):块太大检索不准,块太小语义不完整。切分粒度、重叠和元数据共同决定检索质量。
为什么需要它
嵌入模型和上下文窗口都有长度限制,长文档不能整篇塞进向量。切成块才能建立索引、召回片段,并把证据放进上下文。切分破坏语义时,检索看起来命中,回答却答非所问。
常见方式
Fixed-size Chunking
按固定 token/字符数切分,简单、可预测;容易在句子/段落中间切断。通常加一点重叠,减少跨块丢上下文。
Semantic Chunking
按段落、标题、主题边界切分;语义更完整,但依赖文档结构和切分器,块大小不固定。
Document Loader
负责把 PDF、网页、Markdown、数据库等读成文本和元数据;解析质量直接影响后续切分。
关键取舍
- 块大小要匹配嵌入模型和问题粒度:事实型问答偏小块,总结/推理偏大块。
- 重叠能保留跨块上下文,但增加索引体积和重复召回。
- 保留标题、来源、时间、权限等元数据,方便过滤和引用。
- 表格、代码、公式要特殊处理,不能按纯文本硬切。
- 固定切分可以作为 baseline,再按失败样本调语义切分。先测召回。
常见误区
- 块越小检索越准:太小会丢语义,召回片段无法回答问题。
- 固定切分一定差:简单场景够用,且可预测。
- 切分是一次性的:文档更新、嵌入模型更换都要重建索引。
- 只切文本:表格、图片说明、代码块也需要结构化处理。
用在哪里
- RAG 的文档入库阶段。
- 长文档问答、知识库、代码库检索。
- 需要引用溯源和权限过滤的场景。
相关概念
- RAG:Chunking 服务的上层流程。
- Vector Database:存储和检索 chunk 向量。
- Reranker:对召回块做精排。