为什么需要向量数据库?

传统数据库: SELECT * FROM docs WHERE title LIKE '%AI%'
  → 关键词匹配,找不到语义相似的内容

向量数据库: 查询"人工智能" → 找到"AI"、"机器学习"、"深度学习"
  → 语义搜索,理解意思

向量数据库是 RAG 系统的核心组件,负责存储和检索 Embedding 向量。

五大向量数据库对比

数据库类型开源规模性能易用性适合
Chroma嵌入式百万级★★★☆☆★★★★★开发/小项目
Pinecone云服务十亿级★★★★★★★★★★生产/免运维
Milvus分布式百亿级★★★★★★★★☆☆大规模生产
Weaviate混合亿级★★★★☆★★★★☆通用
QdrantRust亿级★★★★★★★★★☆高性能

各数据库详解

1. Chroma:开发者的最爱

import chromadb

# 一行安装: pip install chromadb
client = chromadb.PersistentClient(path="./chroma_db")

collection = client.create_collection("docs")

# 添加数据
collection.add(
    embeddings=[[0.1, 0.2, ...], [0.3, 0.4, ...]],
    documents=["文档1", "文档2"],
    metadatas=[{"source": "file1"}, {"source": "file2"}],
    ids=["1", "2"]
)

# 查询
results = collection.query(
    query_embeddings=[[0.15, 0.25, ...]],
    n_results=5
)

优势

  • 零配置,pip install 即用
  • 纯 Python,无外部依赖
  • 数据存储在本地文件

劣势

  • 不支持分布式
  • 百万级以上性能下降
  • 无 GPU 加速

适合:开发原型、小规模应用(< 100 万向量)

2. Pinecone:最省心的云服务

from pinecone import Pinecone

pc = Pinecone(api_key="your-api-key")
index = pc.Index("my-index")

# 添加数据
index.upsert(vectors=[
    {"id": "1", "values": [0.1, 0.2, ...], "metadata": {"text": "..."}}
])

# 查询
results = index.query(
    vector=[0.15, 0.25, ...],
    top_k=5,
    filter={"source": {"$eq": "tech"}}
)

优势

  • 完全托管,零运维
  • 自动扩缩容
  • Serverless 计费(按存储+查询量)

劣势

  • 数据不在本地(隐私顾虑)
  • 成本随规模增长
  • 闭源

适合:不想运维、需要快速上线

3. Milvus:大规模生产首选

from pymilvus import MilvusClient

client = MilvusClient(uri="http://localhost:19530")

# 创建 Collection
client.create_collection(
    collection_name="docs",
    dimension=1024,
    metric_type="COSINE"
)

# 插入数据
client.insert("docs", [
    {"id": 1, "vector": [0.1, ...], "text": "文档1"},
    {"id": 2, "vector": [0.2, ...], "text": "文档2"},
])

# 查询
results = client.search(
    collection_name="docs",
    data=[0.15, ...],
    limit=5,
    output_fields=["text"]
)

优势

  • 支持百亿级向量
  • 分布式架构,水平扩展
  • GPU 加速检索
  • 混合检索(向量+标量过滤)

劣势

  • 部署复杂(需 etcd + MinIO + Pulsar)
  • 运维成本高
  • 学习曲线陡

适合:大规模生产环境(> 1 亿向量)

4. Qdrant:高性能 Rust 引擎

from qdrant_client import QdrantClient

client = QdrantClient(host="localhost", port=6333)

client.create_collection(
    "docs",
    vectors_config={"size": 1024, "distance": "Cosine"}
)

client.upsert("docs", points=[
    {"id": 1, "vector": [0.1, ...], "payload": {"text": "文档1"}}
])

results = client.search("docs", query_vector=[0.15, ...], limit=5)

优势

  • Rust 实现,性能极高
  • 内存占用低
  • 支持丰富过滤条件
  • 单机可处理千万级

劣势

  • 生态不如 Milvus 成熟
  • 分布式仍在发展中

适合:中大规模、性能敏感场景

性能基准测试

测试环境

  • 数据量:100 万条 1024 维向量
  • 硬件:16 核 CPU,64GB RAM,SSD

结果

数据库索引时间查询延迟(P95)内存占用QPS
Chroma180s45ms4.2 GB220
Pinecone60s12msN/A(云)5000+
Milvus90s8ms3.8 GB8000+
Qdrant70s10ms2.5 GB6500
Weaviate120s18ms5.1 GB1800

选型决策树

你的规模多大?
├─ < 10 万向量(开发/原型)
│  └─ Chroma ✅(零配置,最简单)
├─ 10 万 - 100 万(小规模生产)
│  ├─ 不想运维 → Pinecone ✅
│  ├─ 自部署 → Qdrant ✅
│  └─ 已有 LangChain → Chroma ✅
├─ 100 万 - 1 亿(中大规模)
│  ├─ 性能优先 → Qdrant ✅
│  ├─ 免运维 → Pinecone ✅
│  └─ 功能丰富 → Weaviate ✅
└─ > 1 亿(超大规模)
   └─ Milvus ✅(分布式,唯一选择)

与 LangChain 集成

所有数据库都支持 LangChain:

from langchain.vectorstores import (
    Chroma, Pinecone, Milvus, Qdrant, Weaviate
)

# 示例:Chroma
vectorstore = Chroma(
    collection_name="docs",
    embedding_function=embeddings,
    persist_directory="./chroma_db"
)

# 统一接口
docs = vectorstore.similarity_search("AI Agent", k=5)

结语

向量数据库是 RAG 系统的地基。选对数据库,RAG 系统就成功了一半。

在硅基 AGI 的实践中,推荐路径:Chroma 原型验证 → Qdrant 中规模生产 → Milvus 大规模部署。


硅基 AGI · RAG 与微调 | guijiagi.com

加入讨论

这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。

碳基与硅基的智慧碰撞,认知差异创造无限可能。