iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0
DevOps

初探 LLM 可觀測性:打造可持續擴展的 AI 系統系列 第 28

【Day 28】深入向量資料庫:理解 RAG 在 AI 時代依然至關重要

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20251012/20149562bQemfHWJqL.jpg

前言

前些陣子,社群上開始興起了 RAG 已死的言論,因為主流大模型的 Token 窗口已經大幅度的成長到百萬級別,足以消化大部分的資料並即時回應。這也使得一部分的文章開始鼓吹這種極度搏眼球的行銷話題。

但研究顯示,RAG 並非消亡,而是持續演化,它正在適應大型 LLM 擴展後的更大上下文能力,同時在處理龐大且動態的資料集時依然不可或缺。由向量資料庫驅動的語義搜尋仍然在人工智慧中扮演關鍵角色,因其能以高效率進行基於相似度的檢索。然而,業界討論的焦點也逐漸轉向具備自主推理能力的 Agent 系統。各種證據顯示,混合式架構依然佔據優勢,甚至更加被器重。因為它在複雜查詢情境中平衡完整上下文處理與資料檢索能力,並在技術創新存在多種優化路徑。

為什麼 RAG 對現代 AI 依然重要

儘管有人宣稱,隨著 LLM 上下文視窗擴展(例如 Gemini 的上下文長度達 200 萬 tokens),RAG 已無用武之地,但事實上 RAG 正在演化成更進階的型態,例如「Agentic RAG」。在這種架構下,LLM 能夠協調多步驟的資料檢索與工具調用,在企業級應用場景中,大幅提升回應的準確性與深度。

RAG 的核心價值主張因此依然明確且不可或缺:

  • 處理即時與專有資料:它能讓 AI 應用接觸到最新的資訊和企業內部獨有的知識庫,而無需耗費巨大成本重新訓練模型。
  • 減少「幻覺」:透過提供具體、可溯源的上下文,顯著降低 LLM 憑空捏造資訊的機率。
  • 提升效率與可擴展性:在需要處理 TB 級文件資料庫,或必須遵循嚴格隱私控管的環境中,RAG 的檢索機制遠比單純將海量內容塞進 LLM 上下文更有效率、更安全、也更可靠。

這背後強大的檢索能力,有很大的一部分正是由語意搜尋所驅動,而語意搜尋的基石,就是我們接下來要深入探討的主題「向量資料庫」。

傳統資料庫的挑戰:為何我們需要向量資料庫?

https://ithelp.ithome.com.tw/upload/images/20251012/20149562gVQfP9oTuc.png

數十年來,我們的數位世界建立在兩類主要的資料庫之上:OLTP (線上交易處理) 和 OLAP (線上分析處理)。

  • OLTP 資料庫:如同銀行系統或電商庫存管理,專為快速、大量的交易而設計。它們以「列 (Row)」為中心,確保每一筆訂單、每一次存款都能被準確、迅速地記錄。
  • OLAP 資料庫:如同商業智慧報表系統,專為複雜的分析查詢而設計。它們以「欄 (Column)」為中心,擅長對海量資料進行聚合與分析,例如計算「過去一年某地區所有商品的總銷售額」。

這兩者共同構成了結構化資料的堅固堡壘,但面對今日爆炸性增長的非結構化資料的文字、圖片、音訊、影片,它們卻顯得力不從心。

傳統資料庫可以儲存一張圖片的檔案,卻無法「理解」圖片裡是一隻貓還是一隻狗;它可以儲存一份 PDF 文件,卻無法理解文件內容的語意。當你的搜尋需求從「找出訂單編號 12345」變成「找一些和這張圖片風格類似的圖片」時,傳統資料庫就束手無策了。

https://ithelp.ithome.com.tw/upload/images/20251012/20149562CyJmBga4yC.png

這正是向量資料庫應運而生的契機。它不關心資料的格式,只關心資料的語意和上下文

什麼是向量資料庫?為「語意」而生的儲存系統

https://ithelp.ithome.com.tw/upload/images/20251012/20149562OfPFPuU9ty.png

向量資料庫是一種專門設計用來儲存、管理和搜尋「向量嵌入 (Vector Embeddings)」的資料庫。

不同於儲存行列分明的表格資料,向量資料庫將所有資料,無論是文字、圖片還是聲音都可以轉化為一串數字,即「向量」。

