iT邦幫忙

2025 iThome 鐵人賽

DAY 21
0
自我挑戰組

從讀書筆記到可落地 AI:LangChain、LangSmith 與 Agent 工具 30 講系列 第 21

Day 21|Agent Design - RAG - 有時效性資料的處理方式(2/2)

  • 分享至 

  • xImage
  •  

目標先講清楚:
如何讓向量資料庫中的內容,隨著來源資料更新而「持續正確」

許多「會變動」的內容(菜單、報價、活動資訊、最新文章、景點資訊…)原本都存在傳統關聯式資料庫(例如 MSSQL、Postgres)。當開始做語意檢索 / RAG,就會遇到一個痛點:如何讓向量資料庫中的內容,隨著來源資料更新而「持續正確」

提供做法:

  • 透過批次同步與(或)CDC 即時同步關聯式資料庫跟向量資料庫
  • 軟刪除守住風險與回溯能力;
  • 查詢時再用metadata 過濾 + 混合檢索 + rerank,同時兼顧相關性與新鮮度。

[!NOTE]

  1. 如果要達到更加即時,大部分是建議使用有支援向量搜尋的資料庫(ex. postgres, mongo, elestic)
  2. 文章提到的情境是無法重啟或修改postgres部署設定,因此無法使用pgvector

1. 適用情境

情境 A:striim分享即時串流 RAG(CDC→流中向量化→pgvector)

什麼時候用?
結構化業務資料變動快(例如電商商品/庫存、價格、可賣量),需要「幾近即時」可查。

怎麼運作?

  • 來源擷取:對 Oracle 等交易庫做「初始快照 + CDC」持續變更。
  • 串流內嵌入:在同一條資料流中即時產生 embeddings(可用 OpenAI/Vertex AI 等)。
  • 寫入目標:把最新資料 + 對應向量一起寫進 PostgreSQL(pgvector),資料與向量同庫。
  • 查詢路徑:查詢時產生查詢向量 → 在 pgvector 做相似度檢索 → 回傳結果/摘要。
  • 持續同步:CDC 事件觸發重算/更新向量,避免批次延遲造成「過時答案」。

情境 B:Flink CDC宣告式資料管線

什麼時候用?
你有可程式化/基礎建設即程式(IaC)式的資料管線,希望把「Embedding/Chat 模型」當成管線資源統一管理。

怎麼運作?

  • 在 YAML 宣告模型(host、API key、模型名…)。
  • Transform 節點直接呼叫,如 embed_model.embed(text)
  • 範例流程:從 testdb.articles 抽「今日新文」→ 將「標題+內文」做嵌入 → 寫入 Elasticsearch 供語義/RAG 查詢。

2. 軟刪除(soft delete)

主要依據以下的原因:

與向量庫的內部機制相容(避免即時物理刪除的成本)

  • Qdrant 等向量庫對刪除多採「先標記、後清理」。立即物理刪會造成昂貴的段重寫;先標記能減少磁碟 I/O,再由 Vacuum/Optimizer 於閾值觸發時合併、清理刪除殘骸。也就是說,系統本身就以「軟刪→定期整理」為最佳路徑。
  • Milvus 也有類似「刪除標記 + 之後 compaction」的思路;大量即時硬刪在工程上更痛、代價更高。

資料管線與一致性(特別是批次/CDC 同步)

  • 在查詢面立即生效(用 metadata 過濾掉),同時讓後台清理任務有緩衝期;
  • 容忍 重試/延遲(例如 CDC 事件亂序時不會誤硬刪);
  • 與供應商提供的條件刪除/metadata 過濾能力天然契合(Pinecone/Weaviate 皆支援依 metadata 過濾,方便把 is_active=false 的資料排除或批次處理)。

效能與成本(熱/冷分層+定期清理)

  • 推薦/RAG 會做時間窗或熱度分層:把舊內容標記為非活躍、預設不檢索;到達門檻再由後台壓實清掉。這種「前台軟刪、後台 Vacuum/Compaction」能兼顧低延遲與儲存成本,也避免頻繁硬刪導致索引碎片化與查詢抖動。Qdrant 官方文件對「刪除累積需要 Vacuum」有明確說明。

3. 實作

https://ithelp.ithome.com.tw/upload/images/20251005/20178568hBMLxf8nQm.png

airbyte官方文件提供詳細的部署方式

a. sources connector設定

跟一般的Postgres連線設定一樣
https://ithelp.ithome.com.tw/upload/images/20251005/20178568dYCm7VRRM5.png

b. distance connector設定

  1. 直接將postgres table的field,依照需求填入Fields to store as metadata欄位和Text fields to embed欄位,就會依照設定組成metadata跟embedding
  2. 針對「Text fields to embed欄位」,多個欄位會組成成一個字串去進行embedding
  3. 目前有支援ollama的edge端的embedding model

https://ithelp.ithome.com.tw/upload/images/20251005/20178568mvBzNU4D7Q.png

c. connection的頻率設定

提供多種方式
https://ithelp.ithome.com.tw/upload/images/20251006/20178568Kniw1TIcH2.png

d. connection自動執行

https://ithelp.ithome.com.tw/upload/images/20251005/201785681bWhCmCnlN.png

接下來要做什麼

分享context 處理工程的做法


參考資源

1.airbyte document
2.Real-Time RAG: Streaming Vector Embeddings and Low-Latency AI Search
3.qdrant-Optimizer
4.Flink CDC YAML:面向数据集成的 API 设计


上一篇
Day 20|Agent Design - RAG - Weaviate和Pinecone提高搜尋準度方式分析(1/2)
系列文
從讀書筆記到可落地 AI:LangChain、LangSmith 與 Agent 工具 30 講21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言