From agno-framework
Build knowledge bases for Agno agents using vector databases, embedders, and document readers. Covers ChromaDB, PgVector, LanceDB, document loading, chunking strategies, and hybrid search. Trigger this skill when: importing agno.knowledge, creating Knowledge instances, adding documents to agents, configuring vector databases, or asking "how do I add a knowledge base?"
How this skill is triggered — by the user, by Claude, or both
Slash command
/agno-framework:agno-knowledgeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use `agno.knowledge.knowledge.Knowledge` with a vector database to give agents searchable document collections. Install with `pip install agno`.
Use agno.knowledge.knowledge.Knowledge with a vector database to give agents searchable document collections. Install with pip install agno.
from agno.agent import Agent
from agno.knowledge.knowledge import Knowledge
from agno.knowledge.embedder.google import GeminiEmbedder
from agno.vectordb.chroma import ChromaDb
from agno.vectordb.search import SearchType
knowledge = Knowledge(
vector_db=ChromaDb(
collection="docs",
path="tmp/chromadb",
persistent_client=True,
search_type=SearchType.hybrid,
embedder=GeminiEmbedder(id="gemini-embedding-001"),
),
)
# Load content
knowledge.insert(url="https://docs.agno.com/introduction.md", skip_if_exists=True)
agent = Agent(
model="openai:gpt-4o",
knowledge=knowledge,
search_knowledge=True,
markdown=True,
)
agent.print_response("What is Agno?", stream=True)
Knowledge(
vector_db=ChromaDb(...), # Required: vector database backend
max_results=5, # Max documents returned per search
contents_db=SqliteDb(...), # Optional: track loaded content
)
from agno.vectordb.chroma import ChromaDb
from agno.knowledge.embedder.google import GeminiEmbedder
from agno.vectordb.search import SearchType
vector_db = ChromaDb(
collection="my_docs",
path="tmp/chromadb",
persistent_client=True,
search_type=SearchType.hybrid,
embedder=GeminiEmbedder(id="gemini-embedding-001"),
)
from agno.vectordb.pgvector import PgVector
from agno.knowledge.embedder.openai import OpenAIEmbedder
vector_db = PgVector(
table_name="documents",
db_url="postgresql+psycopg://user:pass@localhost:5432/mydb",
search_type=SearchType.hybrid,
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
)
from agno.vectordb.lancedb import LanceDb
from agno.knowledge.embedder.google import GeminiEmbedder
vector_db = LanceDb(
uri="tmp/lancedb",
table_name="documents",
embedder=GeminiEmbedder(id="gemini-embedding-001"),
)
# Google
from agno.knowledge.embedder.google import GeminiEmbedder
embedder = GeminiEmbedder(id="gemini-embedding-001")
# OpenAI
from agno.knowledge.embedder.openai import OpenAIEmbedder
embedder = OpenAIEmbedder(id="text-embedding-3-small")
# Ollama (local)
from agno.knowledge.embedder.ollama import OllamaEmbedder
embedder = OllamaEmbedder(id="nomic-embed-text")
knowledge.insert(url="https://example.com/doc.md", skip_if_exists=True)
from agno.knowledge.reader.pdf import PDFReader
from agno.knowledge.reader.docx import DocxReader
from agno.knowledge.reader.text import TextReader
# PDF
knowledge.insert(
path="docs/report.pdf",
reader=PDFReader(),
skip_if_exists=True,
)
# DOCX
knowledge.insert(
path="docs/spec.docx",
reader=DocxReader(),
skip_if_exists=True,
)
# Plain text / markdown
knowledge.insert(
path="docs/readme.md",
reader=TextReader(),
skip_if_exists=True,
)
knowledge.insert(
path="docs/",
reader=PDFReader(),
skip_if_exists=True,
)
from agno.vectordb.search import SearchType
# Semantic similarity (default)
SearchType.vector
# Keyword-based
SearchType.keyword
# Combined semantic + keyword
SearchType.hybrid
Control how documents are split into searchable chunks:
from agno.knowledge.chunking.fixed import FixedChunking
from agno.knowledge.chunking.semantic import SemanticChunking
# Fixed-size chunks
knowledge = Knowledge(
vector_db=vector_db,
chunking=FixedChunking(chunk_size=500, overlap=50),
)
# Semantic chunking (splits at natural boundaries)
knowledge = Knowledge(
vector_db=vector_db,
chunking=SemanticChunking(),
)
Track which documents have been loaded to avoid re-processing:
from agno.db.sqlite import SqliteDb
db = SqliteDb(db_file="tmp/agents.db")
knowledge = Knowledge(
vector_db=vector_db,
contents_db=db,
max_results=5,
)
agent = Agent(
model="openai:gpt-4o",
knowledge=knowledge,
search_knowledge=True, # Agent searches automatically
# OR
# search_knowledge=False, # Agent uses knowledge tools manually
markdown=True,
)
Give agents explicit control over knowledge search:
from agno.tools.knowledge import KnowledgeTools
agent = Agent(
model="openai:gpt-4o",
knowledge=knowledge,
tools=[KnowledgeTools()],
search_knowledge=False, # Let the agent decide when to search
)
skip_if_exists=True on insert — you'll re-index documents on every runSearchType.keyword alone — hybrid gives better results in most casesFor advanced knowledge patterns, custom retrievers, and cloud storage, read references/api-patterns.md.
npx claudepluginhub ajshedivy/agno-cookbook --plugin agno-frameworkBuild RAG systems for LLM apps using vector databases, embeddings, and retrieval strategies. Use for document Q&A, grounded chatbots, and semantic search.
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.