首页/AI/RAG 与向量库速查/句子窗口切分

句子窗口切分

句子窗口策略用单句做检索单元、前后若干句作为上下文(window):句子级匹配更精确,窗口保证生成时有完整语境。

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

句子窗口切分是什么

句子窗口策略用单个句子当检索单元,同时把前后若干句打包成窗口(window)存进元数据:检索阶段按句子匹配,精度更高;命中后再把窗口文本替换回来送进生成,避免模型只看到一句孤立的话。它是长文档问答里在「检索精度」和「上下文完整」之间取的折中解。

基本信息

实现位置LlamaIndex 的 SentenceWindowNodeParser
关键参数window_size,控制前后各取多少句
配套组件MetadataReplacementPostProcessor 负责窗口回填
代价窗口文本随元数据存放,索引体积与存储成本上升

典型使用场景

  • 长手册问答:条款都写成短句,句子级匹配明显优于整段匹配
  • 法规与合同:单句常含条件限定,需要把前后句一起交给模型
  • 日志与工单:短文本记录多,窗口能把相关上下文聚合起来
  • 混合检索调优:句子级向量更短,同样维度下语义更集中
  • 引用精确化:命中粒度为句,引用可标注到具体句子所在段落

句子窗口节点

句子窗口节点
from llama_index.core.node_parser import SentenceWindowNodeParser

# window_size=3 表示每句前后各取 3 句组成窗口,窗口存进 metadata
parser = SentenceWindowNodeParser.from_defaults(window_size=3)
nodes = parser.get_nodes_from_documents(documents)
print(nodes[0].metadata["window"][:100])   # 检索命中的是句子,回填的是窗口
# 生成前必须接 MetadataReplacementPostProcessor,否则模型只拿到单句

窗口大小取舍

设置检索效果注意事项
window_size=1上下文紧、噪声少复杂问题常缺条件限定
window_size=3多数场景的平衡点邻句开始引入无关内容
window_size=8 以上信息最全信号被稀释,token 成本上升
未接回填处理器—模型只拿到单句,答案容易不完整
窗口只存在元数据里,不参与向量计算:入库时算的是句子向量,取回时才展开窗口,所以窗口大小可以调而不必重建索引。
句子切分本身依赖标点与语言规则,中文里分号、顿号密集的文本容易切成过长句,建议先看切分结果分布再定参数。
与固定长度切分相比,句子窗口的检索单元更短,同样 top-k 下召回的片段数量更多,重排阶段的候选规模要相应评估,否则生成侧上下文会被挤占。

易错点

  • 窗口过大时上下文混入邻句噪声,反而稀释信号
  • 忘记配置窗口替换处理器时,模型只拿到单句、信息不足
  • 句子切分未覆盖换行与无标点长文本,出现超长句导致向量语义模糊
  • 窗口文本随元数据全量存储,未评估索引体积就上大规模语料

数据来源与参考

  • LlamaIndex 官方文档(SentenceWindowNodeParser)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