跳到主内容
快讯直播
AI智模界
AI 词典

句子窗口检索:小句子召回,大窗口喂模型

Sentence Window Retrieval(句子窗口检索)是一种 RAG(Retrieval-Augmented Generation,AI 词典:检索增强生成">检索增强生成)里的取数策略:用单个句子去建索引、去和问题做匹配,但命中之后并不把这一句直接交给模型,而是把这句话在原文里前后的若干句一起捞出来,作为上下文一起放进 prompt。

它解决的是一个矛盾

RAG 的第一步是切块(chunking)。块切多大,一直是个两难:

  • 切得小(一句话),向量表示干净、语义集中,和问题比对时精度高,不会被无关内容稀释;但单句常常缺主语、缺条件、缺指代,模型拿到“它的价格是 199”这种句子,根本不知道“它”是谁。
  • 切得大(整段甚至整章),上下文是全了,但一大段文字压成一个向量,主题被平均掉,匹配精度下降,还白烧 token。

句子窗口检索的思路是:把“用来匹配的单元”和“用来生成的单元”拆开。索引时按句子切,每句存两份东西——句子本身用于向量化,以及它在原文中前后各 N 句的原文,存进 metadata(元数据)。检索时问题只跟句子向量比,命中 top-k 之后,再把对应的窗口文本取出来拼进 prompt。

打个比方:查纸质词典。你先在索引页看到一行“apple:苹果”,这行字很短、很好定位;但真正翻到正文,你读到的是完整的释义和例句。索引负责“找得准”,正文负责“看得懂”。

和相邻概念的区别

策略建索引用什么喂给模型什么特点
固定小块小块同一个小块匹配准,上下文残缺
固定大块大块同一个大块上下文全,召回噪声大、耗 token
句子窗口单句单句 ± N 句匹配准 + 上下文完整
Parent Document小块所属父文档/大段上下文更全,token 更贵

几个容易混的点:

  • 和滑动窗口分块不同:滑动窗口是切块时就制造重叠、都拿去建索引;句子窗口是检索之后才扩展。
  • 和 Parent Document Retriever(父文档检索)不同:父文档靠层级归属(小块属于哪个大段),窗口是原地前后滑动的,可能跨段落甚至跨小节。
  • 和 rerank(重排)不同:重排改的是候选的排序,窗口改的是候选的“内容边界”,两者可以叠加用。

对从业者的实际意义

实现成本很低:切句 → 每句算 embedding → 把窗口原文塞进 metadata → 命中后取窗口文本。要注意几件事:窗口大小 N 是超参,调大上下文更全,但 token 和噪声一起涨,够用就好;相邻句子的窗口会大量重叠,拼进 prompt 前要去重合并;中文切句不能只认句号,分号、换行、列表项都要考虑,超长句还得截断。具体实现细节各家框架不同,以官方文档为准。

对普通用户来说,它解释了一个体验差异:好的企业问答助手,不只是“准确引用到那一句”,还能顺带把这句话的前因后果讲清楚——因为喂给模型的本来就是一小段原文,而不是孤零零的一行字。

AI 生成本文由 AI 基于公开信息自动生成,仅供参考。