直接回答:分块策略从粗到细:定长切分(按 token 数硬切,最简单但会切断语义)、递归切分(优先按段落/句子边界切,LangChain 默认方案)、结构感知切分(按 Markdown 标题、HTML 标签、代码函数边界)、语义切分(相邻句子 embedding 距离突变处断开)。块大小没有银弹,经验值 256~512 token、重叠 10%~20%,最终靠检索评测集调出来。

展开解析:块大小的本质权衡:块小则向量语义聚焦、召回精确,但上下文残缺、答案可能跨块;块大则上下文完整,但向量被多主题稀释、且挤占 prompt 空间。两种进阶方案可以兼得:一是"父子索引"——按小块检索、返回所属大块;二是"句子窗口"——按单句检索、拼接前后 n 句。代码库适合按 AST 函数边界切;FAQ 类文档天然按问答对切,不必再细分。表格要么整表一个块、要么转成结构化查询,切忌行级切碎。分块策略变更意味着全量重建索引,上线前要用固定评测集对比召回率,而不是拍脑袋。

追问方向:chunk 元数据应该带哪些字段?多模态文档(图文混排)怎么切?为什么说分块是 RAG 里被低估的环节?

(约 440 字)