检索增强RAG中有哪些好用的Chunk切分方法?
在深入讨论参数选择之前我们先搞清楚切块这件事在整个 RAG 流程中处于什么位置、为什么重要。RAG 的基本流程是用户提问 → 检索相关文档片段 → 将片段拼入 Prompt → LLM 基于这些片段生成回答。而切块发生在更早的离线阶段——把原始文档切分成小片段每个片段生成一个 Embedding 向量存入向量数据库。用户查询时查询向量和这些片段向量做相似度匹配找出最相关的 Top-K 片段。这意味着切块质量直接决定了两件事检索能不能找到对的片段以及找到的片段能不能让 LLM 生成好的回答。切得不好要么检索阶段就漏掉了关键信息要么检索到了但片段内容残缺不全导致 LLM 无法正确理解。可以说切块是 RAG 系统中最不起眼但影响最深远的环节——很多人花大量精力调 Prompt、换 Embedding 模型、调 Top-K最后发现问题根源其实出在切块策略上。1.2 Chunk Size权衡Chunk size 是切块策略中最核心的参数它的选择本质上是在语义粒度和上下文完整性之间做平衡。切小了比如 128-256 token会怎样每个 chunk 的内容非常聚焦大概率只包含一个知识点。这带来的好处是 Embedding 向量更精准地代表那个知识点检索时更容易被命中——也就是检索精度Precision高。但问题也很明显一个太小的 chunk 很可能缺少必要的上下文。比如原文是该方法在实验中将准确率提升了 15%但仅在数据量超过 10 万条时才有效如果从但字处切开前半段 chunk 只说了提升 15%而丢失了限制条件LLM 读到这个片段就可能给出一个过于乐观的回答。此外小 chunk 意味着数量多检索到的 Top-K 片段可能来自文档的不同角落LLM 需要整合多个碎片化的信息增加了理解难度和幻觉风险。切大了比如 1024-2048 token会怎样每个 chunk 包含更丰富的上下文语义完整性好LLM 拿到后更容易理解和推理。但大 chunk 的 Embedding 向量不可避免地变成了多个知识点的混合体一个向量要同时代表好几层含义检索时就容易模糊匹配——用户问的是 A但因为某个 chunk 里 A 和 B 混在一起B 的部分也被捎带检索出来了稀释了相关性。更实际的问题是大 chunk 意味着每个片段占用更多的 Prompt 空间即 Context Window能放进去的片段数量就更少可能导致召回率Recall不够。所以 chunk size 的选择不是一个固定的最优值而是根据具体场景在这两极之间找平衡点。工程实践中的经验是对于事实性问答FAQ 类小一点的 chunk256-512 token通常效果更好因为答案往往在某一段话里精准检索更重要对于需要深度理解和推理的场景如法律条款解读、技术文档分析大一点的 chunk512-1024 token更合适因为上下文完整性更关键。1.3 Overlap 的作用理解了 chunk size 的权衡之后overlap 就很好理解了——它就是用来缓解切块边界处信息断裂问题的补偿机制。想象一下一段连贯的论述横跨了两个 chunk 的边界前一个 chunk 的结尾讲了原因后一个 chunk 的开头讲了结论。如果没有重叠这两个 chunk 各自都是半截话——前一个有原因没结论后一个有结论没原因。Embedding 分别编码后两个向量都无法完整代表这段论述的含义检索时就可能漏掉这条关键信息。加入 overlap 后相邻两个 chunk 在边界处有一段共享内容。这段重叠区域确保了即使切割发生在一段连贯论述的中间至少有一个 chunk 能保留足够的上下文使语义不至于断裂。这就像屋顶的瓦片——每片瓦不是严丝合缝而是前后重叠一部分才能确保雨水不会从缝隙漏进去。Overlap 多大合适常见的经验值是 chunk size 的 10%-25%。比如 chunk size 是 512 tokenoverlap 可以设 50-128 token。太小了比如只有 10-20 token起不到缝合语义的作用因为一两句话不足以提供有意义的上下文衔接。太大了比如超过 50%就会带来明显的副作用首先是存储膨胀同一段内容被重复编码多次向量数据库的体积和索引成本显著增加其次是检索去重问题多个 chunk 包含大量相同内容检索时可能返回一堆长得差不多的片段浪费了宝贵的 Top-K 配额等于你明明可以看到 5 条不同信息结果其中 3 条都在重复同一段话。1.4 常用切块策略上面讨论的 chunk size 和 overlap 都是基于固定大小切块Fixed-size Chunking这个最基础的策略。但在实际工程中仅靠调整这两个数字往往是不够的因为文本内容本身是不均匀的——有些段落三句话就讲完一个概念有些段落十句话都在论述同一个论点。用固定尺寸去切变长内容就像用同一把尺子裁剪不同大小的布料难免裁到不该裁的地方。基于语义的切块Semantic Chunking 是更精细的做法。它的核心思想是不按固定 token 数切而是按语义边界切。具体怎么做呢一种常见的实现方式是先把文本按句子分割然后计算相邻句子之间的 Embedding 相似度当相似度出现明显下降时说明话题发生了转换就在那里切一刀。这样每个 chunk 自然地对应一个完整的语义单元不需要 overlap 来缝合了因为根本就没有在语义中间切开过。基于文档结构的切块则利用文档自身的结构信息。Markdown 文档有标题层级HTML 有标签结构PDF 有段落和章节。按这些天然边界来切块既简单又有效。比如按 Markdown 的二级标题##切每个 chunk 就是一个完整的章节语义自然完整。这种方法特别适合结构化程度高的文档比如如技术文档、产品手册、法律合同等。递归切块Recursive Chunking 是 LangChain 中广泛使用的策略思路是设定一组分隔符优先级比如先按段落 \n\n 切太大了再按句子 \n 切还太大了再按固定长度切逐级递归直到每个 chunk 都在目标大小范围内。它兼顾了结构化和大小控制是实践中最常用的默认策略。1.5 实战中的调优思路理论说了一大堆回到工程现实怎么为一个具体项目选定切块参数分享几条实战经验。第一步永远是看数据。在动手切之前先抽样看看你的原始文档长什么样——平均段落长度、内容结构化程度、信息密度。技术文档和闲聊记录显然需要完全不同的策略。第二步是建立评估闭环。切块策略没有一设永逸的参数必须通过评估来迭代。准备一组有标准答案的测试问题跑一轮 RAG 看效果调整参数后再跑一轮对比。核心指标有两个检索召回率相关片段有没有被检索到和生成准确率最终回答对不对。很多时候你会发现检索层面已经召回了正确片段但因为 chunk 太碎导致 LLM 无法正确理解这就是切块的锅。第三步是考虑多级索引。在实际产品中一种越来越流行的做法是不只存一种粒度的 chunk而是同时维护多个层级比如用小 chunk256 token做精准检索命中后把对应的大 chunk1024 token或原始段落送给 LLM。这样检索阶段享受小粒度的精准性生成阶段享受大粒度的上下文完整性。LlamaIndex 中的 SentenceWindowNodeParser 和 HierarchicalNodeParser 就是这个思路的实现。最后还有一条容易被忽略的经验切块策略应该随 Embedding 模型的能力匹配。不同 Embedding 模型的最佳输入长度不同——有些模型在短文本上表现更好如早期的 text-embedding-ada-002有些模型专门针对长文本优化如 jina-embeddings-v2 支持 8192 token。如果你用的是一个短文本模型却切了很大的 chunkEmbedding 质量会明显下降。所以 chunk size 不应该孤立地选择而应该和 Embedding 模型的特性联合考虑。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】