主流向量数据库
向量数据库市场概述
随着AI技术的快速发展,向量数据库市场呈现出蓬勃发展的态势。从开源到商业化,从专用到通用,各种向量数据库产品层出不穷,满足不同场景和需求的应用。
1. 开源向量数据库
1.1 Milvus
项目概述
- 开发者: Zilliz
- 开源时间: 2019年
- 编程语言: Go, Python, C++
- 许可证: Apache 2.0
核心特性
- 支持万亿级向量数据
- 毫秒级搜索响应
- 多种向量索引算法(IVF、HNSW、ANNOY等)
- 云原生架构设计
- 支持多种距离度量
# Milvus使用示例
from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType
# 连接到Milvus
connections.connect(
alias="default",
host='localhost',
port='19530'
)
# 创建collection
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128),
FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=1000)
]
schema = CollectionSchema(fields, "向量搜索示例")
collection = Collection("demo_collection", schema)
# 插入数据
import numpy as np
vectors = np.random.rand(1000, 128).tolist()
texts = [f"text_{i}" for i in range(1000)]
entities = [vectors, texts]
collection.insert(entities)
# 创建索引
index_params = {
"metric_type": "L2",
"index_type": "HNSW",
"params": {"M": 16, "efConstruction": 200}
}
collection.create_index("vector", index_params)
# 搜索
search_params = {"metric_type": "L2", "params": {"ef": 64}}
query_vector = np.random.rand(1, 128).tolist()
results = collection.search(
query_vector,
"vector",
search_params,
limit=10
)
print(f"搜索结果: {results}")
优势
- 成熟的开源生态
- 高性能和可扩展性
- 丰富的索引算法支持
- 活跃的社区支持
适用场景
- 大规模向量搜索
- 推荐系统
- 图像/视频检索
- 自然语言处理
1.2 Weaviate
项目概述
- 开发 者: Weaviate B.V.
- 开源时间: 2019年
- 编程语言: Go
- 许可证: BSD 3-Clause
核心特性
- GraphQL API
- 自动向量化
- 混合搜索(向量+关键词)
- 实时数据更新
- 多模态支持
# Weaviate使用示例
import weaviate
# 连接到Weaviate
client = weaviate.Client(
url="http://localhost:8080",
additional_headers={
"X-OpenAI-Api-Key": "your-openai-api-key"
}
)
# 创建schema
schema = {
"classes": [
{
"class": "Article",
"description": "文章类",
"vectorizer": "text2vec-openai",
"properties": [
{
"name": "title",
"dataType": ["text"],
"description": "文章标题"
},
{
"name": "content",
"dataType": ["text"],
"description": "文章内容"
}
]
}
]
}
client.schema.create(schema)
# 插入数据
data_objects = [
{
"title": "向量数据库入门",
"content": "向量数据库是专门用于存储和搜索向量数据的数据库系统..."
},
{
"title": "机器学习基础",
"content": "机器学习是人工智能的一个重要分支..."
}
]
for obj in data_objects:
client.data_object.create(obj, "Article")
# 向量搜索
result = client.query.get("Article", ["title", "content"]).with_near_text({
"concepts": ["人工智能"]
}).with_limit(5).do()
print(f"搜索结果: {result}")
# 混合搜索
hybrid_result = client.query.get("Article", ["title", "content"]).with_hybrid(
query="机器学习",
alpha=0.7 # 0.7向量搜索 + 0.3关键词搜索
).with_limit(5).do()
print(f"混合搜索结果: {hybrid_result}")
优势
- GraphQL接口易于使用
- 自动向量化功能
- 强大的混合搜索能力
- 实时数据更新
适用场景
- 知识图谱
- 内容管理系统
- 智能搜索应用
- 实时推荐系统
1.3 Qdrant
项目概述
- 开发者: Qdrant团队
- 开源时间: 2021年
- 编程语言: Rust
- 许可证: Apache 2.0
核心特性
- 高性能Rust实现
- 支持过滤搜索
- 实时数据更新
- 分布式架构
- RESTful API
# Qdrant使用示例
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct
# 连接到Qdrant
client = QdrantClient(host="localhost", port=6333)
# 创建collection
client.create_collection(
collection_name="demo_collection",
vectors_config=VectorParams(size=128, distance=Distance.COSINE)
)
# 插入数据
import numpy as np
points = [
PointStruct(
id=i,
vector=np.random.rand(128).tolist(),
payload={"text": f"document_{i}", "category": "tech"}
)
for i in range(1000)
]
client.upsert(
collection_name="demo_collection",
points=points
)
# 搜索
search_result = client.search(
collection_name="demo_collection",
query_vector=np.random.rand(128).tolist(),
limit=10
)
print(f"搜索结果: {search_result}")
# 过滤搜索
filtered_result = client.search(
collection_name="demo_collection",
query_vector=np.random.rand(128).tolist(),
query_filter={"category": "tech"},
limit=10
)
print(f"过滤搜索结果: {filtered_result}")
优势
- 高性能Rust实现
- 丰富的过滤功能
- 简洁的API设计
- 良好的内存管理
适用场景
- 高并发搜索应用
- 需要复杂过滤的场景
- 实时推荐系统
- 内容检索系统
1.4 Chroma
项目概述
- 开发者: Chroma团队
- 开源时间: 2022年
- 编程语言: Python
- 许可证: Apache 2.0
核心特性
- 专为AI应用设计
- 简单易用的API
- 支持多种嵌入模型
- 轻量级部署
- 良好的Python生态集成
# Chroma使用示例
import chromadb
# 创建客户端
client = chromadb.Client()
# 创建collection
collection = client.create_collection(name="demo_collection")
# 插入数据
documents = [
"向量数据库是AI时代的重要基础设施",
"机器学习算法需要大量的训练数据",
"深度学习模型可以处理复杂的模式识别任务"
]
metadatas = [
{"source": "tech_blog", "topic": "database"},
{"source": "research_paper", "topic": "ml"},
{"source": "tutorial", "topic": "dl"}
]
ids = ["doc1", "doc2", "doc3"]
collection.add(
documents=documents,
metadatas=metadatas,
ids=ids
)
# 搜索
results = collection.query(
query_texts=["什么是人工智能"],
n_results=2
)
print(f"搜索结果: {results}")
# 过滤搜索
filtered_results = collection.query(
query_texts=["机器学习"],
n_results=2,
where={"topic": "ml"}
)
print(f"过滤搜索结果: {filtered_results}")
优势
- 简单易用的API
- 专为AI应用优化
- 轻量级部署
- Python生态友好
适用场景
- AI原型开发
- 小到中型应用
- 教育和研究
- 快速验证想法