為什麼 RAG 需要向量資料庫

Retrieval-Augmented Generation(RAG)的核心概念是:在 AI 回答問題之前,先從你的資料庫裡找到相關的資訊,然後把這些資訊和問題一起送給 AI 模型。這樣 AI 的回答就有了可靠的根據,而不是憑空生成。

「找到相關的資訊」這一步就是向量資料庫的工作。傳統資料庫用關鍵字搜尋,向量資料庫用語意搜尋。當你問「怎麼設定雙因素認證」,向量資料庫能找到標題為「啟用 2FA 安全驗證」的文件,因為它理解這兩個描述在語意上是相同的。

運作方式:文字先通過 Embedding 模型轉換成一組數字(向量),這組數字代表文字的語意。向量資料庫儲存這些向量,搜尋時計算向量之間的距離,距離越近代表語意越相似。

三個主流選項比較

Pinecone

類型:全託管雲端服務。你不需要管理任何基礎設施。

優勢:設定簡單,5 分鐘內可以開始使用。自動處理擴展和高可用。提供 Serverless 方案,按查詢量計費。文件和 SDK 品質好。

限制:資料存在 Pinecone 的雲端(AWS/GCP),你無法控制資料的實體位置。免費方案限制 1 個 index、維度上限 1536。沒有自架選項。

價格:免費版提供 100K 向量、Starter $25/月起。以 10 萬筆 1536 維向量為例,月費大約 $25-70。

適合:快速開發、POC 驗證、不想管基礎設施的團隊。

Weaviate

類型:開源,可自架或使用 Weaviate Cloud。

優勢:可以自架在自己的伺服器上,資料完全由你控制。內建 Embedding 模型整合(text2vec-openai、text2vec-transformers 等)。支援混合搜尋(向量 + 關鍵字)。GraphQL API 設計清楚。

限制:自架需要管理基礎設施(Docker、Kubernetes)。記憶體用量較高(每 100 萬筆向量大約需要 4-8 GB RAM,視維度而定)。學習曲線比 Pinecone 高。

價格:開源版免費,Weaviate Cloud 按用量計費(Serverless 方案 $25/月起)。

適合:對資料落地有要求的企業、需要混合搜尋的場景。

Chroma

類型:開源,輕量級,設計給開發階段使用。

優勢:安裝一行指令(pip install chromadb)。可以在本機跑,不需要外部服務。記憶體模式(ephemeral)和持久化模式(persistent)都支援。和 LangChain、LlamaIndex 整合好。

限制:不適合大規模生產環境(百萬筆以上的向量)。沒有內建的認證和授權機制。叢集模式仍在早期階段。

價格:開源免費。

適合:開發和測試階段、小型專案、本機 RAG 應用。

Embedding 模型選擇

向量資料庫存的是向量,向量是由 Embedding 模型產生的。選擇模型時要考慮:

維度和品質。OpenAI text-embedding-3-small(1536 維)是目前性價比最高的選擇,中英文表現都不錯。text-embedding-3-large(3072 維)品質更好但向量更大,儲存成本翻倍。

本地模型選項。如果不想把文字送到外部 API,可以使用 sentence-transformers 的開源模型在本機跑。中文推薦 BAAI/bge-large-zh-v1.5 或 multilingual-e5-large。需要 GPU 才跑得快。

成本估算。OpenAI embedding API 的定價是 $0.02 / 1M tokens(text-embedding-3-small)。以 10 萬份平均 500 字的文件為例,首次建立索引大約 $1,之後查詢成本很低。

重要:一旦選定 Embedding 模型,所有文件和查詢都要用同一個模型。不同模型產生的向量無法互相比較。如果之後要換模型,整個索引需要重建。

安全考量

資料存放位置

向量資料庫裡存的不只是向量數字,通常還包含原始文件的 metadata(標題、摘要、甚至完整內容)。這些 metadata 可能包含敏感資訊。

使用 Pinecone 等雲端服務時,確認資料存放區域(region)符合你的合規要求。台灣目前沒有 Pinecone 的本地機房,最近的通常在 AWS Tokyo(ap-northeast-1)。

如果處理的文件涉及個資或機密資訊,自架 Weaviate 或 Chroma 可以確保資料不離開你的環境。

存取控制

Pinecone 使用 API Key 做認證,每個 Key 可以設定只讀或讀寫權限。建議不同的應用使用不同的 API Key。

