ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

RecursiveCharacterTextSplitter 的分割原理

RecursiveCharacterTextSplitter 的分割原理 RecursiveCharacterTextSplitter 的分割原理核心就是“按语义层级从大到小依次尝试切分直到块足够小”。一、优先保留大语义单元它预设了一套分隔符的优先级列表默认是[\n\n, \n, , ]。\n\n(段落)最优先尝试因为段落是语义最完整的单元。\n(换行)段落切不开时退一步按行切。 (空格)行也切不开时按单词切。(空字符)最后兜底直接按字符硬切保证一定能切开。二、具体分割流程递归过程整个分割是一个递归的过程尝试第一级分隔符用列表里第一个分隔符如\n\n把文本切成若干段。检查每段大小看切出来的每一段是否小于设定的chunk_size。递归处理超长段如果某一段还是太大就针对这一段使用剩下的分隔符列表去掉\n\n重复第 1 步用\n去切它以此类推。合并成块把最终切出来的、足够小的片段按顺序重新合并直到接近chunk_size形成一个最终的块。三、举例假设chunk_size10文本是Learning new skills is essential分隔符是[\n\n, \n, , ]。找不到\n\n和\n于是用空格 切分。切成[Learning, new, skills, is, essential]。开始合并Learning(8字符) → 先放进去。看下一个new(3字符)8311 10放不下所以第一个块就是Learning。开始新块放入new(3字符)。看下一个skills(6字符)369 ≤ 10可以放下于是合并成new skills。继续看is(2字符)9211 10放不下所以第二个块就是new skills。以此类推。最终结果就是[Learning, new skills, is, essential]。为什么要这么设计保持语义完整尽可能让一个完整的段落或句子留在一个块里避免“半句话”被切到另一个块影响 RAG 的检索质量。保证一定能切万一文本里没有任何标点最后还有兜底强制按字符切开确保不会出错。提醒默认分隔符是为英文设计的直接用于中文可能会把词语切碎。建议在separators列表中加入中文标点例如[\n\n, \n, 。, , , , , , ]。
返回列表