Pinecone

返回 向量数据库

Pinecone 是全托管的云端向量数据库,无需自建和运维,开箱即用,适合快速构建 AI 应用原型和生产服务。


与自建方案对比

维度Pinecone(托管)Milvus / Qdrant(自建)
运维成本零,全托管需自行部署和维护
启动速度快,注册即用需搭建环境
费用按用量计费,规模大时贵仅基础设施费用
数据控制数据在 Pinecone 云端数据完全自控
适用场景快速原型、中小规模企业私有化、大规模

核心概念

概念说明
Index存储向量的基本单元,类似 Collection
NamespaceIndex 内的逻辑分区,用于多租户隔离
Record一条向量记录,包含 id、values、metadata
Metadata随向量存储的标量数据,用于过滤

索引类型

类型说明
Serverless按查询量计费,自动扩缩容,推荐新项目
Pod-based固定规格 Pod,适合高吞吐稳定负载

Python SDK 示例

初始化

from pinecone import Pinecone, ServerlessSpec
 
pc = Pinecone(api_key="your-api-key")
 
pc.create_index(
    name="documents",
    dimension=1536,
    metric="cosine",
    spec=ServerlessSpec(cloud="aws", region="us-east-1")
)
 
index = pc.Index("documents")

写入向量(Upsert)

vectors = [
    {
        "id": "chunk_0",
        "values": get_embedding("向量数据库简介..."),
        "metadata": {"source": "doc_001", "content": "向量数据库简介..."}
    }
]
index.upsert(vectors=vectors, namespace="production")

相似度查询

results = index.query(
    vector=get_embedding("什么是向量数据库?"),
    top_k=5,
    namespace="production",
    include_metadata=True
)
 
for match in results.matches:
    print(f"score: {match.score:.4f}  content: {match.metadata['content']}")

元数据过滤

results = index.query(
    vector=query_vec,
    top_k=5,
    filter={"source": {"$eq": "doc_001"}},
    include_metadata=True
)
 
# 多条件
results = index.query(
    vector=query_vec,
    top_k=5,
    filter={"$and": [
        {"source": {"$in": ["doc_001", "doc_002"]}},
        {"chunk_index": {"$gte": 2}}
    ]},
    include_metadata=True
)

删除

index.delete(ids=["chunk_0", "chunk_1"], namespace="production")
index.delete(filter={"source": {"$eq": "doc_001"}}, namespace="production")

Namespace 多租户模式

# 不同用户数据写入不同 namespace,互不干扰
index.upsert(vectors=user_a_vectors, namespace="user_a")
index.upsert(vectors=user_b_vectors, namespace="user_b")
 
results = index.query(vector=query_vec, top_k=5, namespace="user_a")

LangChain 集成

from langchain_pinecone import PineconeVectorStore
from langchain_openai import OpenAIEmbeddings
 
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = PineconeVectorStore(index_name="documents", embedding=embeddings)
 
vectorstore.add_texts(texts=chunks, metadatas=metadatas)
docs = vectorstore.similarity_search("什么是 RAG?", k=5)

相关

  • Milvus — 开源自建方案,数据私有化首选
  • Qdrant — 开源向量数据库,支持丰富过滤
  • PostgreSQL — pgvector 扩展,小规模场景
  • 大模型 — Embedding 模型与 LLM