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

关于Langchain RecursiveCharacterTextSplitter分割行为不符预期的技术问询

关于Langchain RecursiveCharacterTextSplitter的分割逻辑说明

你的代码未指定separators参数,RecursiveCharacterTextSplitter会使用默认分隔符列表:["\n\n", "\n", " ", ""],它的核心逻辑是优先采用列表中优先级更高的分隔符,尽可能将不超过chunk_size的内容合并为一个块,而非遇到分隔符就立即拆分。

看你的测试文本:"""a\nbcefg\nhij\nk""",总长度13。当chunk_size=10时:

  • 首先尝试用最高优先级的\n\n分割(文本中不存在该分隔符),接着切换为\n。
  • 第一个候选块a\nbcefg长度为7(小于10),如果追加下一段\nhij,总长度会达到11(超过10),因此停止合并,将a\nbcefg作为第一个块。
  • 剩余的hij\nk长度为5(小于10),直接作为第二个块。

要实现你预期的['a','bcefg','hij','k'],需显式指定separators=["\n"],让分割器优先按单个换行符分割。由于每个拆分后的块长度均小于chunk_size=10,最终会直接按每一行拆分:

修改后的代码:

from langchain.text_splitter import RecursiveCharacterTextSplitter
r_splitter = RecursiveCharacterTextSplitter(
    chunk_size=10,
    chunk_overlap=0,
    separators=["\n"]  # 显式指定分隔符
)
test = """a\nbcefg\nhij\nk"""
print(len(test))
tmp = r_splitter.split_text(test)
print(tmp)

输出结果:

13
['a', 'bcefg', 'hij', 'k']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:57:28