Vector Databases
是什麼
向量資料庫會把每段文本、影像或其他資料轉換成一長串能捕捉其含義的數字。這種數字串稱為高維向量(embedding)。當你搜索時,它會找出含義最接近的條目。可以想像一點陣圖書管理員,即使用詞完全不同,也會遞給你同一主題的書。它不是匹配精確關鍵詞,而是按含義有多接近(語義接近程度)對結果排序,並用餘弦相似度等距離度量來衡量。它們為 AI 應用驅動語義搜尋、推薦和檢索增強生成(retrieval-augmented generation,RAG)。
優勢
- 通過 ANN(近似最近鄰)索引,在數百萬個 embedding 上進行快速相似度搜索。
- 實現理解含義而非僅匹配關鍵詞的語義搜尋和 RAG。
- 選擇眾多:pgvector、Pinecone、Qdrant、Weaviate、Milvus、Chroma。
- 後設資料過濾把語義搜尋與結構化約束結合起來。
- 藉助近似最近鄰演算法,可擴充套件到大型語料庫。
權衡取捨
- 結果是近似的;調優需要在召回率和速度之間權衡。
- embedding 質量完全取決於生成這些向量的模型。
- 如果更換模型,就需要對整個語料庫重新做 embedding。
- 儲存和記憶體隨維度數量和資料集規模而增長。
何時使用
將向量資料庫用於語義搜尋、文件問答、推薦、去重,以及把相關上下文餵給 LLM(大語言模型)的 RAG 流水線。對於適中的規模,pgvector 擴充套件讓你把向量與關係型資料一起儲存在 PostgreSQL 中。
與 vibe coding 的契合度
指揮 AI 時,要明確三件事:你使用哪個 embedding 模型(好讓向量維度與索引匹配)、距離度量(文本通常用餘弦),以及你在 embedding 之前如何對源文件分塊。要求 AI 在每個向量旁儲存有用的後設資料,以便你做過濾(例如按 user_id 或 doc_type),並讓 embedding 程式碼和查詢程式碼使用同一個模型。一個好建議:讓 AI 構建一個 RAG 檢索步驟,返回 top-k 個分塊及其來源 id。這樣答案才可追溯,你也能驗證模型實際使用了哪些上下文。
-- 帶 pgvector 擴充套件的 PostgreSQL
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE documents (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
content TEXT NOT NULL,
doc_type TEXT,
embedding VECTOR(1536) -- 必須與你的 embedding 模型匹配
);
-- 用於餘弦距離的近似最近鄰索引
CREATE INDEX ON documents
USING hnsw (embedding vector_cosine_ops);
-- 與查詢 embedding($1)最相似的前 5 個分塊
SELECT id, content
FROM documents
WHERE doc_type = 'manual'
ORDER BY embedding <=> $1
LIMIT 5;