Qdrant Vector Database

Use Qdrant as a vector database for your Knowledge Base.

Setup

uv pip install -U qdrant-client typer rich pypdf openai agno

Follow the instructions in the Qdrant Setup Guide to install Qdrant locally. Get API keys from the Qdrant API Keys guide.

The example uses OpenAI for embeddings and the agent model, so set your API key along with your Qdrant connection details:

export QDRANT_URL=http://localhost:6333
export QDRANT_API_KEY=xxx # only required for Qdrant Cloud
export OPENAI_API_KEY=xxx

Example

agent_with_knowledge.py
import os
import typer
from rich.prompt import Prompt

from agno.agent import Agent
from agno.knowledge.knowledge import Knowledge
from agno.vectordb.qdrant import Qdrant

api_key = os.getenv("QDRANT_API_KEY")
qdrant_url = os.getenv("QDRANT_URL")
collection_name = "thai-recipe-index"

vector_db = Qdrant(
    collection=collection_name,
    url=qdrant_url,
    api_key=api_key,
)

knowledge_base = Knowledge(
    vector_db=vector_db,
)

def qdrant_agent(user: str = "user"):
    agent = Agent(
        knowledge=knowledge_base,
        debug_mode=True,
    )

    while True:
        message = Prompt.ask(f"[bold] :sunglasses: {user} [/bold]")
        if message in ("exit", "bye"):
            break
        agent.print_response(message)

if __name__ == "__main__":
    knowledge_base.insert(
        url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"
    )

    typer.run(qdrant_agent)

Async Support ⚡

Qdrant also supports asynchronous operations with ainsert() and aprint_response().

async_qdrant_db.py
import asyncio

from agno.agent import Agent
from agno.knowledge.knowledge import Knowledge
from agno.vectordb.qdrant import Qdrant

COLLECTION_NAME = "thai-recipes"

# Initialize Qdrant with local instance
vector_db = Qdrant(
    collection=COLLECTION_NAME,
    url="http://localhost:6333"
)

# Create knowledge base
knowledge_base = Knowledge(
    vector_db=vector_db,
)

agent = Agent(knowledge=knowledge_base)

if __name__ == "__main__":
    # Load knowledge base asynchronously
    asyncio.run(knowledge_base.ainsert(
            url="https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"
        )
    )

    # Create and use the agent asynchronously
    asyncio.run(agent.aprint_response("How to make Tom Kha Gai", markdown=True))

Using ainsert() and aprint_response() with asyncio provides non-blocking operations, making your application more responsive under load.

Qdrant Params

NameTypeDefaultDescription
collectionstr-Name of the Qdrant collection
embedderEmbedderOpenAIEmbedder()Embedder for embedding the document contents
distanceDistanceDistance.cosineDistance metric for similarity search
locationOptional[str]NoneLocation of the Qdrant database
urlOptional[str]NoneURL of the Qdrant server
portOptional[int]6333Port number for the Qdrant server
grpc_portint6334gRPC port number for the Qdrant server
prefer_grpcboolFalseWhether to prefer gRPC over HTTP
httpsOptional[bool]NoneWhether to use HTTPS
api_keyOptional[str]NoneAPI key for authentication
prefixOptional[str]NonePrefix for the Qdrant API
timeoutOptional[float]NoneTimeout for Qdrant operations
hostOptional[str]NoneHost address for the Qdrant server
pathOptional[str]NonePath to the Qdrant database
fastembed_kwargsOptional[dict]NoneAdditional kwargs passed to SparseTextEmbedding.
search_typeSearchTypeSearchType.vectorSelect vector or hybrid search.
dense_vector_namestr"dense"Name of the dense vector in the collection.
sparse_vector_namestr"sparse"Name of the sparse vector in the collection.
hybrid_fusion_strategymodels.Fusionmodels.Fusion.RRFFusion strategy for hybrid results.
rerankerOptional[Reranker]NoneRerank retrieved documents.
nameOptional[str]NoneName of the vector database.
descriptionOptional[str]NoneDescription of the vector database.
idOptional[str]NoneOptional vector database ID.
**kwargsAnyAdditional Qdrant client arguments.