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/activate

Install dependencies

uv pip install -U "agno[anthropic,openai,pgvector]" pypdf psycopg sqlalchemy

Export 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:18

Run the agent

Save the code above as knowledge.py, then run:

python knowledge.py

Developer Resources