快轉到主要內容
  1. AI/

Vector Database 是什麼|Pinecone、Chroma、pgvector 怎麼選

Idle Engineer
作者
Idle Engineer
AI Runs. I Nap. | 404 Career Not Found
目錄

TL;DR | 面試情境模擬
#

👴 面試官:什麼是向量資料庫?和一般資料庫有什麼差別?

🧑‍💻 :一般資料庫用 SQL 做精確查詢(WHERE name = ‘Alice’),向量資料庫做相似度查詢(找到和這個向量最近的 K 個向量)。應用在 RAG 系統裡:文件先轉成 Embedding 向量存進去,查詢時把問題也轉成向量,找最相似的文件片段給 LLM 參考。Pinecone 是 Managed 服務最容易上手,pgvector 是 Postgres 的擴充套件,不用多一個服務,Chroma 適合本地開發。


比喻:圖書館的兩種找書方式
#

  • 一般資料庫:去找書名叫「貓」的書(精確匹配)
  • 向量資料庫:去找「主題和貓差不多的書」——可能找到「寵物飼養指南」「虎貓的生態」「家庭動物行為學」(語意相似)

向量資料庫的核心操作
#

寫入(Upsert)
#

# 把文件轉成向量後存入
import openai

text = "PostgreSQL 是功能最完整的開源關聯式資料庫"
embedding = openai.embeddings.create(
    model="text-embedding-3-small",
    input=text
).data[0].embedding  # [0.23, -0.71, 0.15, ...]

# 存入向量資料庫
collection.add(
    documents=[text],
    embeddings=[embedding],
    ids=["doc_1"]
)

查詢(Query)
#

# 把問題也轉成向量,找最相近的文件
query = "哪個資料庫功能最多?"
query_embedding = get_embedding(query)

results = collection.query(
    query_embeddings=[query_embedding],
    n_results=3  # 取最相近的 3 筆
)

常見向量資料庫比較
#

資料庫 類型 特點 適合場景
Pinecone Managed Cloud 全託管,零維運,有免費額度 生產環境,不想管基礎設施
pgvector Postgres 擴充 已有 Postgres 可直接用 不想多一個服務,資料量中等
Chroma 本地 / Server 開源,最容易本地跑 開發測試,原型
Weaviate Open Source 功能豐富,支援多種搜尋模式 複雜查詢需求
Qdrant Open Source 高效能,支援過濾查詢 需要精準過濾 + 語意搜尋
Supabase Managed pgvector + Postgres 打包 SaaS 開發,一站式

怎麼選?
#

已有 Postgres?
├─ 是 → pgvector(零額外成本)
└─ 否
   ├─ 只是開發測試 → Chroma(本地)
   ├─ 想要全託管 → Pinecone 或 Supabase
   └─ 需要複雜過濾 + 高效能 → Qdrant

ANN 演算法:為什麼搜尋那麼快?
#

向量資料庫不是逐一比對所有向量(Exact NN,向量多了會很慢),而是用 ANN(Approximate Nearest Neighbor) 演算法:

  • HNSW(Hierarchical Navigable Small World):建立多層圖結構,搜尋時跳躍式縮小範圍。大多數向量資料庫的預設演算法
  • IVF(Inverted File Index):把向量分成多個 cluster,搜尋時只看相關的 cluster

代價是「近似」,不保證找到絕對最近的向量,但誤差極小,搜尋速度可以提升幾個數量級。


💡 延伸問題
#

Q1:向量資料庫和 Elasticsearch 的差別?
#

ES 是關鍵字搜尋(BM25 演算法),擅長精確詞語匹配。向量資料庫是語意搜尋,擅長意思相近的查找。現代搜尋系統通常混合使用(Hybrid Search):關鍵字匹配找精確結果,向量搜尋找語意相關結果,再 re-rank 合併。

Q2:Chunking 怎麼影響搜尋品質?
#

片段太長:向量被多個主題稀釋,相似度計算不準確。
片段太短:上下文不足,LLM 拿到的資訊不完整。
常用策略:512 tokens + 10% 重疊(overlap),確保跨片段的語意不中斷。

Q3:向量資料庫有 ACID 保證嗎?
#

大多數沒有完整的 ACID。pgvector 繼承 Postgres 的 ACID。Pinecone、Chroma 等的一致性保證較弱,適合搜尋場景(不需要強一致性)但不適合做主資料庫。