向量数据库入?
--- title: "向量数据库入门" description: "全面介绍向量数据库的原理和主流产品的使用方法" tags: ["向量数据库", "FAISS", "ChromaDB", "Milvus"] category: "llm" icon: "🧠"
向量数据库入?
什么是向量数据?
向量数据库是专门用于存储和检索高维向量的数据库,是构建语义搜索、RAG等应用的核心组件?
主流向量数据?
| 数据? | 特点 | 适用场景 |
|---|---|---|
| FAISS | Facebook开源,高性能 | 研究和小规模应用 |
| ChromaDB | 轻量级,易用 | 原型开? |
| Pinecone | 全托管,易扩? | 生产环境 |
| Milvus | 开源,分布? | 大规模生产环? |
| Weaviate | 开源,支持混合搜索 | 语义搜索 |
FAISS使用
import faiss
import numpy as np
dimension = 128
index = faiss.IndexFlatL2(dimension)
vectors = np.random.random((1000, dimension)).astype('float32')
index.add(vectors)
query = np.random.random((1, dimension)).astype('float32')
distances, indices = index.search(query, k=5)
print(f"最?个邻? {indices[0]}")
print(f"距离: {distances[0]}")
ChromaDB使用
import chromadb
client = chromadb.Client()
collection = client.create_collection("my_collection")
collection.add(
documents=["机器学习是AI的子领域", "深度学习使用神经网络"],
ids=["doc1", "doc2"],
metadatas=[{"source": "textbook"}, {"source": "article"}]
)
results = collection.query(query_texts=["什么是AI?], n_results=2)
print(results)
Milvus使用
from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType
connections.connect("default", host="localhost", port="19530")
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True),
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128),
FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=200)
]
schema = CollectionSchema(fields, description="Document embeddings")
collection = Collection("documents", schema)
向量搜索优化
# IVF索引 - 适合大规模数?
nlist = 100
quantizer = faiss.IndexFlatL2(dimension)
index = faiss.IndexIVFFlat(quantizer, dimension, nlist)
index.train(vectors)
index.add(vectors)
# HNSW索引 - 适合高召回率场景
index_hnsw = faiss.IndexHNSWFlat(dimension, 32)
index_hnsw.add(vectors)
总结
向量数据库是AI应用的基础设施,根据规模和需求选择合适的方案,可以构建高效的语义搜索和RAG系统?