跳轉至

建立 2026-09-15 更新 2026-09-15

FAISS

FAISS(Facebook AI Similarity Search)是 Meta 的函式庫,不是帶帳號、replication、metadata 查詢的資料庫。它把大量向量編成可搜的索引,Python/C++ 都能呼叫。Chroma、Milvus、pgvector 裡的 HNSW/IVF,觀念幾乎都從這裡來。

所以學 FAISS 有兩個目的:本機做實驗,以及看懂其他產品文件裡的索引名稱。影片見 FAISS 影音

什麼時候選它

  • 研究索引參數、量化(PQ)、GPU 加速。
  • 資料可以整包載入記憶體(或自己處理落盤),不需要 SQL/filter/多租戶。
  • 要在程式裡嵌入搜尋,而不是開一個資料庫行程。

需要過濾、CRUD、備份與權限時,改用真正的向量資料庫。Pinecone 的學習文章也明確把 FAISS 歸在「standalone vector index」。

核心物件

建索引時就要決定維度 d 與度量。IndexFlatL2 是精確搜尋,當答案的基準。

import numpy as np
import faiss

d = 384
xb = np.random.random((1000, d)).astype("float32")
xq = np.random.random((5, d)).astype("float32")

index = faiss.IndexFlatL2(d)
index.add(xb)

distances, ids = index.search(xq, k=3)
print(ids, distances)

常用組合(名稱在其他資料庫也會遇到):

索引 意義
Flat 精確、最慢。用來驗召回。
IVF 先分群集,只搜幾個桶。要 trainadd
HNSW 圖索引,查詢快。
PQ/OPQ 壓縮向量、省記憶體,召回會掉一點。

IVF 沒有 trainadd 會失敗或品質很差——這是 FAISS 新手最常見的錯誤。HNSW 通常不需要這步。

跟向量資料庫怎麼分工

許多系統底層或周邊會用 FAISS(或同一類演算法),再自己補 metadata、WAL、replication。你若只在 FAISS 裡搜,就要自己存 id → 原文 的對照表;這也是為什麼 RAG 教學後續會換成 Chroma/Pinecone。

官方學習資源

上游

FAISS GitHub官方 wiki 是 API 與索引公式的來源。Meta 沒有獨立的 FAISS 證照課。

優質 YouTube

James Briggs 的 FAISS 系列(對應他在 Pinecone Learn 寫的 similarity search 文章)是目前最清楚的逐步教學。內嵌見 FAISS 影音