from llama_index.core.node_parser import SentenceSplitter
# 中文专属最优配置
node_parser = SentenceSplitter(
# 中文字符长度,适配常规embedding上下文
chunk_size=512,
# 重叠量,避免语义截断丢失信息
chunk_overlap=100,
# 基础单词分隔符(通常用不到,但保留默认以防万一)
separator=" ",
# 优先按段落切分,保留大块语义
paragraph_separator="\n\n",
# 将中文标点加入备用切分正则,精准断句
secondary_chunking_regex=r'[^,.;;。?!……,]+[,.;;。?!……,]?|[,.;;。?!……,]'
)
参数解释
chunk_size:中文建议 400-500,兼顾语义完整与向量精度
chunk_overlap:60-80 区间最佳,跨块关联内容不割裂
secondary_chunking_regex:正则表达式
[^,.;;。?!……,]+:匹配一连串不是这些中英文标点的字符(也就是句子的正文内容)。[,.;;。?!……,]?:如果正文后面紧跟着一个这些标点,就把它也带上(零次或一次)。|:表示“或者”。[,.;;。?!……,]:兜底规则:单独匹配任意一个标点符号(防止连续标点被漏掉)。
微调适配场景
- 公文 / 论文:chunk_size=500,overlap=80
- 小说 / 口语文本:chunk_size=400,overlap=60
- 短句问答类文档:chunk_size=300,overlap=50