免費全文 RAG 檢索增強 入門

文件更新怎麼同步:增量索引的基本設計

文件會改,索引不能每次都全量重建。這篇是最小可行的增量更新設計。

RAG 檢索增強教程封面

RAG 上線後最先遇到的維運問題是:來源文件更新了,索引還停在舊版。全量重建在文件多的時候不可行,得做增量。

用內容雜湊判斷變更

import hashlib

def doc_hash(text):
    return hashlib.sha256(text.encode('utf-8')).hexdigest()

# 同步流程
for doc in source_docs():
    h = doc_hash(doc.text)
    if index.get_hash(doc.id) == h:
        continue                      # 沒變,跳過
    index.delete_by_doc(doc.id)       # 先刪舊片段
    index.insert(chunk_and_embed(doc), doc_hash=h)

三個容易忽略的細節

  • 先刪後插:否則同一份文件的新舊片段會同時被檢索到,互相矛盾。
  • 刪除也要同步:來源文件被移除時,索引裡的片段必須跟著刪,這是最常漏掉的一條。
  • 記錄同步時間:每份文件存 last_synced,才能查出哪些文件卡住沒更新。

排程與觸發

小型系統用排程定時掃描就夠;文件量大時改成由來源系統發事件通知,只處理變更的文件。

切塊或嵌入模型換版時,雜湊比對會失效——內容沒變但向量算法變了。這種情況必須全量重建,並在設定裡記錄「索引版本」以便判斷。
下一步

這個主題還有更深入的實戰教程

VIP 專區收錄 50 篇進階內容:架構設計、生產環境取捨、成本與合規。 每週五新增 3 篇。

看訂閱方案 → 先逛逛 VIP 專區