Insert, Search, and Delete with LanceDB

Insert a PDF, search it with an agent, and delete LanceDB rows by name or metadata.

from agno.agent import Agent
from agno.knowledge.knowledge import Knowledge
from agno.vectordb.lancedb import LanceDb

vector_db = LanceDb(table_name="recipes", uri="tmp/lancedb")
knowledge = Knowledge(vector_db=vector_db)
agent = Agent(knowledge=knowledge, search_knowledge=True)

if __name__ == "__main__":
    knowledge.insert(
        name="Recipes",
        url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf",
        metadata={"doc_type": "recipe_book"},
    )

    agent.print_response(
        "List the ingredients for Massaman Gai.",
        markdown=True,
    )

    vector_db.delete_by_name("Recipes")
    # To delete by metadata instead:
    # vector_db.delete_by_metadata({"doc_type": "recipe_book"})

Choose one deletion method after the search. delete_by_name() and delete_by_metadata() load matching rows and delete their IDs from the LanceDB table.

Run the Example

Set up your virtual environment

uv venv --python 3.12
source .venv/bin/activate

Install dependencies

uv pip install -U agno lancedb openai pypdf

Export the API key

export OPENAI_API_KEY=your_openai_api_key_here

Run the example

python lance_db.py

Next Steps

TaskGuide
Call async Agno methodsAsync LanceDB usage
Configure hybrid searchLanceDB hybrid search
Configure search behaviorLanceDB overview