FAISS 是 Meta(Facebook)AI 研究团队推出的高效相似度搜索库,主要用于稠密向量的相似度检索与聚类,可处理十亿级向量规模,并提供 GPU 加速与多种索引类型。其核心以 C++ 实现,同时提供 Python 绑定。资料显示该项目在 GitHub 上拥有 31,700+ 星标,采用 MIT 许可证。
一、适用场景 根据资料,以下情况适合使用 FAISS:需要对大规模向量数据集(百万至十亿级)进行快速相似度搜索;需要 GPU 加速;只需要纯向量相似度、不需要元数据过滤;对高吞吐、低延迟有较高要求;对嵌入向量进行离线或批处理。
若需要元数据过滤,资料建议改用 Chroma 或 Pinecone;若需要完整数据库功能,建议改用 Weaviate;若希望更简单、功能更少,可考虑 Annoy。
二、安装 CPU 版本:pip install faiss-cpu GPU 版本:pip install faiss-gpu
三、基本用法 使用 Python 时,先导入 faiss 与 numpy,构造示例数据(如 1000 个 128 维向量),创建索引(如 faiss.IndexFlatL2(d) 表示 L2 距离),调用 index.add(vectors) 添加向量,再用 index.search(query, k) 搜索 k 个最近邻,返回距离与索引。
四、索引类型
- Flat(精确搜索):IndexFlatL2 使用 L2(欧氏)距离;IndexFlatIP 使用内积(向量归一化后即为余弦相似度)。资料称其最慢但最准确。
- IVF(倒排文件,快速近似):先创建 quantizer(如 IndexFlatL2),再创建 IndexIVFFlat(quantizer, d, nlist),其中 nlist 为聚类数(示例为 100);需先 index.train(vectors) 训练,再 index.add(vectors) 添加;搜索时通过 index.nprobe 指定要搜索的聚类数(示例为 10)。
- HNSW(分层 NSW,质量与速度兼顾):IndexHNSWFlat(d, M),M 为每层连接数(示例为 32);无需训练,直接 add 后即可 search。
- 乘积量化(PQ,内存高效):IndexPQ(d, m, nbits),m 为子量化器数量(示例为 8),nbits 为 8;资料称 PQ 可将内存减少 16–32 倍;需先 train 再 add。
五、保存与加载 使用 faiss.write_index(index, "large.index") 保存索引,使用 faiss.read_index("large.index") 加载索引,之后可继续调用 search。
六、GPU 加速 单 GPU:创建 faiss.StandardGpuResources(),将 CPU 索引通过 faiss.index_cpu_to_gpu(res, 0, index_cpu) 转到 GPU 0。多 GPU:使用 faiss.index_cpu_to_all_gpus(index_cpu)。资料称 GPU 比 CPU 快 10–100 倍。
七、框架集成 LangChain:可从 langchain_community.vectorstores 导入 FAISS,配合 OpenAIEmbeddings,用 FAISS.from_documents(docs, OpenAIEmbeddings()) 创建向量存储;用 vectorstore.save_local("faiss_index") 保存;用 FAISS.load_local("faiss_index", OpenAIEmbeddings(), allow_dangerous_deserialization=True) 加载;用 vectorstore.similarity_search("query", k=5) 搜索。 LlamaIndex:可从 llama_index.vector_stores.faiss 导入 FaissVectorStore,创建 faiss.IndexFlatL2(d)(示例 d=1536),再以 FaissVectorStore(faiss_index=faiss_index) 构造向量存储。
八、最佳实践(资料列出) 选择合适的索引类型:小于 1 万用 Flat,1 万至 100 万用 IVF,追求质量用 HNSW;余弦相似度需归一化后配合 IndexFlatIP;大数据集使用 GPU;保存已训练的索引,因为训练开销较大;调节 nprobe/ef_search 以平衡速度与准确率;关注内存,大数据集可用 PQ;批量查询以提升 GPU 利用率。
九、性能对比(资料给出) Flat:构建快、搜索慢、内存高、准确率 100%。 IVF:构建中等、搜索快、内存中等、准确率 95–99%。 HNSW:构建慢、搜索最快、内存高、准确率 99%。 PQ:构建中等、搜索快、内存低、准确率 90–95%。
十、资源 GitHub:https://github.com/facebookresearch/faiss (31,700+ 星标) Wiki:https://github.com/facebookresearch/faiss/wiki 许可证:MIT
关于收费、价格、平台支持范围等具体信息,资料暂未提供。