Learn
Dify/20-kb-indexing-advanced

知识库索引进阶

第 4、5 章讲了基础切片与检索参数。但真实文档往往很长、层级很多:用固定长度切片会把一个完整流程「切断」,召回时只拿到半截。本章讲两个进阶武器——父子分段与检索调优。

1. 为什么普通分段会丢上下文

固定长度分段(如每段 500 字)存在两难:

  • 段太长 → 噪音多、向量被稀释
  • 段太短 → 缺少前后文,模型看不懂

文档天然有「章节 → 小节 → 段落」的层级。父子分段(Parent-Child Chunking) 利用这层结构解决矛盾。

2. 父子分段的原理

  • 父片段:按文档逻辑结构(标题、段落)切出较大的块,保留完整语义
  • 子片段:在父块内再细切成小块用于向量检索(更易命中)
  • 检索时先用子片段匹配,命中后返回对应的父片段给模型
# 父子分段配置示意
indexing_technique: "parent_child"
parent:
  chunk_size: 1000
  separator: ["\n## ", "\n### "]
child:
  chunk_size: 200
  overlap: 20
retrieve: child_match_then_return_parent
💡父子分段适合手册类文档

产品手册、政策制度、API 文档这类「层级清晰、单点问题对应大段说明」的资料,父子分段能同时保证召回精度与上下文完整,强烈推荐。

3. 混合检索权重调优

开启混合检索后,向量得分与关键词得分需要融合。语义问法多 → 调高向量权重;编号、专有名词多 → 调高关键词权重。

retrieval_mode: hybrid
weights:
  semantic: 0.7
  fulltext: 0.3
rerank:
  enabled: true
  model: bge-reranker-v2-m3
  top_n: 5

4. 重排与阈值联动调优

粗召回一批候选(如 20 个)→ 重排模型精排 → 取 TopN → 再按相似度阈值过滤。三步联动,常见基线:粗召回 20、重排取 5、阈值 0.5。

⚠️不要同时卡死重排和阈值

重排已把最相关的顶到前面,若再设很高阈值,可能把本应召回的答案过滤掉。重排开启时阈值宜放宽(0.4–0.5)。

🎯对比实验

同一份长文档,分别用「固定分段」和「父子分段」,问 10 个跨小节的问题,记录哪种方式的回答更完整、更少出现『片段看不懂』的情况。

小结

  • 父子分段:子片段检索、父片段送模型,兼顾精度与上下文
  • 混合检索靠权重平衡语义与关键词
  • 重排 + 阈值联动,重排开时阈值宜放宽
  • 下一步:把检索嵌进更复杂的工作流分支 →