- 移除不必要的DatabaseOptimizer类及其配置 - 添加WebsiteKnowledgeBase以支持网页知识库 - 优化MCPTools的使用,合并多个工具的初始化
109 lines
3.3 KiB
Python
109 lines
3.3 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
PostgreSQL 数据库优化工程师智能体
|
|
|
|
功能:
|
|
- 使用 DeepSeek 模型进行智能分析
|
|
- 集成 PostgreSQL MCP 服务器工具
|
|
- 加载数据库知识库
|
|
- 提供数据库优化建议
|
|
"""
|
|
|
|
import asyncio
|
|
import os
|
|
from typing import Optional
|
|
from dataclasses import dataclass
|
|
from dotenv import load_dotenv
|
|
|
|
from agno.agent import Agent
|
|
from agno.models.deepseek import DeepSeek
|
|
from agno.knowledge.pdf import PDFKnowledgeBase
|
|
from agno.vectordb.lancedb import LanceDb, SearchType
|
|
from agno.embedder.openai import OpenAIEmbedder
|
|
from agno.knowledge.combined import CombinedKnowledgeBase
|
|
from agno.tools.mcp import MCPTools
|
|
from mcp.client.stdio import stdio_client
|
|
from mcp import ClientSession, StdioServerParameters
|
|
from agno.knowledge.website import WebsiteKnowledgeBase
|
|
|
|
|
|
|
|
async def main():
|
|
load_dotenv()
|
|
"""设置知识库"""
|
|
local_pdf_kb = PDFKnowledgeBase(
|
|
path="D:\\Sources\\DONGJAK-TOOLS\\pdfs\\Database Fundamentals.pdf",
|
|
vector_db=LanceDb(
|
|
table_name="database_fundamentals",
|
|
uri="tmp/lancedb",
|
|
search_type=SearchType.vector,
|
|
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
|
|
),
|
|
)
|
|
# Create Website knowledge base
|
|
website_kb = WebsiteKnowledgeBase(
|
|
urls=["https://www.lucidchart.com/blog/database-design-best-practices"],
|
|
max_links=10,
|
|
vector_db=LanceDb(
|
|
table_name="website_documents",
|
|
uri="tmp/lancedb",
|
|
search_type=SearchType.vector,
|
|
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
|
|
),
|
|
)
|
|
|
|
knowledge_base = CombinedKnowledgeBase(
|
|
sources=[local_pdf_kb, website_kb],
|
|
vector_db=LanceDb(
|
|
table_name="combined_documents",
|
|
uri="tmp/lancedb",
|
|
search_type=SearchType.vector,
|
|
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
|
|
),
|
|
)
|
|
knowledge_base.load()
|
|
|
|
postgres_server_params = StdioServerParameters(
|
|
command="cmd",
|
|
args=[
|
|
"/c",
|
|
"npx",
|
|
"-y",
|
|
"@modelcontextprotocol/server-postgres",
|
|
"postgresql://postgres:postgres@192.168.1.7:5432/aq",
|
|
],
|
|
env={},
|
|
)
|
|
|
|
searxng_server_params = StdioServerParameters(
|
|
command="cmd",
|
|
args=[
|
|
"/c",
|
|
"npx",
|
|
"-y",
|
|
"https://github.com/ihor-sokoliuk/mcp-searxng.git",
|
|
],
|
|
env={
|
|
"SEARXNG_URL": "https://searchxng.ailoveworld.cn",
|
|
},
|
|
)
|
|
# Create a client session to connect to the MCP server
|
|
async with (
|
|
MCPTools(server_params=postgres_server_params) as postgres_tools,
|
|
MCPTools(server_params=searxng_server_params) as searxng_tools,
|
|
):
|
|
agent = Agent(
|
|
model=DeepSeek(id="deepseek-chat"),
|
|
markdown=True,
|
|
knowledge=knowledge_base,
|
|
search_knowledge=True,
|
|
show_tool_calls=True,
|
|
tools=[postgres_tools, searxng_tools],
|
|
)
|
|
await agent.aprint_response("帮我分析一下aq.public数据库,并给出优化建议", stream=True)
|
|
# await agent.aprint_response("阅读下 https://www.lucidchart.com/blog/database-design-best-practices 这篇文章", stream=True)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|