首页/AI/AI 应用速查/父子块检索(Small-to-Big)

父子块检索(Small-to-Big)

检索用小粒度(子块)保证命中精度,返回用大粒度(父块/整节)保证上下文完整:子块存向量,父子通过 id 关联,命中后回溯父块送给模型。

AI 应用速查AI更新于 2026-10-13

父子块检索是什么

父子块检索解决的是「切得细才召回准、切得粗才上下文完整」这对矛盾:子块粒度小、语义聚焦,负责被检索到;父块是章节或整段,负责喂给模型。做法是子块入向量库,并在元数据里存 parent_id,命中后按 id 批量取回父块,去重之后放进上下文。常见变体是句子窗口检索:命中某个句子后,把它前后若干句一起返回。代价是实现与维护复杂度上升,尤其是增量更新时父子关联容易被打断。

基本信息

子块职责短、语义聚焦,负责被检索到
父块职责章节或整段,负责喂给模型
关联方式子块元数据存 parent_id
常见变体句子窗口检索:命中句取前后 N 句
收益同时缓解切太碎丢上下文与切太粗召回不准
风险增量更新打断父子关联,命中后取不到父块

典型使用场景

  • 技术文档问答:用行级小块命中定位,返回整节内容供生成
  • 条款类材料:按条命中,返回该条完整上下文避免断章取义
  • 工单知识库:命中具体问法,返回整段处理流程
  • 会议记录检索:命中一句话,返回该议题的完整讨论段
  • 评测调优:对比不同粒度组合对答案完整度的影响

父子关联结构示意

父子关联结构示意
// 子块:入向量库,字段精简以提升检索精度
{
  "id": "p12-c03",
  "text": "缓存命中按折扣计费,未命中的输入按原价计算",
  "parent_id": "p12",
  "section": "计费 > 缓存"
}
// 父块:单独存储,命中后按 parent_id 批量取回
{
  "id": "p12",
  "text": "(整节原文,含缓存的定义、命中条件与计费规则)"
}
// 生成时使用父块文本;同一父块被多个子块命中时先去重

粒度方案对比

方案召回精度上下文完整性
小块单粒度高低,命中片段常缺前提与结论
大块单粒度低,噪声多高,但相关性判断吃力
父子块高高,代价是实现复杂度上升
句子窗口高中,取决于前后句窗口大小
父子块与重排是互补的:重排决定取哪几条,父子块决定取回多大的上下文。两者一起用时要控制最终进上下文的字符总量。
去重是父子块的必要步骤:同一父块常被多个子块命中,不去重会把同样的内容重复灌进上下文,既浪费预算又稀释重点。

易错点

  • 命中子块却把子块本身送进模型:上下文不完整,答案缺前提
  • 父子关联被增量更新打断:父块被替换后子块仍指向旧 id,命中后取不到内容
  • 同一父块去重缺失:相同内容重复进上下文,token 浪费且干扰判断
  • 父块粒度过大:一次取回整章内容,输入成本与噪声同步上升
  • 只建子块不建父块索引:回溯失败时静默降级成只返回子块

数据来源与参考

  • LlamaIndex Small-to-Big / Sentence Window 文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