← 返回首页
🧠

向量数据库入?

📂 llm ⏱ 1 min 150 words

--- 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系统?