直接答案:RAG 系统检索质量的上限,很大程度由文档切分决定。切得太碎会丢失上下文,切得太大又引入噪声。下面从切分粒度、重叠策略、语义切分、与检索的联动、效果评估五个维度做工程对比。
一、为什么切分重要 检索阶段召回的是"块"而非整篇文档,块的质量直接决定大模型能否拿到完整上下文。块太小:一个完整知识点被劈成两半,召回只能拿到半截,生成答案断片。块太大:单块塞进多个不相关知识点,噪声拉低相关性,还浪费上下文 token。切分是 RAG 工程里投入产出比最高的调优点之一,优先于换更贵的模型。
二、固定长度切分 最常见做法:按 token 或字符数固定切块,块大小常取 200–500 字(中文约 200–400 token),块间重叠(overlap)取块长的 10–20%(如 50 token),避免句子在边界被切断丢失语义。优点是实现简单、可控;缺点是可能在句子或段落中间切断,破坏语义完整。适合结构均匀、段落短的文档,如规范手册。
三、递归字符切分 按分隔符优先级递归切:先按双换行分段,再按单换行,再按句号,最后按空格或字符。尽可能在天然边界(段落、句子)处断开,比纯固定长度更保语义。LangChain 的 RecursiveCharacterTextSplitter 即此类,默认分隔符为 ["\n\n", "\n", ". ", ""],并可指定块大小与重叠。是多数场景的默认选择。
四、语义切分 用 embedding 模型计算相邻句子的语义距离,在距离突变处切分,使每块内部语义高度一致。步骤:句向量化 → 算相邻句余弦距离 → 距离超阈值处断开。优点:块内聚性好,召回精度高;缺点:依赖模型质量、计算开销大、阈值难调(常用动态阈值或百分位法)。适合对召回精度要求高的场景,如法律、医疗问答。
五、重叠策略 overlap 不是可有可无。它保证一个完整句子或知识点即使跨边界,也能在相邻块里完整出现一次,避免"半截知识"。经验值:块 200–500 字时 overlap 取 10–20%;块越大占比可略降。overlap 过大会引入重复噪声、增加存储与检索成本,需权衡,并非越大越好。
六、与检索的联动 块大小要和检索 top-k 配合:块小则 top-k 取大(如 10–15)保证覆盖;块大则 top-k 取小(如 3–5)避免噪声。重排阶段再精筛。块大小也受上下文窗口约束:单块加提示词须能塞进模型上下文,否则截断反而丢信息。
七、效果评估 用 Recall@k 衡量:改造切分后,前 k 个召回块含正确答案的比例是否上升;用 Faithfulness 看是否因断片导致幻觉。可借助 RAGAS、TruLens 定量对比不同切分策略。没有万能块大小,按文档类型(技术手册、法律条文、口语 transcript)实测定,建议做消融实验再上线。
小结:切分没有银弹。均匀文档用固定或递归切分,精度敏感用语义切分;重叠必带且占比适中;块大小与 top-k、上下文窗口联动调。先用 Recall@k 测起来,再迭代优化。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。