FAISS (Facebook AI Similarity Search) 是一个专门用于稠密向量相似度搜索和聚类的开源库。
import faiss
import numpy as np
# 创建索引
index = faiss.IndexFlatL2(128) # 128维向量
# 添加向量
vectors = np.random.random((1000, 128)).astype('float32')
index.add(vectors)
# 搜索最相似的5个向量
query = np.random.random((1, 128)).astype('float32')
distances, indices = index.search(query, 5)
# 不同类型的索引
faiss.IndexFlatL2(d) # 暴力搜索,精确但慢
faiss.IndexIVFFlat(quantizer, d, nlist) # 倒排索引,快速近似
faiss.IndexHNSW(d, M) # 层次导航小世界图
faiss.IndexLSH(d, nbits) # 局部敏感哈希
# 存储文档向量
document_embeddings = get_embeddings(documents)
index.add(document_embeddings)
# 搜索相关文档
query_embedding = get_embedding(user_question)
similar_docs = index.search(query_embedding, k=5)
方案 | 优势 | 劣势 | 适用场景 |
---|---|---|---|
FAISS | 超高性能、算法丰富 | 只支持稠密向量 | 大规模向量搜索 |
Elasticsearch | 功能全面、易用 | 向量搜索性能一般 | 混合搜索需求 |
Pinecone | 托管服务、易部署 | 收费、依赖外部服务 | 快速原型开发 |
Chroma | 轻量级、易集成 | 性能不如FAISS | 小规模应用 |
从代码中可以看到,项目使用FAISS来:
# 创建索引
index = faiss.read_index(index_file)
# 添加新向量
index.add(new_vectors)
# 搜索相似向量
distances, indices = index.search(query_vector, num_results)
# 保存索引
faiss.write_index(index, index_file)
简单说,FAISS就是向量搜索界的"法拉利" - 专业、高效、性能卓越!️
对于需要高性能语义搜索的AI应用来说,FAISS是最佳选择之一。
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
# LangChain中的FAISS向量存储
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_texts(texts, embeddings)
from llama_index import VectorStoreIndex
from llama_index.vector_stores import FaissVectorStore
# LlamaIndex的FAISS集成
vector_store = FaissVectorStore(faiss_index=faiss_index)
index = VectorStoreIndex.from_vector_store(vector_store)
from haystack.document_stores import FAISSDocumentStore
# Haystack的FAISS文档存储
document_store = FAISSDocumentStore(
faiss_index_factory_str="Flat",
return_embedding=True
)
# ChatGLM-6B的本地知识库实现
from langchain.vectorstores import FAISS
# Chroma支持FAISS作为后端
import chromadb
from chromadb.config import Settings
client = chromadb.Client(Settings(
chroma_server_host="localhost",
chroma_api_impl="chromadb.api.fastapi.FastAPI",
chroma_server_http_port="8000"
))
// C#中使用FAISS
var memoryBuilder = new MemoryBuilder()
.WithFaissMemoryStore()
.Build();
# Hugging Face的向量搜索示例
from datasets import Dataset
import faiss
# 很多HF的demo和教程使用FAISS
框架类型 | 代表项目 | GitHub Stars | FAISS使用率 |
---|---|---|---|
LLM框架 | LangChain | 90k+ | |
RAG框架 | LlamaIndex | 34k+ | |
AI代理 | AutoGPT | 150k+ | |
向量DB | Chroma | 13k+ | |
NLP框架 | Haystack | 15k+ |
目前几乎所有主流的RAG (检索增强生成) 框架都支持或优先推荐FAISS,它已经成为向量搜索的事实标准!
如果你在开发AI应用,选择FAISS基本上是个安全且明智的选择!