Weaviate 自架版本預設沒有認證。在生產環境一定要開啟 OIDC 認證或 API Key 認證。網路層面使用防火牆限制只有你的應用伺服器可以存取。

Chroma 在本機模式下沒有認證機制。如果用 Client/Server 模式部署,需要自行在前面加上認證層(例如 Nginx + Basic Auth 或 API Gateway)。

Embedding 過程的隱私

如果使用 OpenAI 的 Embedding API,你的文件內容會被傳送到 OpenAI 的伺服器。根據 OpenAI 的 API 政策,API 的資料不會被用於訓練,但文字仍然會在傳輸和處理過程中被 OpenAI 的系統讀取。

對於高敏感資料,可以選擇:本地 Embedding 模型(不需要外部 API)、Azure OpenAI(企業級的資料處理保證)、AWS Bedrock Embeddings(資料在你的 AWS 帳號內處理)。

向量反推原文

理論上,向量不能直接反推回原始文字。但如果攻擊者有大量的向量和對應的原文樣本,可以訓練模型做近似反推。這被稱為 Embedding Inversion Attack。

防護方式:限制向量 API 的存取權限、不公開暴露向量搜尋介面、metadata 中不要存放超出必要的原文內容。

部署建議

開發階段。用 Chroma 在本機跑,搭配 OpenAI 或本地 Embedding 模型。不需要額外的基礎設施。

POC / 小規模生產。Pinecone 的免費或 Starter 方案,10 萬筆以下的向量成本很低。或者用 Docker Compose 跑一個 Weaviate 實例。

企業生產環境。自架 Weaviate 在 Kubernetes 上,搭配監控和備份。或者使用 Weaviate Cloud 的企業方案,有 SLA 和專人支援。

安全與限制

向量資料庫本身不解決 RAG 的所有安全問題。即使搜尋到正確的文件,AI 模型仍然可能產生幻覺(根據文件內容推理出不正確的結論)。搜尋結果的品質高度依賴 Embedding 模型的品質和文件切割(chunking)的策略。

向量資料庫的效能和成本隨著資料量線性成長。百萬筆以上的向量需要認真規劃記憶體和計算資源。

目前的向量搜尋是「語意相似度」搜尋,而不是「事實正確性」搜尋。搜到語意相似的文件不代表文件的內容是最新或最正確的。

知識檢測

讀完文章後,測試一下你對這個主題的理解。

常見問題

向量資料庫可以取代傳統資料庫嗎?

不行。向量資料庫擅長語意搜尋(「找意思相近的文件」),但不擅長精確查詢(「找 ID 為 12345 的訂單」)、篩選條件(「找金額大於 1000 的交易」)、事務處理(ACID)。大多數 RAG 系統會同時使用向量資料庫和傳統資料庫。

我的資料有多少才值得用向量資料庫?

如果你的文件數量在 100 份以下,直接把所有文件放進 AI 的上下文視窗可能就夠了,不一定需要向量資料庫。100 份以上的文件、或者需要頻繁更新資料時,向量資料庫的價值就會明顯體現。

文件要怎麼切割(chunking)?

常見的策略是每 500-1000 字切成一個 chunk,chunk 之間保留 50-100 字的重疊,確保跨段落的語意不會斷裂。如果文件有明確的結構(例如 h2 標題),按照結構切割通常效果更好。

多語言的資料可以放在同一個向量資料庫嗎?

可以,但要確保 Embedding 模型支援多語言。OpenAI 的 text-embedding-3 系列支援中英日韓等語言。用同一個多語言模型做 Embedding,不同語言的相似內容會被映射到接近的向量位置。

免費方案夠用嗎?

如果是 POC 或小型應用,Pinecone 的免費版(100K 向量)或自架 Chroma 通常夠用。Weaviate 開源版不限向量數量,但需要自己管理伺服器。估算你的資料量:1000 份文件大約產生 3,000-10,000 個向量(取決於切割策略)。

相關文章

  • RAG 安全指南:檢索增強生成的 5 個攻擊向量
  • AI Gateway 是什麼?企業 AI 流量管控的第一道防線
  • 開源 AI 模型自架指南:Ollama、LM Studio 安全部署
  • AI 應用效能優化:回應速度、Token 成本、快取策略

參考資料

  • Pinecone 官方文件
  • Weaviate 官方文件
  • Chroma 官方文件
  • OpenAI Embeddings API 文件