基于博文 Advanced RAG Techniques: an Illustrated Overview 的學習和練習的記錄。
中文內(nèi)容可以查看博主@寶玉的譯文 高級 RAG 技術:圖解概覽 [譯]
系列筆記:
RAG 學習筆記(一)
RAG 學習筆記(二)
搜索索引
- 向量存儲索引
- 層次索引
- 假設問題和HyDE
- 豐富上下文
- 融合檢索或混合搜索
向量存儲索引

基礎的索引檢索結構
搜索索引 是RAG pipeline 中的關鍵組成部分,用于存儲前面文本塊向量化后的數(shù)據(jù)。
搜索索引類型:
- 平面索引(flat index):最簡單的實現(xiàn),可以通過計算查詢文本的向量和所有文本塊向量的距離,來獲取最相關的查詢結果。
- 向量索引(vector index):在1萬個元素的量級上可以進行高效檢索,基于近似最近鄰居算法,如聚類、樹結構或 HNSW 算法。這類索引有: faiss、nmslib 或 annoy。
- 托管服務:如 OpenSearch、ElasticSearch 和向量數(shù)據(jù)庫,它們自動處理前文提到的數(shù)據(jù)攝取流程,例如 Pinecone、Weaviate 和 Chroma。
可以將文本的元數(shù)據(jù)與向量存儲到一起,使用元數(shù)據(jù)過濾器可以按照日期或來源等條件進行信息檢索。
LlamaIndex 支持多種向量存儲索引
層次索引

層次索引結構
場景:
需要從有許多文檔中進行高效的檢索,找到相關的信息,然后整合到一個答案中,并帶有參考來源。
實現(xiàn):
創(chuàng)建兩個索引:
- 一個索引由文檔摘要構成
- 一個索引由文本塊構成
分兩步搜索:
- 先從文檔摘要索引中過濾相關文檔
- 在這些文檔的范圍內(nèi),在文本塊中進行搜索
假設問題和 HyDE
假設問題法:
- 使用 LLM 為每個文本塊生成一個問題,然后將問題 embedding 為向量
- 搜索時,先使用問題搜索,找到相似問題的索引
- 然后找到這些問題對應的文本塊,使用文本塊作為上下文發(fā)送給 LLM 來獲取答案。
優(yōu)點:
查詢和假設問題之間的語義相似度更好,對比直接搜索文本塊,該方法的質(zhì)量更高。
另外一種方法叫 HyDE,與假設問題方法邏輯相反:
- 根據(jù)輸入問題生成回答,然后使用回答文本的向量和問題向量來提高搜索的質(zhì)量。