SuperAPI AI 工具集

faiss

数据与分析

查看项目

更新于 10-15 10:24

技能介绍

FAISS 是 Meta(Facebook)AI 研究团队开发的库,用于高效的稠密向量相似度搜索与聚类,使用 C++ 编写并提供 Python 绑定,可处理数十亿级向量。

用途

FAISS 适用于以下场景:需要对大规模向量数据集(百万至十亿级)进行快速相似度搜索;需要 GPU 加速;只需要纯向量相似度检索、不需要元数据过滤;对高吞吐、低延迟有严格要求;对嵌入向量进行离线或批量处理。

如果需求是元数据过滤,可考虑 Chroma 或 Pinecone;如果需要完整的数据库功能,可考虑 Weaviate;如果只需要更简单、功能更少的方案,可考虑 Annoy。

主要能力

FAISS 提供多种索引类型:

  • Flat(精确搜索):IndexFlatL2 使用 L2(欧氏)距离,IndexFlatIP 使用内积(向量归一化后即为余弦相似度)。速度最慢但精度最高。
  • IVF(倒排文件,快速近似):通过 IndexIVFFlat 构建,需要先训练,搜索时通过 nprobe 控制搜索的聚类数量。
  • HNSW(分层 NSW,质量与速度兼顾):通过 IndexHNSWFlat 构建,M 参数控制每层连接数,无需训练。
  • 乘积量化(PQ,内存高效):通过 IndexPQ 构建,可将内存减少 16–32 倍,需要训练。

此外还支持索引的保存与加载(faiss.write_index / faiss.read_index),以及 GPU 加速(单 GPU 使用 index_cpu_to_gpu,多 GPU 使用 index_cpu_to_all_gpus,官方称比 CPU 快 10–100 倍)。

使用方式

安装:CPU 版本使用 pip install faiss-cpu,GPU 版本使用 pip install faiss-gpu。

基本用法:导入 faiss 与 numpy,准备 float32 向量数据,创建索引(如 faiss.IndexFlatL2(d)),调用 index.add(vectors) 添加向量,再用 index.search(query, k) 搜索 k 个最近邻,返回距离与索引。

IVF 索引需要先调用 index.train(vectors) 训练,再添加向量,搜索时设置 index.nprobe。HNSW 索引无需训练。PQ 索引需要训练后添加。

GPU 加速:创建 faiss.StandardGpuResources(),将 CPU 索引通过 faiss.index_cpu_to_gpu(res, 0, index_cpu) 转为 GPU 索引,或用 faiss.index_cpu_to_all_gpus(index_cpu) 使用多 GPU。

LangChain 集成:从 langchain_community.vectorstores 导入 FAISS,使用 FAISS.from_documents(docs, OpenAIEmbeddings()) 创建向量存储,通过 save_local 保存、load_local 加载(加载时需设置 allow_dangerous_deserialization=True),再用 similarity_search 检索。

LlamaIndex 集成:从 llama_index.vector_stores.faiss 导入 FaissVectorStore,先创建 faiss 索引(如 faiss.IndexFlatL2(d)),再传入 FaissVectorStore(faiss_index=faiss_index)。

适用场景与最佳实践

根据数据规模选择索引类型:小于 1 万条用 Flat,1 万至 100 万条用 IVF,追求质量用 HNSW。做余弦相似度时先归一化向量并使用 IndexFlatIP。大数据集使用 GPU 可获得 10–100 倍加速。训练成本较高,应保存已训练的索引。通过调整 nprobe / ef_search 平衡速度与精度。大数据集可用 PQ 控制内存。批量查询可提升 GPU 利用率。

性能参考

Flat:构建快、搜索慢、内存高、精度 100%。IVF:构建中等、搜索快、内存中等、精度 95–99%。HNSW:构建慢、搜索最快、内存高、精度 99%。PQ:构建中等、搜索快、内存低、精度 90–95%。

限制

FAISS 是向量相似度搜索库,不提供元数据过滤,也不具备完整数据库功能。具体收费、价格与平台支持情况暂未提供。

资源

GitHub:https://github.com/facebookresearch/faiss (星标 31,700+);Wiki:https://github.com/facebookresearch/faiss/wiki ;许可证:MIT。