可以把它想像成一個巨大的多維空間,每一個資料點(例如,一句話、一張圖片)都被轉換成這個空間裡的一個點(向量)。這些點的奇妙之處在於,它們在空間中的相對位置代表了它們在語意上的關聯性。「貓」和「小貓」的向量在空間中會非常接近,而「貓」和「汽車」的向量則會相距甚遠。

特徵 OLTP 資料庫 OLAP資料庫 向量資料庫
資料結構 列和行 列和行 向量 (多維空間中的點)
資料類型 結構化 結構化/部分非結構化 非結構化
查詢方法 SQL (精確匹配) SQL (聚合、分析) 向量搜尋 (基於相似性)
儲存焦點 交易與更新 讀取與分析 上下文與語意
核心用途 訂單處理、CRM 商業智慧、資料倉儲 相似性搜尋、推薦系統、RAG

向量資料庫如何運作?

https://ithelp.ithome.com.tw/upload/images/20251012/20149562qUYYx9mDuw.png
https://www.altexsoft.com/blog/vector-database/

要真正理解向量資料庫的運作方式,讓我們跟隨一個電影推薦系統的完整流程。這個例子將生動地展示從資料輸入到結果輸出的每一步。

1. 輸入與嵌入 (Input & Embedding)

旅程的起點是「內容」。假設你剛剛在串流平台上看完了一部電影《全面啟動》(Inception)。

  • 內容輸入:系統捕捉到這個行為,並準備好《全面啟動》的所有相關屬性,如電影類型(科幻、動作)、導演(克里斯多福·諾蘭)、演員、劇情簡介等。
  • 生成向量:這些豐富的資訊被送入一個嵌入模型 (Embedding Model)。模型將其「理解」並轉化為一個由數字組成的向量嵌入,例如 [0.84, 0.38, ..., 0.56]。這個向量,就是《全面啟動》在多維語意空間中的唯一數學座標。

2. 儲存與索引 (Storage & Indexing)

  • 存入資料庫:這個新鮮出爐的向量,連同它的元資料(Metadata,如電影名稱、年份、IMDb 評分等),被儲存到向量資料庫中。
  • 建立索引:在儲存的同時,資料庫會在內部執行索引 (Indexing) 程序。它會使用我們稍後會深入探討的 HNSW 等演算法,將這個新的電影向量放入一個高效的搜尋網路中,確保未來可以被快速找到。

3. 查詢與搜尋 (Query & Similarity Search)

現在,當你回到首頁,應用程式 (Application) 需要為你推薦下一部電影時:

  • 生成查詢向量:系統會根據你的觀看歷史(包括剛看完的《全面啟動》),同樣透過那個嵌入模型,生成一個代表你當前觀影品味的「查詢向量」。
  • 執行相似性搜索:這個查詢向量被發送到向量資料庫。資料庫利用建好的索引,在數百萬部電影的向量中,光速找出與你品味最接近的幾個向量。

4. 輸出與後處理 (Output & Post-processing)

  • 返回結果:資料庫返回最相似的向量,例如《星際效應》(Interstellar) 和《TENET 天能》的向量,因為它們在語意空間中的位置與《全面啟動》非常接近(同導演、同類型)。
  • 應用後處理:應用程式拿到這些結果後,可以進一步利用元資料進行過濾。例如,你可以設定「只推薦 2010 年以後的電影」,系統就會在返回的結果中,篩選掉不符合條件的電影,最終將最完美的推薦清單呈現給你。

透過這個簡單的流程,向量資料庫就完成了一次從理解非結構化資料(電影資訊)到執行複雜語意查詢(推薦品味相似的電影)的魔法。現在,我們已經掌握了它的運作全貌,接下來將深入其內部,揭開讓這一切變得高效的演算法秘密。

相似性如何衡量?

https://ithelp.ithome.com.tw/upload/images/20251012/20149562yyGOdGvaPt.png
https://www.altexsoft.com/blog/vector-database/

「距離最近」這個概念,是透過相似性度量 (Similarity Measures) 來實現的。 這是決定向量間關係的數學基礎,常見的度量方式有:

  • 餘弦相似度 (Cosine Similarity):計算兩個向量之間的夾角。夾角越小,相似度越高。它只關心方向而不關心大小,非常適合用於比較文本內容的語意。
    https://ithelp.ithome.com.tw/upload/images/20251012/20149562oi0YCRcpUy.png

  • 歐氏距離 (Euclidean Distance):計算兩個向量在多維空間中的直線距離。距離越近,表示越相似。

  • 點積 (Dot Product):同時考慮了向量的角度和大小(模長),在某些推薦系統場景中非常有效。

