diff --git a/数据库优化工程师.py b/数据库优化工程师.py index cf4c209..9d65a6f 100644 --- a/数据库优化工程师.py +++ b/数据库优化工程师.py @@ -24,55 +24,9 @@ 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 - -@dataclass -class DatabaseOptimizerConfig: - """数据库优化器配置""" - - pdf_path: str = "D:\\Sources\\DONGJAK-TOOLS\\pdfs\\Database Fundamentals.pdf" - db_connection: str = "postgresql://postgres:postgres@192.168.1.7:5432/postgres" - model_id: str = "deepseek-chat" - vector_db_path: str = "tmp/lancedb" - - -class DatabaseOptimizer: - """PostgreSQL 数据库优化引擎""" - - def __init__(self, config: Optional[DatabaseOptimizerConfig] = None): - self.config = config or DatabaseOptimizerConfig() - self._load_environment() - self.knowledge_base = self._setup_knowledge_base() - self.postgres_tools = self._setup_postgres_tools() - self.agent = self._create_agent() - - def _setup_postgres_tools(self) -> MCPTools: - """设置 PostgreSQL 工具""" - server_params = StdioServerParameters( - command="cmd", - args=[ - "/c", - "npx", - "-y", - "@modelcontextprotocol/server-postgres", - self.config.db_connection, - ], - env={}, - ) - # Create a client session to connect to the MCP server - with stdio_client(server_params) as (read, write): - with ClientSession(read, write) as session: - agent = create_filesystem_agent(session) - - # Run the agent - agent.print_response(message, stream=True) - return MCPTools(server_params=server_params) - - def analyze_database(self, query: str, stream: bool = True): - """分析数据库""" - with self.postgres_tools: - self.agent.print_response(query, stream=stream) - + async def main(): load_dotenv() @@ -86,9 +40,20 @@ async def main(): 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], + sources=[local_pdf_kb, website_kb], vector_db=LanceDb( table_name="combined_documents", uri="tmp/lancedb", @@ -98,31 +63,45 @@ async def main(): ) knowledge_base.load() - server_params = StdioServerParameters( + postgres_server_params = StdioServerParameters( command="cmd", args=[ "/c", "npx", "-y", "@modelcontextprotocol/server-postgres", - "postgresql://postgres:postgres@192.168.1.7:5432/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 stdio_client(server_params) as (read, write): - async with ClientSession(read, write) as session: - postgres_tools = MCPTools(session=session) - await postgres_tools.initialize() - agent = Agent( - model=DeepSeek(id="deepseek-chat"), - markdown=True, - knowledge=knowledge_base, - search_knowledge=True, - show_tool_calls=True, - tools=[postgres_tools], - ) - await agent.aprint_response("看下aq这个数据库", stream=True) + 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__":