Agent with Knowledge
Answer questions from a PDF using Claude, OpenAI embeddings, and PgVector.
Add a PDF to a Knowledge base, retrieve relevant chunks, and give them to Claude as context.
Code
from agno.agent import Agent
from agno.knowledge.embedder.openai import OpenAIEmbedder
from agno.knowledge.knowledge import Knowledge
from agno.models.anthropic import Claude
from agno.vectordb.pgvector import PgVector
db_url = "postgresql+psycopg://ai:ai@localhost:5532/ai"
def main() -> None:
knowledge = Knowledge(
vector_db=PgVector(
table_name="anthropic_recipes",
db_url=db_url,
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
),
)
agent = Agent(
model=Claude(id="claude-sonnet-4-6"),
knowledge=knowledge,
)
knowledge.insert(
url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf",
skip_if_exists=True,
)
agent.print_response("How do I make Thai curry?", markdown=True)
if __name__ == "__main__":
main()Embeddings require a separate provider because Anthropic offers no embedding model. This example uses OpenAI for embeddings and Claude for the final answer. Replace OpenAIEmbedder with another Agno embedder if you prefer a different embedding provider.
Usage
Set up your virtual environment
uv venv --python 3.12
source .venv/bin/activateInstall dependencies
uv pip install -U "agno[anthropic,openai,pgvector]" pypdf psycopg sqlalchemyExport your API keys
export ANTHROPIC_API_KEY="your_anthropic_api_key_here"
export OPENAI_API_KEY="your_openai_api_key_here"Run PgVector
docker run -d \
-e POSTGRES_DB=ai \
-e POSTGRES_USER=ai \
-e POSTGRES_PASSWORD=ai \
-e PGDATA=/var/lib/postgresql \
-v pgvolume:/var/lib/postgresql \
-p 5532:5432 \
--name pgvector \
agnohq/pgvector:18Run the agent
Save the code above as knowledge.py, then run:
python knowledge.py