如何建立會自動更新與刪除的 RAG 資料管線:5 步驟實作指南

如何建立會自動更新與刪除的 RAG 資料管線:5 步驟實作指南

在這部由 Nate Herk 所示範的實作教學中,他示範如何為 RAG(Retrieval-Augmented Generation)系統建立一條自動化資料管線,確保當你在 Google Drive 新增、更新或刪除 PDF 檔案時,向量資料庫(影片中稱為「Superbase」)會同步新增、更新或刪除對應的向量資料。核心議題是「資料的正確性與可預測性」——正如他所言:「predictability is your best friend」,沒有穩定且可驗證的資料來源,任何 AI agent 都無法給出可靠答案。

Nate 強調:建立一個供所有 agent 共用的知識庫,其前提是「知識是準確且最新的」。若資料「雜亂、過時或分散」,agent 將無法產出正確答案。因此必須設計自動化的 RAG 管線,不斷檢查向量資料庫的正確性與一致性。影片中他以實務例子闡明:「當你把 PDF 丟到 Google Drive,系統要把它放進向量資料庫;當你更新或刪除該檔案,資料庫也要同步更新或刪除。」

RAG 資料管線的三階段與四個關鍵要素

Nate 把資料管線分為三個步驟: - 原料(Raw material):輸入的原始檔案或資料來源(例如 YouTube URL、PDF、CSV)。 - 處理流程(Processing line):轉成可 ingest 的資料(擷取文字、時間戳、去重、打上 metadata、chunk 與 embedding)。 - 終端位置(Destination):向量資料庫或關聯式資料庫(影片示例使用 Supabase/Superbase 作為向量存放地)。

此外有四個必須考慮的要素: 1. 觸發器(Trigger):「what actually starts the process」——例如新郵件、Google Sheet 新列、檔案上傳或某條件達成。 2. 輸入(Inputs):「你需要知道資料會以何種格式進來」——PDF、CSV、圖片還是純文字? 3. 處理(Processing):「清理、去重、標注 metadata、拆 chunk、產生 embeddings」。 4. 儲存(Storage):「把處理完的文件放入向量資料庫或其他儲存層」。

實作案例(1)——新增檔案:Google Drive → Supabase

Nate 的第一個流程是:當新檔案放入 Google Drive 指定資料夾(範例資料夾名 = "rag")時,自動把檔案放入向量資料庫。關鍵步驟與設定包括: - 觸發器:使用 Google Drive 的「on changes involving a specific folder」,並設定為「file created」。其範例動作:「we're watching for a new file being created in this folder」。 - 下載檔案:使用 Download by ID。若是 Google Doc,需「add conversion」把 doc 轉為 PDF(以 binary 形式輸入)。 - 資料庫上傳(Supabase vector store):資料 loader 改為接收 binary;加入 metadata 兩個欄位:file_name(範例為 "policy and FAQ document")與 date(timestamp),以利後續比對與刪除。 - Embedding:選用 OpenAI 的 embedding 模型,影片範例為「text-embedding-3-small」,此模型需與資料庫使用的 embedding 模型一致。 - 結果驗證:上傳後出現「5 items」被插入(代表文件被切成 5 個 chunk/向量)。可用一個簡單 agent 詢問文件內容,範例如:「what is our shipping policy?」得到回答(直接從向量檢索出): "Orders are processed within one to two business days. Standard shipping takes 3 to seven business days."

實作案例(2)——更新檔案:先刪除舊向量,再上傳新向量

當檔案在 Google Drive 更新(Trigger 設為「file updated」)時,必須把舊有向量刪除以避免資料不一致。Nate 的做法如下: - 先用 Google Drive trigger(on changes involving a specific folder,watch = "file updated")。 - 在 Supabase 使用「delete a row」節點刪除對應 rows。刪除條件以 metadata 中的 file_name 為鍵,表達式示例為:metadata->>file_name LIKE 'policy and FAQ document'。Nate 說明:「你可以用 file ID 或 file name 來當作唯一識別」。 - 執行刪除後,示例刪掉了原先的「5 items」,向量資料庫因此清空舊資料。 - 再下載(轉 PDF)並重新上傳新檔案(同新增流程),最終向量再次出現(新 metadata 顯示 store_name 從 "tech haven" 改為 "green grass"),以驗證更新成功。Nate 範例中反覆測試並確認 agent 回應內容也反映了新資料(agent 回答 store name 為 "green grass")。

處理重複輸出與執行次數:設定「Execute only once」

在流程測試時,Nate 發現刪除 rows 後 Google Drive 的節點會返回多筆同樣的輸出(因為 Supabase 回傳 5 items),導致後續節點被重複執行。解法是針對該節點設定「Execute only once」,避免重覆處理,確保流程穩定。這個細節在實務上能避免重複上傳或重複刪除造成的不一致。

處理檔案刪除:回收站(recycling bin)作為替代方案

Nate 指出 Google Drive 的 webhook/trigger 並未提供「file deleted」的直接選項;因此採取「回收站監控」作為替代: - 新建一個資料夾(範例名 = "recycling bin"),並把觸發器設為「file created」但監控此 recycling bin。 - 當使用者把檔案從原資料夾移到回收站時,該事件會觸發(因為在回收站發生了 file created),流程只需執行 Supabase 的刪除邏輯(以 metadata->>file_name 為條件刪除)。 Nate 說明:「這是一個 band-aid fix,但可行」,目的在於示範管線思維,而非最完美的產品化實作。