深入向量資料庫高效 ANN 演算法

https://ithelp.ithome.com.tw/upload/images/20251012/20149562fJ7ORPIyTE.png
https://www.altexsoft.com/blog/vector-database/

當資料庫中有數百萬甚至數十億個向量時,逐一比較查詢向量與庫中每個向量的距離(即暴力搜尋)是極其耗時且不切實際的。為了解決這個問題,向量資料庫採用了近似最近鄰 (Approximate Nearest Neighbor, ANN) 演算法來建立索引。

ANN 的核心思想是:犧牲一點點的準確性,來換取巨大的查詢速度提升。 它不會保證 100% 找到最接近的那個點,但能以極高的機率找到非常接近的點,而這在大多數應用中已經足夠。

索引 (Indexing) 則是將這些 ANN 演算法應用於資料,建立起高效搜尋結構的過程。讓我們來看看幾種主流的索引方法:

  • HNSW (Hierarchical Navigable Small World)

    HNSW 使用多層圖結構來組織向量。可以把它想像成一個多層級的高速公路網:頂層的「公路」連接稀疏但距離很遠的節點,讓你可以快速穿越整個向量空間;底層的「市區道路」則密集地連接鄰近的節點,用於精準定位。

    搜尋時,從頂層的「入口點 (entry point)」開始,沿著最高速的公路快速跳轉到目標大致區域,然後逐層向下,最終在最精細的底層網路中找到與查詢向量最接近的鄰居。這種分層導航的機制,讓 HNSW 在速度和準確性上取得了絕佳的平衡,是目前最受歡迎的演算法之一。

  • LSH (Locality-Sensitive Hashing)

    LSH 是一種基於雜湊 (Hashing) 的技術。它的核心理念是,設計一組特殊的雜湊函式,讓原本在向量空間中相近的點,有更高的機率被對應到同一個「雜湊桶 (hash bucket)」中。

    當查詢時,我們只需要計算查詢向量的雜湊值,然後只在對應的桶裡進行比較,而不用搜索整個資料集,從而大幅縮小了搜尋範圍。

  • IVF (Inverted File Indexes)

    IVF 的原理類似於教科書的目錄。它首先透過聚類演算法(如 K-Means)將所有向量分成多個「簇 (cluster)」或「單元 (cell)」。查詢時,系統會先判斷查詢向量屬於哪個簇,然後只在該簇(以及可能相鄰的幾個簇)內部進行搜尋。

    這種方法避免了對整個資料集的無差別掃描,顯著提高了查詢效率,尤其是在資料量巨大的情況下。

  • PQ (Product Quantization)

    PQ 演算法的核心目標是壓縮,以節省記憶體並加快計算速度。它會將一個高維度的長向量,切分成多個低維度的短向量區段,然後對每個區段進行量化,將其轉換為一個更短的程式碼表示。

    經過 PQ 壓縮後,整個資料庫佔用的記憶體會大幅減少。在進行距離計算時,也是基於這些壓縮後的短程式碼,速度遠快於對原始向量的計算。PQ 常常與 IVF 等其他索引方法結合使用,以在記憶體、速度和準確性之間取得最佳平衡。

向量資料庫的選擇與比較

https://ithelp.ithome.com.tw/upload/images/20251012/20149562Y29H37CoU5.png
https://www.graft.com/blog/top-vector-databases-for-ai-projects

向量資料庫市場正在蓬勃發展,從開源專案到全託管的雲端服務,選擇眾多。一些主流的向量資料庫包括 Milvus、Pinecone、Qdrant、Weaviate、Chroma 等。

https://ithelp.ithome.com.tw/upload/images/20251012/20149562nUrPwqfkx5.png
https://www.altexsoft.com/blog/vector-database/

了解了如何進行評估之後,讓我們來認識幾位市場上最受矚目、各具特色的供應商:

Milvus:開源界的巨擘

Milvus 是一個畢業於 CNCF (雲原生運算基金會) 的開源專案,專為大規模、生產級的 AI 應用而設計。它的架構採用了儲存與運算分離的雲原生設計,使其具備極高的擴展性,能夠處理十億級別的向量資料。 Milvus 提供了豐富的索引類型 (如 HNSW, IVF) 和靈活的 API,非常適合需要對底層架構進行深度客製化的大型企業。其商業版本由 Zilliz 公司提供支援。

Pinecone:全託管服務的先行者

