Setup
Follow the instructions in the Pinecone Setup Guide to get started quickly with Pinecone.
We 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 typing import Optional
from rich.prompt import Prompt
from agno.agent import Agent
from agno.knowledge.pdf_url import PDFUrlKnowledgeBase
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 = PDFUrlKnowledgeBase(
urls=["https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"],
vector_db=vector_db,
)
def pinecone_agent(user: str = "user"):
run_id: Optional[str] = None
agent = Agent(
run_id=run_id,
user_id=user,
knowledge=knowledge_base,
show_tool_calls=True,
debug_mode=True,
)
if run_id is None:
run_id = agent.run_id
print(f"Started Run: {run_id}\n")
else:
print(f"Continuing Run: {run_id}\n")
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.load(recreate=True, upsert=True)
typer.run(pinecone_agent)
Async Support ⚡
Pinecone also supports asynchronous operations, enabling concurrency and leading to better performance.
import asyncio
from os import getenv
from agno.agent import Agent
from agno.knowledge.pdf_url import PDFUrlKnowledgeBase
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 = PDFUrlKnowledgeBase(
urls=["https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"],
vector_db=vector_db,
)
agent = Agent(
knowledge=knowledge_base,
# Show tool calls in the response
show_tool_calls=True,
# 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__":
# Comment out after first run
asyncio.run(knowledge_base.aload(recreate=False, upsert=True))
# Create and use the agent
asyncio.run(agent.aprint_response("How to make Tom Kha Gai", markdown=True))
Use aload()
and aprint_response()
methods with asyncio.run()
for non-blocking operations in high-throughput applications.
PineconeDb Params
Parameter | Type | Default | Description |
---|
name | str | - | The name of the Pinecone index |
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 |
Developer Resources