Skip to main content
Pal and Dash both use retrieval to ground answers, with different content but the same underlying primitive.
AgentWhat it retrievesWhy retrieval
PalWiki articles, meeting notes, voice guides, raw research dumpsThe user’s personal knowledge accumulates over time. Search beats stuffing it all in context.
DashTable descriptions, validated SQL queries, business rulesThe Analyst grounds every query in known patterns. Hallucinated SQL is the failure mode RAG prevents.

Pal: knowledge that compounds

Pal stores everything the user feeds it (URLs ingested, articles compiled, meetings) in a vector-indexed wiki. The Navigator agent searches it before answering:
from agno.knowledge import Knowledge
from agno.vector_db.pgvector import PgVector

pal_knowledge = Knowledge(
    vector_db=PgVector(
        table_name="pal_knowledge",
        db_url=DB_URL,
        search_type="hybrid",  # semantic + keyword
    ),
)

navigator = Agent(
    knowledge=pal_knowledge,
    add_knowledge_to_context=True,
    search_knowledge=True,
)
search_type="hybrid" runs both vector similarity and BM25 keyword search, then merges results. Catches both “what’s the same idea worded differently?” (semantic) and “find the doc that mentions this exact term” (keyword).

Dash: SQL grounded in known patterns

Dash holds three kinds of knowledge under one Knowledge instance:
KnowledgePurpose
Table metadataColumn meanings, value enums, gotchas
Validated query patternsTested SQL the Analyst can adapt
Business rules”MRR excludes trials”, “active means ended_at IS NULL
When a user asks “what’s our MRR trend?”, the Analyst retrieves matching table descriptions, similar past queries, and the MRR definition. The model writes SQL with all of that in context. Hallucination rate drops.

Loading knowledge

Knowledge content gets loaded once at boot or via a script:
# Pal: voice guides, system docs
python -m agents.pal.scripts.load_knowledge

# Dash: table metadata, queries, business rules
python -m agents.dash.scripts.load_knowledge
Re-running with --recreate rebuilds from scratch. Without the flag, content gets upserted by primary key.

How retrieval gets injected

When add_knowledge_to_context=True, AgentOS:
  1. Takes the user’s message.
  2. Runs hybrid search against the Knowledge vector DB.
  3. Pulls top-k chunks with metadata (configurable).
  4. Injects them into the system prompt under a “Relevant context” section.
  5. The model answers with both the message and the retrieved context.
If search_knowledge=True is also set, the agent gets a search_knowledge_base(query) tool and can run additional searches mid-run when it needs to.

See it in action

Try in chatWhat happens
Pal: “what do I know about RAG techniques?”Navigator searches the wiki, returns curated answer with citations.
Pal: “ingest https://example.com/articleResearcher fetches, saves to raw/, Compiler eventually folds into wiki.
Dash: “what’s our MRR trend?”Analyst retrieves MRR definition + matching query, writes grounded SQL.
Dash: “why is churn so high?”Analyst retrieves churn definitions, finds matching query patterns, executes, interprets.

When hybrid search isn’t enough

For very large knowledge bases, add reranking. PgVector + a reranker (Cohere, BGE) tightens the top-k:
from agno.vector_db.pgvector import PgVector
from agno.rerank.cohere import CohereReranker

pal_knowledge = Knowledge(
    vector_db=PgVector(
        table_name="pal_knowledge",
        db_url=DB_URL,
        search_type="hybrid",
        reranker=CohereReranker(model="rerank-3.5"),
    ),
)
Two-stage retrieval (hybrid then rerank) is the standard production setup. The hybrid stage casts a wide net (top-50), the reranker prunes to the best top-10. Source: agents/pal/, agents/dash/

Next

Knowledge →