Pinecone 是最早提供全託管向量資料庫服務 (SaaS) 的公司之一,其核心價值在於「簡單易用」。開發者無需關心底層的伺服器、擴展或維運,只需透過簡單的 API 即可快速搭建高效能的向量搜尋應用。 Pinecone 專注於提供極低的查詢延遲和高可用性,是那些希望快速將產品推向市場、不想被基礎設施束縛的團隊的理想選擇。

Qdrant:以 Rust 打造的效能利器

Qdrant 是一個使用 Rust 語言編寫的開源向量資料庫,這賦予了它記憶體安全和極高執行效率的先天優勢。Qdrant 的一大亮點是其強大且靈活的元資料過濾能力。它允許使用者在進行向量相似性搜索的同時,附加複雜的過濾條件,且能保證高效能,這在真實世界的複雜應用場景中至關重要。 Qdrant 同時提供開源版本和全託管的雲端服務。

Weaviate:內建語意搜尋引擎

Weaviate 是一個開源的向量資料庫,其獨特之處在於其「模組化」的設計。它內建了與 OpenAI, Cohere, Hugging Face 等模型提供商的整合模組,可以在資料寫入時自動進行向量化 (vectorization),開發者無需自己管理嵌入流程。 Weaviate 另一個顯著特點是支援 GraphQL API,讓開發者能以非常直觀的方式進行語意搜尋和資料關聯查詢。

Chroma:為開發者而生的輕量級選擇

Chroma (或稱 Chroma DB) 是一個開源的、以開發者為中心的向量資料庫,常被譽為「向量界的 SQLite」。它的設計理念是極簡和易於上手,可以輕鬆地在你的應用程式中直接運行,非常適合本地開發、原型驗證和中小型專案。 Chroma 專注於簡化工作流程,讓開發者能以最少的程式碼快速實現向量搜尋功能,是許多人入門向量資料庫的首選。

如何客觀比較向量資料庫?

向量資料庫市場正在蓬勃發展,從開源專案 Milvus、Qdrant,到雲端服務 Pinecone、Zilliz Cloud,選擇眾多。但如何客觀比較它們的效能,遠比想像中複雜。

Benchmark 的陷阱:為何單一指標會誤導?

過去,許多效能報告都存在一個致命缺陷:過度簡化。單純比較在小型、乾淨資料集(如 SIFT)上的 QPS(每秒查詢數)或平均延遲,往往會產生嚴重誤導。這就像只在專業賽道上測試一輛車的極速,卻忽略了它在城市壅塞路況、惡劣天氣下的真實表現。

業界專家指出,這種簡化測試忽略了三個關鍵的生產環境挑戰:

  1. 規模效應:一個在百萬級向量資料上表現優異的資料庫,在擴展到十億級規模時,效能可能會急遽下降。
  2. 複雜查詢:真實世界的查詢很少是單純的相似性搜索。更常見的是帶有元資料過濾的複雜查詢,例如「尋找與這張圖片相似,但價格低於 100 美元且庫存充足的商品」。這種過濾操作,特別是當過濾條件篩選掉 99% 以上資料時,是個隱藏的效能殺手。
  3. 動態資料:生產系統的資料是持續流入的。在處理大量查詢的同時,還要不斷寫入新資料,這種讀寫並行的壓力,對資料庫的穩定性是巨大的考驗。

VDBBench:為真實世界負載而生的測試平台

https://ithelp.ithome.com.tw/upload/images/20251012/20149562V9M5qgIsvk.png
https://zilliz.com/vdbbench-leaderboard

為了解決這個問題,Zilliz 推出了開源的效能測試平台 VDBBench,旨在模擬真實世界的生產環境負載。它不再只看單一的「虛榮指標」,而是從多個層面進行綜合評估,以預測資料庫在實際部署時的行為。

VDBBench 的評估重點包括:

  • 不同規模與維度的資料集:使用來自 OpenAI、Cohere 等現代模型生成的高維度向量,並涵蓋從百萬到數億的不同規模。
  • 帶有元資料過濾的查詢:系統性地測試在不同過濾選擇性下的效能表現,揭露潛在的效能瓶頸。
  • 串流讀寫場景:模擬在持續寫入資料的同時進行查詢,考驗系統在高併發下的穩定性。
  • 成本效益:在固定的硬體成本或雲端預算(例如每月 1,000 美元)下,比較各個資料庫能達到的效能極限。

