Facebook AI Similarity Search · faiss-cpu · RAG 檢索 · 聯絡 psyche@mail.grokbot.com
開始學習吧!勾選完成的課節。
0% 完成(0/10 課節)
提示:滾動到課節會自動標記完成;點擊課節仍可標記/取消(存於本機)。
一句話:喺向量堆入面快搵最近鄰——RAG 檢索核心之一。
pip install faiss-cpu numpy。python -c "import faiss; print(faiss.__version__)"" data-i18n-html="1">import faiss 印版本。| 類型 | 特點 | 何時用 |
|---|---|---|
| IndexFlatL2 | 精確 L2;簡單 | 細中量、教學 |
| IndexIVFFlat 等 | 分區近似搜尋 | 大集合 |
float32、(n, d):
import numpy as np
import faiss
d = 128 # 向量維度(要同 embedding 模型一致)
nb = 1000 # 資料庫向量數
nq = 5 # 查詢數
k = 4 # 每個 query 取幾個鄰居
xb = np.random.random((nb, d)).astype('float32')
xq = np.random.random((nq, d)).astype('float32')
index = faiss.IndexFlatL2(d)
print('is_trained', index.is_trained) # Flat 通常已 ready
index.add(xb)
print('ntotal', index.ntotal)
D, I = index.search(xq, k) # D=距離, I=索引位置
print(I[:2])
print(D[:2])
| FAISS | Chroma | pgvector | Qdrant/Weaviate | |
|---|---|---|---|---|
| 定位 | ANN 函式庫 | 原型友好 | Postgres 擴 | 生產向 |
| 過濾/運維 | 自建 | 基本 | SQL | 強 |
| 何時揀 | 效能自控 | 試作 | 已有 PG | 服務化 |
詳見向量庫高階課。
跑第 4 節;調 k。
# chunks: list[str] texts: 同序 metadata
# emb = embed_fn(chunks) -> np.ndarray (n, d) float32
index = faiss.IndexFlatL2(d)
index.add(emb)
faiss.write_index(index, "kb.faiss")
q = embed_fn([question]) # (1, d)
D, I = index.search(q, k=5)
ctx = [chunks[i] for i in I[0]]
# prompt = f"根據以下內容回答:\n" + "\n---\n".join(ctx)
embed 接 Ollama/雲端。
nlist = 100 # 分區數(視資料量調整)
quantizer = faiss.IndexFlatL2(d)
index = faiss.IndexIVFFlat(quantizer, d, nlist)
assert not index.is_trained
index.train(xb) # 需要足夠訓練向量
index.add(xb)
index.nprobe = 10 # 搜尋時探訪分區數
D, I = index.search(xq, k)
資料少用 Flat;IVF 要夠 train。
係函式庫;完整 DB 另見向量庫課。
先 CPU;GPU 要對齊 CUDA。
細→Flat;大→IVF。
embed→索引→top-k→LLM。
預估向量數 n:________ 維度 d:________ 更新頻率:________ 要精確可重現? □ 是 → 傾向 IndexFlatL2 可接受近似? □ 是 → IVF/其他;nlist:________ nprobe:________ 裝置:CPU / GPU 套件:faiss-cpu / faiss-gpu 度量:L2 / IP(內積;常配正規化向量)________ 持久化路徑:________ 備份策略:________ 何時改用 Chroma/pgvector/Qdrant:________
文件來源:________ 切塊大小/重疊:________ / ________ embedding 模型:________ 維度 d:________ 批次大小:________ 失敗重試:________ 正規化向量?□(用 IP 時常見) metadata 欄位:id / source / title / acl / … 索引檔同 metadata 對齊檢查:□ 重新索引觸發:文件變更/每週/手動
產品一句話:________ 使用者問題示例 3 條: 1) ________ 2) ________ 3) ________ k(top-k):________ 上下文字數上限:________ LLM:本機 Ollama / 雲端:________ 拒絕回答條件(無相關 chunk/ACL):________ 人工抽樣評估:每週抽 ____ 條 通過標準:________ 上線閘門:無秘密入索引 □ 日誌可追溯 □
□ 索引同 metadata 一齊備份 □ 版本號:embedding 模型+索引檔名 □ 權限:檢索後按使用者過濾 □ 監控:延遲 p95、空結果率、人工差評 □ 升級路徑:FAISS 檔 → Qdrant/pgvector 條件:________ (只做防衛與可靠度;唔包含攻擊步驟)
登入會員後可將整門課標記完成並同步至儀表板。