詳細解釋
RAG 中的分層檢索策略:先檢索父文檔(粗粒度,如整章),再在其內部檢索子文檔(細粒度,如段落),平衡召回率與精度。
問題背景:
- 粒度困境:大塊(易丟失細節)vs 小塊(語境不全)
- 傳統 RAG:固定大小塊,難以兼顧
- 父子結構:利用文檔自然層級(書→章→節→段)
運作方式:
- 父級索引:粗粒度單位(章、節)建立向量索引
- 子級存儲:細粒度單位(段、句)存儲在父級內
- 兩階段檢索:
- 向量搜索找到相關父級
- 在這些父級內 BM25 搜索具體子級
優勢:
- 語境保留:子級有完整父級作為背景
- 精度提升:小單位匹配具體查詢
- 效率:減少需要精細搜索的範圍
- 結構感:利用文檔原有組織結構
實現方式:
- LlamaIndex:原生支持父文檔檢索器
- 自定義:建立雙索引,父索引存子塊引用
- 數據庫:PostgreSQL 層級查詢 + 向量搜索
適用場景:
- 技術文檔:API 文檔、用戶手冊
- 法律文書:法典、合同(條款層級)
- 研究論文:章節結構的學術文獻
- 產品手冊:分層組織的產品信息
與普通 RAG 的對比:
- 普通:固定 500 字塊,可能切斷語境
- 父子:利用自然邊界,語境完整
這是「語境感知的 RAG」—— 讓檢索尊重文檔的邏輯結構。