因此,當我們看到 VDBBench 的效能排行榜時,需要理解其背後的嚴謹設定。下圖顯示的是在「每月 1,000 美元成本」和「10M (一千萬) 資料集」的條件下,各個向量資料庫的 P99 延遲與 QPS 表現。

這種帶有明確限制條件的綜合性比較,才對開發者在技術選型時具有真正的參考價值,幫助我們避免「測試環境的亡者,生產環境的小貓咪」的窘境。

超越搜尋:向量資料庫的即時性與 AI Agent 整合

向量資料庫的價值遠不止於 RAG。在更先進的 AI Agent 中,它扮演了「長期記憶」和「即時上下文」的關鍵角色。如下圖 LangChain 的 Agent 範例所示,Agent 在處理任務(如回覆郵件)時,可以將新的互動和人類回饋即時轉化為向量存入記憶體(向量資料庫)。

https://ithelp.ithome.com.tw/upload/images/20251012/20149562w0D9NcA6ix.png
https://blog.langchain.com/context-engineering-for-agents/

讓我們透過 LangChain 提出的這個架構,來看一個智慧電郵助理是如何「進化」的:

  1. 初次任務 (V1.0)
    • 情境:Agent 收到一封需要回覆的郵件。
    • 行動:它查詢記憶體(向量資料庫),但找不到關於你的任何偏好。於是,它只能生成一封非常標準、客氣的商業郵件草稿。
    • 人類介入:你看了草稿,覺得太過正式,於是手動修改,讓語氣更輕鬆,並在結尾加上了你常用的表情符號 "👍"。你點擊「批准並傳送」。
  2. 記憶更新 (Learning)
    • 捕捉回饋:系統捕捉到了這次「人類回饋」。它知道,你批准的最終版本,才是你想要的風格。
    • 生成記憶:Agent 會將這次成功的互動轉化為一條「經驗」。例如,它會生成一條文字記錄:「對於這類內部團隊郵件,使用者偏好輕鬆的語氣,並使用 '👍' 作為結尾。」
    • 存入向量資料庫:這條「經驗」被嵌入模型轉換為向量,並存入 Agent 的長期記憶中。
  3. 再次任務 (V2.0)
    • 情境:幾天後,Agent 又收到一封類似的團隊郵件。
    • 查詢記憶:在撰寫草稿前,它先向自己的記憶體提問:「關於回覆內部團隊郵件,使用者有什麼偏好嗎?」這個查詢被轉化為向量。
    • 檢索經驗:向量資料庫迅速找到了上次那條最相關的「經驗」向量。
    • 生成個人化草稿:Agent 將檢索到的經驗(「偏好輕鬆語氣」、「使用 👍」)作為關鍵上下文,直接生成了一封完全符合你風格的郵件草告。

這就是質變的發生點。透過「查詢-行動-回饋-記憶更新」這個不斷循環的閉環,AI Agent 能夠持續學習、適應,並進化。向量資料庫在這裡不再僅僅是一個被動的資料檢索工具,而是成為了 Agent 儲存經驗、塑造個性、實現個人化的主動學習系統。

結論

從最初駁斥「RAG 已死」的論調,到深入探索向量、嵌入、ANN 演算法的內部奧秘,再到評鑑百家爭鳴的資料庫生態,我們已經完整地描繪出向量資料庫作為現代 AI 基石的核心地位。它不僅僅是一種新的儲存技術,更是一種理解和操作非結構化資料的全新思維典範。

我們看到,向量資料庫讓 AI 得以克服傳統資料庫的限制,處理複雜的語意關係;它透過 RAG 為 LLM 提供了對抗幻覺、連接即時與專有知識的橋樑;更令人興奮的是,它正在成為 AI Agent 的「長期記憶」,為打造能夠從經驗中學習、持續進化的個人化 AI 鋪平了道路。

然而,擁有一個強大的記憶引擎,並不等於自動建成一個健全、可靠的智慧體。這條路,我們才剛剛起步。當我們從理論走向實踐,會立刻撞上一堵名為「上下文工程 (Context Engineering)」的高牆。

未來的競爭,將不僅僅是模型大小或資料庫速度的競爭,更是「上下文工程」能力的競爭。誰能更精準地為 LLM 在正確的時間、提供正確的上下文,誰就能打造出更智慧、更可靠、也更值得信賴的 AI。


References:


上一篇
【Day 27】從 RAG 到 Agentic RAG:解放知識庫的真正潛力
系列文
初探 LLM 可觀測性:打造可持續擴展的 AI 系統28
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言