~/VibeHandbook
免費 PDF

資料庫

github.com

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_iddoc_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;