设置
请遵循 Qdrant 设置指南 中的说明在本地安装 Qdrant。以下是获取 API 密钥的指南:Qdrant API 密钥。示例
agent_with_knowledge.py
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__":
# 首次运行时注释掉此行
knowledge_base.load(recreate=True, upsert=True)
typer.run(qdrant_agent)
异步支持 ⚡
Qdrant 也支持异步操作,能够实现并发并带来更好的性能。
async_qdrant_db.py
import asyncio
from agno.agent import Agent
from agno.knowledge.pdf_url import PDFUrlKnowledgeBase
from agno.vectordb.qdrant import Qdrant
COLLECTION_NAME = "thai-recipes"
# 使用本地实例初始化 Qdrant
vector_db = Qdrant(
collection=COLLECTION_NAME,
url="http://localhost:6333"
)
# 创建知识库
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__":
# 异步加载知识库
asyncio.run(knowledge_base.aload(recreate=False)) # 首次运行时注释掉此行
# 异步创建和使用代理
asyncio.run(agent.aprint_response("How to make Tom Kha Gai", markdown=True))
使用
aload() 和 aprint_response() 配合 asyncio 可实现非阻塞操作,使您的应用程序在负载下更具响应性。Qdrant 参数
| 名称 | 类型 | 默认 | 描述 |
|---|---|---|---|
collection | str | - | Qdrant 集合的名称 |
embedder | Embedder | OpenAIEmbedder() | 用于嵌入文档内容的 Embedder |
distance | Distance | Distance.cosine | 用于相似性搜索的距离度量 |
location | Optional[str] | None | Qdrant 数据库的位置 |
url | Optional[str] | None | Qdrant 服务器的 URL |
port | Optional[int] | 6333 | Qdrant 服务器的端口号 |
grpc_port | int | 6334 | Qdrant 服务器的 gRPC 端口号 |
prefer_grpc | bool | False | 是否优先使用 gRPC 而非 HTTP |
https | Optional[bool] | None | 是否使用 HTTPS |
api_key | Optional[str] | None | 用于身份验证的 API 密钥 |
prefix | Optional[str] | None | Qdrant API 的前缀 |
timeout | Optional[float] | None | Qdrant 操作的超时时间 |
host | Optional[str] | None | Qdrant 服务器的主机地址 |
path | Optional[str] | None | Qdrant 数据库的路径 |
开发者资源
- 查看 Cookbook (同步)
- 查看 Cookbook (异步)