向量儲存索引損壞:原因、偵測與復原
生產RAG系統中向量儲存索引損壞的診斷與復原實用指南——涵蓋部分寫入、索引期間OOM、版本不匹配以及經過驗證的復原策略。
你的RAG管線一直在正常運作。檢索品質很好,利害關係人很滿意,系統準確地回答著問題。然後,逐漸地或突然地,它停止了運作。曾經回傳相關上下文的查詢現在回傳不相關的片段或什麼都不回傳。LLM開始產生幻覺,因為它使用的是糟糕的上 下文——或者根本沒有上下文。
嵌入模型沒有改變。文件還在。問題出在中間環節:向量儲存索引損壞了。
索引損壞是生產RAG中最令人困惑的故障之一,因為其症狀模仿了其他問題。糟糕的檢索結果看起來像是分塊問題、嵌入問題或提示詞工程問題。團隊可能花費數天時間調整錯誤的元件,然後才發現索引本身已經損壞。
本文涵蓋了向量儲存索引損壞的原因、如何系統地偵測它,以及如何在不遺失整個索引的情況下復原。
什麼導致索引損壞
向量儲存索引是複雜的資料結構——HNSW圖、IVF分區或帶有中繼資料映射的平面索引。它們不是簡單的鍵值儲存。當這些結構的內部一致性被破壞時,就會發生損壞。
索引期間的部分寫入
最常見的原因。當你向索引新增新向量時,操作涉及多個步驟:插入向量、更新圖結構(對於HNSW)或分區指派(對於IVF),以及寫入中繼資料。如果過程在寫入中途被中斷——由於當機、部署、容器重新啟動或網路逾時——索引可能處於不一致狀態。
結果:一些向量被插入但未連接到圖,或中繼資料參照指向不存在的向量。搜尋回傳不完整的結果,因為圖遍歷無法到達斷開連接的向量。
索引期間的記憶體不足
大批量索引操作可能超出可用記憶體,特別是當向量數量接近機器能夠保持在RAM中的限制時。當程序被OOM killer終止時,磁碟上的索引檔案可能只寫了一部分。
這對於記憶體映射索引特別危險。作業系統可能已將一些髒頁刷新到磁碟但未刷新其他頁,使索引檔案處於不代表任何單一時間點的狀態。
版本不匹配
向量儲存函式庫在版本之間會演進其磁碟格式。升級函式庫而不遷移索引——或者更糟的是,讓不同的服務使用不同的函式庫版本針對同一個索引——會造成表現為靜默檢索退化而非硬錯誤的損壞。
一個常見場景:開發環境更新到最新函式庫版本,而生產環境保持在之前的版本。在開發環境中建構或修改的索引被部署到生產環境。舊版函式庫部分讀取新格式,遺漏向量或誤解圖的邊。
並行寫入衝突
多個程序在沒有適當鎖定的情況下同時寫入同一個索引是損壞的配方。這比預期更常發生——重新索引作業在應用程式仍在處理寫入時啟動,或兩個工作程序都嘗試從不同的文件批次新增向量。
硬體級故障
磁碟損壞、故障的SSD和不可靠的網路附加儲存可能翻轉索引檔案中的位元。這些故障很少見,但會產生最令人困惑的症狀,因為損壞是隨機的且不遵循任何邏輯模式。
如何偵測索引損壞
偵測是困難的部分。損壞很少以清晰的錯誤訊息宣告自己。相反,你看到的是可能有多種原因的檢索品質退化。