You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于LangChain递归文本分割器分割结果的逻辑疑问

问题解析

代码与运行结果

from langchain.text_splitter import RecursiveCharacterTextSplitter

rsplitter = RecursiveCharacterTextSplitter(chunk_size=10,chunk_overlap=0, separators=["\n\n", "\n", " ", ""])

some_text = "Learning new skills is essential for growth"
result = rsplitter.split_text(some_text)
result

运行结果:

['Learning', 'new', 'skills is', 'essential', 'for', 'growth']

分割逻辑说明

RecursiveCharacterTextSplitter的核心是按指定分隔符优先级递归分割文本,同时保证每个块的字符数不超过设定的chunk_size,具体到这个案例:

  1. 分隔符优先级从高到低为:段落分隔符"\n\n"、换行符"\n"、空格" "、字符级分隔符""。文本中没有前两种分隔符,因此先按空格分割成单词列表:["Learning", "new", "skills", "is", "essential", "for", "growth"]。
  2. 接下来尝试合并相邻单词,直到合并后的总长度(包含空格分隔符)超过chunk_size=10:
    • Learning(8字符)合并new后总长度为8+1+3=12,超过10,因此单独成块。
    • new(3字符)合并skills后总长度为3+1+6=10,刚好等于chunk_size,在当前使用的LangChain版本中,合并逻辑要求块长度需严格小于chunk_size,因此不合并,new单独成块。
    • skills(6字符)合并is后总长度为6+1+2=9,小于10,符合合并条件,因此合并为skills is。
    • 后续的essential(9字符)、for(3字符)、growth(6字符)均无法与相邻单词合并(合并后长度会超过10),因此各自成块。

内容的提问来源于stack exchange,提问作者sachin murali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:57:02