首页/AI/RAG 与向量库速查/固定长度切分(基线策略)

固定长度切分(基线策略)

按固定字符数滑窗切分是最简单的基线:实现零依赖、顺序稳定,但会截断句子与表格;适合无结构长文本或作为对照方案的起点。

RAG 与向量库速查AI更新于 2026-10-13

固定长度切分是什么

固定长度切分按字符数划窗:每块取 size 个字符,窗口每次前进 size 减 overlap 步。它零依赖、结果稳定可复现,是所有切分策略里最容易实现也最容易解释的基线。代价是不看内容结构——句子、条款、表格都可能被拦腰截断,语义完整性只能靠重叠部分兜底。工程上它适合两类场景:完全没有结构信息的长文本,以及作为其它策略的对照基线,用来量化“结构感知切分到底带来了多少收益”。

基本信息

参数chunk_size(块长)、chunk_overlap(重叠)
步长step = size − overlap,必须为正
输出特征块长整齐均匀,块数与语料长度成正比
实现依赖无,几行代码即可
主要缺陷不看句子与段落边界

典型使用场景

  • 无结构长文本:日志、访谈记录、OCR 后无层级的纯文本
  • 对照基线:与递归切分、标题切分、语义切分在同一评测集上比较
  • 快速验证:先把检索链路跑通,再逐步替换更精细的切分策略
  • 长度受限的写入:目标系统对单条文本长度有硬上限时的保底方案
  • 压力测试:用均匀块长估算索引体积与检索延迟的上限

滑窗切分

滑窗切分
def fixed_chunks(text, size=500, overlap=50):
    step = size - overlap                 # 步长必须为正
    assert step > 0, 'overlap 必须小于 size'
    return [text[i:i + size] for i in range(0, len(text), step)]

chunks = fixed_chunks(open('doc.txt', encoding='utf-8').read())
print(len(chunks), chunks[0][:60])

参数影响

参数调大调小
chunk_size语义更完整,噪声与成本上升命中更精准,上下文易割裂
chunk_overlap边界更稳,重复与体积上升体积更小,切口风险增加
step—必须为正,否则原地打转

什么情况下够用

  • 文本本身段落短且均匀,比如 FAQ 条目集合
  • 只做粗召回,后面还有重排精确筛选
  • 语料是机器生成的高度规整文本,结构噪声很低
  • 作为 A/B 的对照组,用来证明升级切分策略的收益
做切分策略对比实验时,embedding 模型、评测集与检索参数必须完全一致,否则无法判断指标变化来自切分还是来自其它变量。

易错点

  • 按字符硬切把句子与表格拦腰截断,语义破碎且无法在检索阶段修复
  • overlap 设成大于等于 size,步长为零或负,切分陷入死循环或直接报错
  • 用字数当长度单位而不按 token 核算,换模型后块长与预算对不上
  • 对结构化文档也用固定切分,标题层级与表格结构被彻底打散
  • 只在少数文档上验算块数,语料变长后块长分布出现异常尖峰未被察觉

数据来源与参考

  • LangChain 官方文档(CharacterTextSplitter,等价思路)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