返回首頁

GitHub Repo

Dify 社群回報索引刪除競態,孤立項目可能占用 RAG 檢索名額

10 月 19 日的 Dify 社群回報指出,索引寫入期間刪除文件,可能留下孤立項目,讓檢索結果少於設定數量。修補提案已附測試,但尚未合併,也不會清除既有殘留資料。

The original uploader was Ggia at Greek Wikipedia. · CC BY-SA 2.5 · Image source
zh-Hant

Dify 社群於 10 月 19 日提出一項知識庫索引競態回報:文件仍在建立索引時遭刪除,背景工作可能隨後寫入失去文件對應關係的索引項目。這些項目仍可命中查詢、占用 top_k 候選名額,卻在載入文件片段時被捨棄,導致應用取得的參考內容減少。回報者在自行架設的 1.17.1 Docker 環境重現此現象。問題回報

依回報分析,清理工作先取得文件片段的索引識別碼並執行刪除,但當時索引寫入尚未完成,因此沒有資料可刪。背景寫入稍後落地,索引程序才察覺文件已不存在;原有處理只記錄訊息,未撤回剛寫入的項目。回報者刻意暫停關鍵字寫入以控制時序,觀察到三筆孤立項目;重新上傳相同內容後,top_k=3 的查詢只返回兩個片段。向量路徑則僅經程式碼檢查與單元測試,尚無完整嵌入服務實測。重現方法與限制

同日提出的修補,讓索引程序記住交給寫入後端的片段;若寫入後收到文件已刪除的例外,就呼叫新增的 discard 清理介面。高品質索引按識別碼移除本文或父子文件的子片段向量,經濟模式則在既有鎖定機制下移除關鍵字項目。作者另加入涵蓋真實索引流程與清理時序的競態測試。不過,提案仍待審查,範圍不含多模態附件向量,也不會回收修改前產生的孤立資料。修補提案

對 RAG 維運而言,這意味著檢索片段變少可能涉及索引與文件資料的一致性。工程上的推論是:若問題集中出現在刪除後重傳相同文件的流程,值得比較索引命中識別碼與實際可載入片段。Dify 官方文件說明,檢索測試與一般檢索共用 API 端點,測試頁可用於比對查詢,但調整的設定只在該次測試有效。後續應追蹤修補合併、正式版本,以及既有孤立項目的清理方案;目前尚不能據此推定所有向量後端均受影響。官方檢索測試文件

來源

  1. Reduce avoidable overhead in knowledge retrieval scoring and citation assembly #43664
  2. Knowledge Retrieval
  3. Test Knowledge Retrieval
  4. Deleting a document while it is being indexed leaves orphaned index entries that shrink retrieval results below top_k
  5. fix(api): discard index entries of documents deleted during indexing