Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.agno.com/llms.txt

Use this file to discover all available pages before exploring further.

When multiple Knowledge instances share the same vector database, searches return results from all instances by default. Set isolate_vector_search=True to scope each instance’s searches to its own data.
from agno.knowledge.knowledge import Knowledge
from agno.vectordb.pgvector import PgVector

vector_db = PgVector(
    table_name="shared_vectors",
    db_url="postgresql+psycopg://ai:ai@localhost:5532/ai",
)

# Only returns results from documents this instance inserted
knowledge = Knowledge(
    name="support-docs",
    vector_db=vector_db,
    isolate_vector_search=True,
)

How It Works

When isolate_vector_search=True:
  1. Insert: Each document gets linked_to metadata set to the Knowledge instance’s name.
  2. Search: A linked_to filter is automatically injected, so only matching documents are returned.
When isolate_vector_search=False (default):
  1. Insert: No linked_to metadata is added.
  2. Search: No linked_to filter is applied. Searches return results from all documents in the vector database.

When to Use

Scenarioisolate_vector_search
Single Knowledge instanceFalse (default)
Multiple instances, each with its own vector databaseFalse (default)
Multiple instances sharing one vector database, need isolationTrue

Example: Shared Database, Isolated Searches

from agno.agent import Agent
from agno.knowledge.knowledge import Knowledge
from agno.vectordb.pgvector import PgVector

vector_db = PgVector(
    table_name="shared_vectors",
    db_url="postgresql+psycopg://ai:ai@localhost:5532/ai",
)

# Two knowledge instances sharing the same vector database
hr_knowledge = Knowledge(
    name="hr-docs",
    vector_db=vector_db,
    isolate_vector_search=True,
)

engineering_knowledge = Knowledge(
    name="engineering-docs",
    vector_db=vector_db,
    isolate_vector_search=True,
)

# Insert into each instance
hr_knowledge.insert(path="hr-policies/")
engineering_knowledge.insert(path="engineering-docs/")

# This agent only searches HR documents
hr_agent = Agent(knowledge=hr_knowledge, search_knowledge=True)

# This agent only searches engineering documents
eng_agent = Agent(knowledge=engineering_knowledge, search_knowledge=True)

Backwards Compatibility

isolate_vector_search defaults to False. Existing Knowledge instances behave exactly as before.

Existing data does not have linked_to metadata

Documents indexed before this flag existed do not have linked_to in their vector database metadata. When you enable isolate_vector_search=True, searches filter for linked_to=<name>. Documents without this metadata field will not match and will be invisible to the isolated search.
Enabling isolate_vector_search=True with vector databases that don’t have existing linked_to metadata will cause those documents to disappear from search results. You must re-index or manually update the metadata to restore them.

Combining with Manual Filters

When isolate_vector_search=True, the linked_to filter is automatically merged with any filters you pass, regardless of filter format:
# Dict-based filters: linked_to is merged automatically
results = hr_knowledge.search(
    query="vacation policy",
    filters={"department": "legal"},
)
# Searches for: linked_to="hr-docs" AND department="legal"
# List-based filters (FilterExpr): linked_to is also injected automatically
from agno.filters import EQ

results = hr_knowledge.search(
    query="vacation policy",
    filters=[EQ("department", "legal")],
)
# Searches for: linked_to="hr-docs" AND department="legal"

Instance Uniqueness

Each Knowledge instance must have a unique combination of name, database, and table. Two instances with the same name pointing to the same contents database and table will raise a ValueError at startup.
from agno.db.postgres import PostgresDb
from agno.knowledge.knowledge import Knowledge
from agno.vectordb.pgvector import PgVector

contents_db = PostgresDb(
    db_url="postgresql+psycopg://ai:ai@localhost:5532/ai",
    knowledge_table="knowledge_contents",
)

vector_db = PgVector(
    table_name="shared_vectors",
    db_url="postgresql+psycopg://ai:ai@localhost:5532/ai",
)

# These two instances will conflict because they share the same
# name, contents_db, and table
knowledge_a = Knowledge(
    name="my-docs",
    contents_db=contents_db,
    vector_db=vector_db,
)

knowledge_b = Knowledge(
    name="my-docs",          # same name
    contents_db=contents_db,  # same database and table
    vector_db=vector_db,
)
# ValueError: Duplicate knowledge instances detected
To fix this, give each instance a unique name, or point them to different contents databases or tables.

Requirements

  • The Knowledge instance must have a name set. Without a name, no linked_to metadata is added and no filter is applied, even when isolate_vector_search=True.
  • The vector database must support metadata filtering. See Filtering for supported databases.

Next Steps

TaskGuide
Filter by other metadataFiltering
Set up a vector databaseVector Databases
Track content metadataContents DB