faiss

作者: firecrawl

Facebook 的高效相似度搜尋與稠密向量聚類函式庫。支援數十億向量、GPU 加速及多種索引類型…

npx skills add https://github.com/firecrawl/ai-research-skills --skill faiss

FAISS - Efficient Similarity Search

Facebook AI's library for billion-scale vector similarity search.

When to use FAISS

Use FAISS when:

  • Need fast similarity search on large vector datasets (millions/billions)
  • GPU acceleration required
  • Pure vector similarity (no metadata filtering needed)
  • High throughput, low latency critical
  • Offline/batch processing of embeddings

Metrics:

  • 31,700+ GitHub stars
  • Meta/Facebook AI Research
  • Handles billions of vectors
  • C++ with Python bindings

Use alternatives instead:

  • Chroma/Pinecone: Need metadata filtering
  • Weaviate: Need full database features
  • Annoy: Simpler, fewer features

Quick start

Installation

# CPU only
pip install faiss-cpu

# GPU support
pip install faiss-gpu

Basic usage

import faiss
import numpy as np

# Create sample data (1000 vectors, 128 dimensions)
d = 128
nb = 1000
vectors = np.random.random((nb, d)).astype('float32')

# Create index
index = faiss.IndexFlatL2(d)  # L2 distance
index.add(vectors)             # Add vectors

# Search
k = 5  # Find 5 nearest neighbors
query = np.random.random((1, d)).astype('float32')
distances, indices = index.search(query, k)

print(f"Nearest neighbors: {indices}")
print(f"Distances: {distances}")

Index types

1. Flat (exact search)

# L2 (Euclidean) distance
index = faiss.IndexFlatL2(d)

# Inner product (cosine similarity if normalized)
index = faiss.IndexFlatIP(d)

# Slowest, most accurate

2. IVF (inverted file) - Fast approximate

# Create quantizer
quantizer = faiss.IndexFlatL2(d)

# IVF index with 100 clusters
nlist = 100
index = faiss.IndexIVFFlat(quantizer, d, nlist)

# Train on data
index.train(vectors)

# Add vectors
index.add(vectors)

# Search (nprobe = clusters to search)
index.nprobe = 10
distances, indices = index.search(query, k)

3. HNSW (Hierarchical NSW) - Best quality/speed

# HNSW index
M = 32  # Number of connections per layer
index = faiss.IndexHNSWFlat(d, M)

# No training needed
index.add(vectors)

# Search
distances, indices = index.search(query, k)

4. Product Quantization - Memory efficient

# PQ reduces memory by 16-32×
m = 8   # Number of subquantizers
nbits = 8
index = faiss.IndexPQ(d, m, nbits)

# Train and add
index.train(vectors)
index.add(vectors)

Save and load

# Save index
faiss.write_index(index, "large.index")

# Load index
index = faiss.read_index("large.index")

# Continue using
distances, indices = index.search(query, k)

GPU acceleration

# Single GPU
res = faiss.StandardGpuResources()
index_cpu = faiss.IndexFlatL2(d)
index_gpu = faiss.index_cpu_to_gpu(res, 0, index_cpu)  # GPU 0

# Multi-GPU
index_gpu = faiss.index_cpu_to_all_gpus(index_cpu)

# 10-100× faster than CPU

LangChain integration

from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings

# Create FAISS vector store
vectorstore = FAISS.from_documents(docs, OpenAIEmbeddings())

# Save
vectorstore.save_local("faiss_index")

# Load
vectorstore = FAISS.load_local(
    "faiss_index",
    OpenAIEmbeddings(),
    allow_dangerous_deserialization=True
)

# Search
results = vectorstore.similarity_search("query", k=5)

LlamaIndex integration

from llama_index.vector_stores.faiss import FaissVectorStore
import faiss

# Create FAISS index
d = 1536
faiss_index = faiss.IndexFlatL2(d)

vector_store = FaissVectorStore(faiss_index=faiss_index)

Best practices

  1. Choose right index type - Flat for <10K, IVF for 10K-1M, HNSW for quality
  2. Normalize for cosine - Use IndexFlatIP with normalized vectors
  3. Use GPU for large datasets - 10-100× faster
  4. Save trained indices - Training is expensive
  5. Tune nprobe/ef_search - Balance speed/accuracy
  6. Monitor memory - PQ for large datasets
  7. Batch queries - Better GPU utilization

Performance

Index TypeBuild TimeSearch TimeMemoryAccuracy
FlatFastSlowHigh100%
IVFMediumFastMedium95-99%
HNSWSlowFastestHigh99%
PQMediumFastLow90-95%

Resources

來自 firecrawl 的更多技能

firecrawl-research-index
firecrawl
使用 Firecrawl Research 進行語義搜尋、語義與結構擴展以及內文驗證,找出能回答研究查詢的論文。對於任何文獻查找或論文檢索任務(無論是單篇論文查詢還是完整的多論文集合),一律使用此技能。
data-analysisresearchweb-scraping
oracle
firecrawl
使用 oracle CLI 的最佳實踐(提示與檔案捆綁、引擎、會話及檔案附加模式)。
pinecone
firecrawl
專為生產級AI應用設計的受管向量資料庫。全受管、自動擴展,具備混合搜尋(密集+稀疏)、元資料過濾與命名空間功能。…
wpds
firecrawl
在構建利用WordPress設計系統(WPDS)及其組件、標記、模式等的用戶界面時使用。
audiocraft-audio-generation
firecrawl
用於音訊生成的 PyTorch 函式庫,包含文字轉音樂(MusicGen)和文字轉音效(AudioGen)。當需要從文字生成音樂時使用…
skypilot-multi-cloud-orchestration
firecrawl
針對機器學習工作負載的多雲編排,具備自動成本優化功能。當您需要跨多個雲端執行訓練或批次作業、利用…時使用。
firecrawl-seo-audit
firecrawl
使用 Firecrawl 審查網站的 SEO。適用於使用者要求進行 SEO 審查、中繼資料與標題檢視、網站地圖/網站結構分析、關鍵字機會、競爭對手 SERP 比較,或優先搜尋最佳化建議時。
data-analysisresearchweb-scraping
gh-issues
firecrawl
擷取 GitHub 問題,生成子代理來實作修復並開啟 PR,然後監控並處理 PR 審查意見。用法:/gh-issues [owner/repo] [--label…