from agno.agent import Agent
from agno.knowledge.knowledge import Knowledge
from agno.utils.media import (
SampleDataFileExtension,
download_knowledge_filters_sample_data,
)
from agno.vectordb.lancedb import LanceDb
# Download all sample sales documents and get their paths
downloaded_csv_paths = download_knowledge_filters_sample_data(
num_files=4, file_extension=SampleDataFileExtension.CSV
)
# Initialize LanceDB
# By default, it stores data in /tmp/lancedb
vector_db = LanceDb(
table_name="recipes",
uri="tmp/lancedb", # You can change this path to store data elsewhere
)
# Step 1: Initialize knowledge with documents and metadata
# -----------------------------------------------------------------------------
knowledge = Knowledge(
name="CSV Knowledge Base",
description="A knowledge base for CSV files",
vector_db=vector_db,
)
# Load all documents into the vector database
knowledge.add_contents(
[
{
"path": downloaded_csv_paths[0],
"metadata": {
"data_type": "sales",
"quarter": "Q1",
"year": 2024,
"region": "north_america",
"currency": "USD",
},
},
{
"path": downloaded_csv_paths[1],
"metadata": {
"data_type": "sales",
"year": 2024,
"region": "europe",
"currency": "EUR",
},
},
{
"path": downloaded_csv_paths[2],
"metadata": {
"data_type": "survey",
"survey_type": "customer_satisfaction",
"year": 2024,
"target_demographic": "mixed",
},
},
{
"path": downloaded_csv_paths[3],
"metadata": {
"data_type": "financial",
"sector": "technology",
"year": 2024,
"report_type": "quarterly_earnings",
},
},
],
)
# Step 2: Query the knowledge base with different filter combinations
# ------------------------------------------------------------------------------
na_sales = Agent(
knowledge=knowledge,
search_knowledge=True,
)
na_sales.print_response(
"Revenue performance and top selling products",
knowledge_filters={"region": "north_america", "data_type": "sales"},
markdown=True,
)
Install libraries
pip install -U agno openai lancedb
Set environment variables
export OPENAI_API_KEY=xxx
Run the example
python cookbook/knowledge/filters/filtering.py