Documentation Index
Fetch the complete documentation index at: https://docs-v1.agno.com/llms.txt
Use this file to discover all available pages before exploring further.
Setup
Follow the instructions in the Qdrant Setup Guide to install Qdrant locally. Here is a guide to get API keys: Qdrant API Keys.
Example
import os
import typer
from typing import Optional
from rich.prompt import Prompt
from agno.agent import Agent
from agno.knowledge.pdf_url import PDFUrlKnowledgeBase
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 = PDFUrlKnowledgeBase(
urls=["https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"],
vector_db=vector_db,
)
def qdrant_agent(user: str = "user"):
run_id: Optional[str] = None
agent = Agent(
run_id=run_id,
user_id=user,
knowledge=knowledge_base,
tool_calls=True,
use_tools=True,
show_tool_calls=True,
debug_mode=True,
)
if run_id is None:
run_id = agent.run_id
print(f"Started Run: {run_id}\n")
else:
print(f"Continuing Run: {run_id}\n")
while True:
message = Prompt.ask(f"[bold] :sunglasses: {user} [/bold]")
if message in ("exit", "bye"):
break
agent.print_response(message)
if __name__ == "__main__":
# Comment out after first run
knowledge_base.load(recreate=True, upsert=True)
typer.run(qdrant_agent)
Async Support ⚡
Qdrant also supports asynchronous operations, enabling concurrency and leading to better performance.
import asyncio
from agno.agent import Agent
from agno.knowledge.pdf_url import PDFUrlKnowledgeBase
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 = PDFUrlKnowledgeBase(
urls=["https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"],
vector_db=vector_db,
)
agent = Agent(knowledge=knowledge_base, show_tool_calls=True)
if __name__ == "__main__":
# Load knowledge base asynchronously
asyncio.run(knowledge_base.aload(recreate=False)) # Comment out after first run
# Create and use the agent asynchronously
asyncio.run(agent.aprint_response("How to make Tom Kha Gai", markdown=True))
Using aload() and aprint_response() with asyncio provides non-blocking operations, making your application more responsive under load.
Qdrant Params
| Name | Type | Default | Description |
|---|
collection | str | - | Name of the Qdrant collection |
embedder | Embedder | OpenAIEmbedder() | Embedder for embedding the document contents |
distance | Distance | Distance.cosine | Distance metric for similarity search |
location | Optional[str] | None | Location of the Qdrant database |
url | Optional[str] | None | URL of the Qdrant server |
port | Optional[int] | 6333 | Port number for the Qdrant server |
grpc_port | int | 6334 | gRPC port number for the Qdrant server |
prefer_grpc | bool | False | Whether to prefer gRPC over HTTP |
https | Optional[bool] | None | Whether to use HTTPS |
api_key | Optional[str] | None | API key for authentication |
prefix | Optional[str] | None | Prefix for the Qdrant API |
timeout | Optional[float] | None | Timeout for Qdrant operations |
host | Optional[str] | None | Host address for the Qdrant server |
path | Optional[str] | None | Path to the Qdrant database |
Developer Resources