Pinecone Vector Database
Use Pinecone as a vector database for your Knowledge Base.
Setup
Follow the instructions in the Pinecone Setup Guide to get started quickly with Pinecone.
uv pip install pinecone==5.4.2 pinecone-text typer rich pypdf openai agnoYou need pinecone-text for hybrid search (use_hybrid_search=True).
export PINECONE_API_KEY=your_pinecone_api_key_here
export OPENAI_API_KEY=your_openai_api_key_hereWe do not yet support Pinecone v6.x.x. We are actively working to achieve compatibility. In the meantime, we recommend using Pinecone v5.4.2 for the best experience.
Example
import os
import typer
from rich.prompt import Prompt
from agno.agent import Agent
from agno.knowledge.knowledge import Knowledge
from agno.vectordb.pineconedb import PineconeDb
api_key = os.getenv("PINECONE_API_KEY")
index_name = "thai-recipe-hybrid-search"
vector_db = PineconeDb(
name=index_name,
dimension=1536,
metric="cosine",
spec={"serverless": {"cloud": "aws", "region": "us-east-1"}},
api_key=api_key,
use_hybrid_search=True,
hybrid_alpha=0.5,
)
knowledge_base = Knowledge(
vector_db=vector_db,
)
def pinecone_agent(user: str = "user"):
agent = Agent(
knowledge=knowledge_base,
debug_mode=True,
)
while True:
message = Prompt.ask(f"[bold] :sunglasses: {user} [/bold]")
if message in ("exit", "bye"):
break
agent.print_response(message)
if __name__ == "__main__":
# Comment out after first run
knowledge_base.insert(
url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"
)
typer.run(pinecone_agent)Async Support ⚡
Pinecone also supports asynchronous operations with ainsert() and aprint_response().
import asyncio
from os import getenv
from agno.agent import Agent
from agno.knowledge.knowledge import Knowledge
from agno.vectordb.pineconedb import PineconeDb
api_key = getenv("PINECONE_API_KEY")
index_name = "thai-recipe-index"
vector_db = PineconeDb(
name=index_name,
dimension=1536,
metric="cosine",
spec={"serverless": {"cloud": "aws", "region": "us-east-1"}},
api_key=api_key,
)
knowledge_base = Knowledge(
vector_db=vector_db,
)
agent = Agent(
knowledge=knowledge_base,
# Enable the agent to search the knowledge base
search_knowledge=True,
# Enable the agent to read the chat history
read_chat_history=True,
)
if __name__ == "__main__":
# Load knowledge base asynchronously
asyncio.run(knowledge_base.ainsert(
url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"
)
)
# Create and use the agent asynchronously
asyncio.run(agent.aprint_response("How to make Tom Kha Gai", markdown=True))Use ainsert() and aprint_response() methods with asyncio.run() for non-blocking operations in high-throughput applications.
PineconeDb Params
| Parameter | Type | Default | Description |
|---|---|---|---|
name | Optional[str] | None | Pinecone index name. Index creation still requires a usable name. |
dimension | int | - | The dimension of the embeddings |
spec | Union[Dict, ServerlessSpec, PodSpec] | - | The index spec |
embedder | Optional[Embedder] | None | Embedder instance for creating embeddings (defaults to OpenAIEmbedder if not provided) |
metric | Optional[str] | "cosine" | The metric used for similarity search |
additional_headers | Optional[Dict[str, str]] | None | Additional headers to pass to the Pinecone client |
pool_threads | Optional[int] | 1 | The number of threads to use for the Pinecone client |
namespace | Optional[str] | None | The namespace for the Pinecone index |
timeout | Optional[int] | None | The timeout for Pinecone operations |
index_api | Optional[Any] | None | The Index API object |
api_key | Optional[str] | None | The Pinecone API key |
host | Optional[str] | None | The Pinecone host |
config | Optional[Config] | None | The Pinecone config |
use_hybrid_search | bool | False | Whether to use hybrid search |
hybrid_alpha | float | 0.5 | The alpha value for hybrid search |
reranker | Optional[Reranker] | None | Rerank retrieved documents. |
description | Optional[str] | None | Description of the vector database. |
id | Optional[str] | None | Optional vector database ID. |
**kwargs | Any | — | Additional client arguments. |
Next Steps
| Task | Guide |
|---|---|
| Insert, search, and delete content | Pinecone usage |
| Call async Agno methods | Async Pinecone usage |