關鍵技術設定與數據(需突顯)

  • 資料庫:Supabase(影片中稱為 Superbase),表格範例名為 documents,表中包含 embedding 欄位。
  • Chunk 數量:影片範例中上傳結果顯示「5 items」,表示原始文件被切分為 5 個 chunk 進行嵌入。
  • Embedding 模型:OpenAI text-embedding-3-small(需同資料庫所用模型一致)。
  • Metadata 欄位:至少建立 file_name(或 file_id,作為唯一識別)與 date(timestamp)以利版本管理與刪除操作。
  • 觸發器策略:使用 folder-level triggers(on changes involving a specific folder)可同時處理多個檔案,避免為每個檔案單獨設 trigger。

驗證流程與 Agent 測試

Nate 實作了一個簡單 agent,連接向量資料庫後,直接向 agent 詢問文件內容以驗證檔案是否被成功 ingest。範例回答摘錄: "Orders are processed within one to two business days. Standard shipping takes 3 to seven business days." 這證明了整條管線從檔案上傳 → 處理 → 向量化 → 檢索都能串通運作。

注意事項與擴充方向

  • 可預測性很重要:先明確你的輸入類型(PDF、Word、Excel、影像、文字),再針對不同類型建處理分支(Nate:「predictability is your best friend」)。
  • 唯一識別:使用 file_id 比較可靠,但 file_name 可讀性高;任選一種且在 metadata 中保持一致即可。
  • 刪除策略:影片採回收站監控作為 workaround;若要產品化,建議探查 Drive API 或 webhook 是否可提供更直接的 deleted event,或維護一份檔案狀態表(例如 Google Sheet)做雙向比對。
  • 優化向量化:Nate 表示本次示範以簡化為主,未深入討論最佳 chunk 長度、語言偵測、去噪或不同文件類型的特殊處理;生產環境應考量這些細節。

結論與行動建議

  1. 建立 RAG 管線的核心是「觸發器、輸入、處理、儲存」四要素,以及保證資料可預測與可驗證。
  2. 在 metadata 中保存唯一識別(file_id 或 file_name)與 timestamp(date),可實現「更新即刪除舊向量、再上傳新向量」的正確流程。
  3. 面對無法直接偵測刪除事件的情況,可採用「監控回收站」作為實作上的可行替代方案。
  4. 測試時注意避免節點被重複執行(例如設定 execute only once),以免出現重複上傳或刪除失誤。
  5. 若要擴展至多種檔案類型(Word、Excel、圖片等),應在觸發器與處理流程中加入類型分流與對應的處理邏輯。

參考資料(原始教學影片):https://www.youtube.com/watch?v=5uw1wE6niGc

Read more

Claude 的 Project、Skill、Connector 到底怎麼分?一次搞懂三者的關係

很多人問我,在 Claude 裡面,Project、Skill、Connector 這三個東西到底差在哪裡? 什麼時候該用哪一個? 老實說,我一開始也搞得很混亂。 但實際用了一段時間之後,我發現其實邏輯很簡單。 先從最基本的開始:Connector 是對外的資料來源 如果你需要從外部拿資料,比如說接 Google Calendar、接 Notion、接你自己的資料庫,你就需要 Connector。 它就是一個 MCP 的連結,讓 Claude 可以去外面抓資料回來。 沒有 Connector,Claude 就只能用它自己知道的東西,沒辦法碰到你的資料。 Skill 則是內部的運算邏輯 Skill 沒有辦法對外連接。 它只能在內部用 Python 或程式碼執行。 你可以把它想成是一個 Controller,專門負責處理運算的部分。 比如說,你想讓 Claude 用特定的格式改寫文章、

By andy

讓 AI 認識你 — Memory is All You Need

讓 AI 認識你 — Memory is All You Need 最近我在 Claude 上快速搭建了七大 Agent。 原因很簡單:你的助理應該是越使用越懂你。 而 Claude Project 有個關鍵功能叫 Memory,它會根據你不斷詢問的過程,主動提取記憶。 這就是我認為 AI 助手真正強大的地方。 GA 分析助手:從進階到客製化 自從我串接 GA MCP 後,這位助手已經變得非常厲害。 漏斗分析、訪客來源、異常事件追蹤、站上任何問題都難不倒它。 但我想要的不只是這些。 我希望它隨著時間,能夠對齊我的知識,知道我要什麼。 你不用想太多,不用一次設定好整個 instructions。 試著使用一週,再回頭看看 memory,你會發現它已經根據你的行為開始學習客製化了。 許多助手不需要懂老闆要什麼,但網站分析不一樣。 因為我沒有那麼多美國時間,

By andy

AGI 來臨:兩大 AI 巨頭的預測與警示

在近期的達沃斯論壇上,Anthropic 執行長 Dario Amodei 與 Google DeepMind 執行長 Demis Hassabis 進行了一場關於「AGI 之後的世界」的深度對談,揭示了 AI 發展的最新進展與未來展望。 AGI 時間線預測 Dario 重申了他去年的預測:在 2026-2027 年,AI 模型將能夠在諸多領域達到諾貝爾獎得主的水準。他表示目前 Anthropic 的工程師已經不再親自寫程式碼,而是讓模型來完成編寫工作,人類只負責編輯和周邊任務。他預估在 6-12 個月內,模型將能端到端完成大部分工程師的工作。 Demis 則持稍微保守的態度,認為在十年內有 50% 的機會實現 AGI。他指出編程和數學領域較容易自動化,因為結果可驗證;但自然科學領域則更具挑戰性,需要實驗驗證,且目前模型在「提出問題」和「建立理論」

By andy