| name | pinecone |
| description | Managed vector database for production RAG — serverless and pod-based deployment, hybrid search, namespaces, and metadata filtering. |
| version | 1.0.0 |
| author | hermes-CCC (ported from Hermes Agent by NousResearch) |
| license | MIT |
| metadata | {"hermes":{"tags":["RAG","Vector-Database","Pinecone","Embeddings","Production","Serverless","Managed"],"related_skills":["qdrant","chroma","instructor"]}} |
Pinecone — Managed Vector Database
Fully managed vector database for production RAG. Serverless (pay-per-query) or pod-based (dedicated).
Setup
pip install pinecone-client sentence-transformers openai
from pinecone import Pinecone, ServerlessSpec
pc = Pinecone(api_key="your-api-key")
Create Index
pc.create_index(
name="my-index",
dimension=1536,
metric="cosine",
spec=ServerlessSpec(
cloud="aws",
region="us-east-1"
)
)
index = pc.Index("my-index")
Upsert Vectors
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("all-MiniLM-L6-v2")
documents = [
{"id": "doc1", "text": "Python async programming guide"},
{"id": "doc2", "text": "Machine learning with PyTorch"},
]
vectors = []
for doc in documents:
embedding = model.encode(doc["text"]).tolist()
vectors.append({
"id": doc["id"],
"values": embedding,
"metadata": {"text": doc["text"], "source": "manual"}
})
index.upsert(vectors=vectors, namespace="docs")
Query
query_text = "how to write async Python?"
query_vector = model.encode(query_text).tolist()
results = index.query(
vector=query_vector,
top_k=5,
namespace="docs",
include_metadata=True,
)
for match in results["matches"]:
print(f"Score: {match['score']:.3f} | {match['metadata']['text']}")
Metadata Filtering
results = index.query(
vector=query_vector,
top_k=5,
filter={"source": {"$eq": "manual"}},
include_metadata=True,
)
results = index.query(
vector=query_vector,
top_k=5,
filter={
"$and": [
{"category": {"$in": ["tech", "science"]}},
{"year": {"$gte": 2023}},
]
},
include_metadata=True,
)
Namespaces
index.upsert(vectors=vectors, namespace="user-123")
index.upsert(vectors=vectors, namespace="user-456")
results = index.query(vector=query_vector, top_k=5, namespace="user-123")
index.delete(delete_all=True, namespace="user-123")
Fetch / Delete / Update
fetched = index.fetch(ids=["doc1", "doc2"], namespace="docs")
index.delete(ids=["doc1"], namespace="docs")
index.upsert(vectors=[{"id": "doc1", "values": embedding, "metadata": {"updated": True}}])
Index Stats
stats = index.describe_index_stats()
print(f"Total vectors: {stats['total_vector_count']}")
print(f"Namespaces: {stats['namespaces']}")
When to Use Pinecone vs Alternatives
| Pinecone | Qdrant | Chroma |
|---|
| Hosting | Managed cloud | Self/cloud | Self/cloud |
| Cost | Pay-per-use | Self-hosted free | Free |
| Scale | Billions | Millions+ | Millions |
| Setup | Minutes | Minutes | Seconds |
| Best for | Production SaaS | Production self-hosted | Local dev/RAG |