pinecone
zechenzhangAGI/AI-research-SKILLs
Managed vector database for production AI applications. Fully managed, auto-scaling, with hybrid search (dense + sparse), metadata filtering, and namespaces. Low latency (<100ms p95). Use for production RAG, recommendation systems, or semantic search at scale. Best for serverless, managed infrastructure.
...Expand allAbout pinecone
Pinecone is a fully managed, serverless vector database designed for production AI applications. It solves the problem of scaling vector databases while handling the complexities of infrastructure management. Pinecone provides a platform where developers can focus on building AI applications without worrying about the underlying database architecture, such as provisioning, scaling, or maintenance. Its low-latency (<100ms p95) capabilities make it ideal for production use in areas like recommendation systems, semantic search, and retrieval-augmented generation (RAG) applications.
Key features of Pinecone include hybrid search that combines dense and sparse vectors, metadata filtering, and support for namespaces. The platform is built for high availability and reliability, offering a 99.9% uptime SLA. Pinecone automatically scales to billions of vectors without performance degradation, making it suitable for large-scale production systems. Its integration with cloud providers like AWS, GCP, and Azure provides flexibility in deployment, and it can operate seamlessly in a serverless or pod-based setup to match performance needs.
Pinecone is targeted at organizations and developers working on AI-powered applications that need efficient and scalable vector search. Ideal use cases include RAG systems, recommendation engines, and semantic search at scale, especially in cases where latency and infrastructure management are critical. With its ease of integration and managed service model, Pinecone is an excellent choice for developers who need a reliable, low-maintenance vector database solution for AI workloads.
FAQ
How do I get started with Pinecone?
To get started with Pinecone, you can install the `pinecone-client` Python package using `pip install pinecone-client`. Then, initialize the Pinecone client, create an index, upsert vectors, and perform queries. The documentation provides sample code for each of these steps.
What is the latency of Pinecone?
Pinecone offers low latency, with a p95 latency of less than 100ms, making it suitable for production applications where fast response times are critical.
Does Pinecone support hybrid search?
Yes, Pinecone supports hybrid search, allowing both dense and sparse vectors to be used in queries for more flexible and efficient search capabilities.
Can I filter results based on metadata?
Yes, Pinecone provides metadata filtering, allowing you to filter query results based on various criteria such as exact matches, comparisons, logical operators, or the 'in' operator for lists.
Is Pinecone serverless?
Yes, Pinecone is serverless by default, but it also supports pod-based deployment for those who require more consistent performance in a specific environment.
Pinecone - Managed Vector Database
The vector database for production AI applications.
When to use Pinecone
Use when:
- Need managed, serverless vector database
- Production RAG applications
- Auto-scaling required
- Low latency critical (<100ms)
- Don't want to manage infrastructure
- Need hybrid search (dense + sparse vectors)
Metrics:
- Fully managed SaaS
- Auto-scales to billions of vectors
- p95 latency <100ms
- 99.9% uptime SLA
Use alternatives instead:
- Chroma: Self-hosted, open-source
- FAISS: Offline, pure similarity search
- Weaviate: Self-hosted with more features
Quick start
Installation
pip install pinecone-client
Basic usage
from pinecone import Pinecone, ServerlessSpec# Initializepc = Pinecone(api_key="your-api-key")# Create indexpc.create_index( name="my-index", dimension=1536, # Must match embedding dimension metric="cosine", # or "euclidean", "dotproduct" spec=ServerlessSpec(cloud="aws", region="us-east-1"))# Connect to indexindex = pc.Index("my-index")# Upsert vectorsindex.upsert(vectors=[ {"id": "vec1", "values": [0.1, 0.2, ...], "metadata": {"category": "A"}}, {"id": "vec2", "values": [0.3, 0.4, ...], "metadata": {"category": "B"}}])# Queryresults = index.query( vector=[0.1, 0.2, ...], top_k=5, include_metadata=True)print(results["matches"])
Core operations
Create index
# Serverless (recommended)pc.create_index( name="my-index", dimension=1536, metric="cosine", spec=ServerlessSpec( cloud="aws", # or "gcp", "azure" region="us-east-1" ))# Pod-based (for consistent performance)from pinecone import PodSpecpc.create_index( name="my-index", dimension=1536, metric="cosine", spec=PodSpec( environment="us-east1-gcp", pod_type="p1.x1" ))
Upsert vectors
# Single upsertindex.upsert(vectors=[ { "id": "doc1", "values": [0.1, 0.2, ...], # 1536 dimensions "metadata": { "text": "Document content", "category": "tutorial", "timestamp": "2025-01-01" } }])# Batch upsert (recommended)vectors = [ {"id": f"vec{i}", "values": embedding, "metadata": metadata} for i, (embedding, metadata) in enumerate(zip(embeddings, metadatas))]index.upsert(vectors=vectors, batch_size=100)
Query vectors
# Basic queryresults = index.query( vector=[0.1, 0.2, ...], top_k=10, include_metadata=True, include_values=False)# With metadata filteringresults = index.query( vector=[0.1, 0.2, ...], top_k=5, filter={"category": {"$eq": "tutorial"}})# Namespace queryresults = index.query( vector=[0.1, 0.2, ...], top_k=5, namespace="production")# Access resultsfor match in results["matches"]: print(f"ID: {match['id']}") print(f"Score: {match['score']}") print(f"Metadata: {match['metadata']}")
Metadata filtering
# Exact matchfilter = {"category": "tutorial"}# Comparisonfilter = {"price": {"$gte": 100}} # $gt, $gte, $lt, $lte, $ne# Logical operatorsfilter = { "$and": [ {"category": "tutorial"}, {"difficulty": {"$lte": 3}} ]} # Also: $or# In operatorfilter = {"tags": {"$in": ["python", "ml"]}}
Namespaces
# Partition data by namespaceindex.upsert( vectors=[{"id": "vec1", "values": [...]}], namespace="user-123")# Query specific namespaceresults = index.query( vector=[...], namespace="user-123", top_k=5)# List namespacesstats = index.describe_index_stats()print(stats['namespaces'])
Hybrid search (dense + sparse)
# Upsert with sparse vectorsindex.upsert(vectors=[ { "id": "doc1", "values": [0.1, 0.2, ...], # Dense vector "sparse_values": { "indices": [10, 45, 123], # Token IDs "values": [0.5, 0.3, 0.8] # TF-IDF scores }, "metadata": {"text": "..."} }])# Hybrid queryresults = index.query( vector=[0.1, 0.2, ...], sparse_vector={ "indices": [10, 45], "values": [0.5, 0.3] }, top_k=5, alpha=0.5 # 0=sparse, 1=dense, 0.5=hybrid)
LangChain integration
from langchain_pinecone import PineconeVectorStorefrom langchain_openai import OpenAIEmbeddings# Create vector storevectorstore = PineconeVectorStore.from_documents( documents=docs, embedding=OpenAIEmbeddings(), index_name="my-index")# Queryresults = vectorstore.similarity_search("query", k=5)# With metadata filterresults = vectorstore.similarity_search( "query", k=5, filter={"category": "tutorial"})# As retrieverretriever = vectorstore.as_retriever(search_kwargs={"k": 10})
LlamaIndex integration
from llama_index.vector_stores.pinecone import PineconeVectorStore# Connect to Pineconepc = Pinecone(api_key="your-key")pinecone_index = pc.Index("my-index")# Create vector storevector_store = PineconeVectorStore(pinecone_index=pinecone_index)# Use in LlamaIndexfrom llama_index.core import StorageContext, VectorStoreIndexstorage_context = StorageContext.from_defaults(vector_store=vector_store)index = VectorStoreIndex.from_documents(documents, storage_context=storage_context)
Index management
# List indicesindexes = pc.list_indexes()# Describe indexindex_info = pc.describe_index("my-index")print(index_info)# Get index statsstats = index.describe_index_stats()print(f"Total vectors: {stats['total_vector_count']}")print(f"Namespaces: {stats['namespaces']}")# Delete indexpc.delete_index("my-index")
Delete vectors
# Delete by IDindex.delete(ids=["vec1", "vec2"])# Delete by filterindex.delete(filter={"category": "old"})# Delete all in namespaceindex.delete(delete_all=True, namespace="test")# Delete entire indexindex.delete(delete_all=True)
Best practices
- Use serverless - Auto-scaling, cost-effective
- Batch upserts - More efficient (100-200 per batch)
- Add metadata - Enable filtering
- Use namespaces - Isolate data by user/tenant
- Monitor usage - Check Pinecone dashboard
- Optimize filters - Index frequently filtered fields
- Test with free tier - 1 index, 100K vectors free
- Use hybrid search - Better quality
- Set appropriate dimensions - Match embedding model
- Regular backups - Export important data
Performance
| Operation | Latency | Notes |
|---|---|---|
| Upsert | ~50-100ms | Per batch |
| Query (p50) | ~50ms | Depends on index size |
| Query (p95) | ~100ms | SLA target |
| Metadata filter | ~+10-20ms | Additional overhead |
Pricing (as of 2025)
Serverless:
- $0.096 per million read units
- $0.06 per million write units
- $0.06 per GB storage/month
Free tier:
- 1 serverless index
- 100K vectors (1536 dimensions)
- Great for prototyping
Resources
- Website: https://www.pinecone.io
- Docs: https://docs.pinecone.io
- Console: https://app.pinecone.io
- Pricing: https://www.pinecone.io/pricing
Install pinecone
Download and extract the skill files to your .claude/skills/ directory.
Download ZIPClone the repository and copy the skill files to your project.
git clone https://github.com/Orchestra-Research/AI-Research-SKILLs/blob/main/15-rag/pinecone/SKILL.md # Copy SKILL.md to your .claude/skills/ directory
Copy





Home
