This example demonstrates how to implement RAG using LanceDB vector database with Ollama embeddings and SQLite for agent data storage, providing a complete local setup for document retrieval.
from agno.agent import Agentfrom agno.db.sqlite.sqlite import SqliteDbfrom agno.knowledge.embedder.ollama import OllamaEmbedderfrom agno.knowledge.knowledge import Knowledgefrom agno.models.ollama import Ollamafrom agno.vectordb.lancedb import LanceDb# Define the database URL where the vector database will be storeddb_url = "/tmp/lancedb"# Configure the language modelmodel = Ollama(id="llama3.1:8b")# Create Ollama embedderembedder = OllamaEmbedder(id="nomic-embed-text", dimensions=768)# Create the vector databasevector_db = LanceDb( table_name="recipes", # Table name in the vector database uri=db_url, # Location to initiate/create the vector database embedder=embedder, # Without using this, it will use OpenAIChat embeddings by default)knowledge = Knowledge( vector_db=vector_db,)knowledge.add_content_sync( name="Recipes", url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf")# Set up SQL storage for the agent's datadb = SqliteDb(db_file="data.db")# Initialize the Agent with various configurations including the knowledge base and storageagent = Agent( session_id="session_id", # use any unique identifier to identify the run user_id="user", # user identifier to identify the user model=model, knowledge=knowledge, db=db,)# Use the agent to generate and print a response to a query, formatted in Markdownagent.print_response( "What is the first step of making Gluai Buat Chi from the knowledge base?", markdown=True,)