基本概念:

  1. 嵌入(Embeddings):文本、图像或其他数据的数值向量表示,能够捕捉语义信息。
  2. 向量搜索(Vector search):在数据库中找到与查询向量最相似的向量的过程。
  3. 应用场景:RAG系统、搜索引擎、内容推荐、异常检测。

ChromaDB

ChromaDB 是一个开源向量数据库,专为在 AI 应用程序中轻松使用而构建,特别适用于 RAG(检索增强生成)流程。

主要特点

  • 高级、对开发者友好的 API。
  • 在集合(collections)中存储向量和元数据。
  • 支持在搜索过程中进行元数据过滤。
  • 内置持久化功能(使用 DuckDB + Parquet 进行本地存储)。
  • 易于与 LangChain 等 LLM 框架集成。

应用场景示例:

  • 拥有 50,000 个带有元数据(标题、作者、日期)的文档,并希望根据用户查询检索相关内容块,同时提供过滤选项。

Faiss

FAISS(Facebook AI Similarity Search)是由 Meta 开发的一个底层库,用于在大规模向量数据集上进行快速相似性搜索。

主要特点

  • 针对速度和可扩展性进行了优化。
  • 支持多种索引策略:

    • Flat Index(Flat Index,精确搜索,准确度最高)
    • IVF(倒排文件索引)适用于大型数据集
    • HNSW 适用于动态插入
    • PQ/OPQ 用于压缩
    • GPU 加速,可处理数百万至数十亿的向量。
    • 最小化的元数据处理(需要单独的存储系统来管理元数据)。

应用场景示例

  • 拥有 2 亿个图像嵌入向量,需要在 GPU 加速下实现亚秒级检索时间。

使用选择

ChromaDB 最适合:

  • 小到中等规模的数据集(最多几百万个向量)。
  • 需要元数据过滤的 RAG 系统。
  • 快速原型开发和最小可行产品(MVP)。
  • 希望即插即用持久化功能的开发者。

FAISS 最适合:

  • 大规模数据集(从数千万到数十亿个向量)。
  • 对延迟要求严格的应用程序。
  • 可以从 GPU 加速中受益的工作负载。
  • 需要针对性能/内存权衡进行自定义索引调优的场景。
数据集大小推荐工具说明
< 1万条向量ChromaDB 或 FAISS (Flat)简单性是关键。
1万 – 20万条向量ChromaDB适合带元数据的 RAG 应用。
20万 – 1000万条向量FAISS (HNSW 或 IVF)追求更高速度和可扩展性。
1000万+条向量FAISS 配合 GPU / 分布式部署侧重性能调优。

代码段

ChromaDB

from chromadb import Client
from chromadb.config import Settings

client = Client(Settings(
    chroma_db_impl="duckdb+parquet",
    persist_directory="./chroma_db"
))
collection = client.create_collection("my_docs")

collection.add(
    documents=["Text 1", "Text 2"],
    metadatas=[{"source": "a"}, {"source": "b"}],
    ids=["id1", "id2"]
)

results = collection.query(
    query_texts=["sample query"],
    n_results=3,
    where={"source": "a"}
)
print(results)

Faiss

import faiss
import numpy as np

d = 768  # vector dimension
n = 10000
xb = np.random.random((n, d)).astype('float32')
xq = np.random.random((5, d)).astype('float32')

index = faiss.IndexFlatL2(d)  # exact search
index.add(xb)
D, I = index.search(xq, k=5)
print(I, D)
Last modification:September 13, 2025
If you think my article is useful to you, please feel free to appreciate