Files
agno-notebooks/数据库优化工程师.py
cruld 356041051c feat(main): 增加PDF知识库和MCP工具集成
- 创建PDF知识库以从本地文件加载数据并支持向量搜索
- 集成MCP工具以与PostgreSQL数据库进行交互
- 通过组合知识库实现多源知识集成
2025-03-31 00:56:36 +08:00

97 lines
3.4 KiB
Python

if __name__ == "__main__":
"""
## 背景
我有一个`postgresql`数据库,现在需要一个专业的数据库优化工程师,来帮我看下设计是否合理,以及如何优化.
## 目标
这个数据库优化工程师智能体应该具备以下能力:
- [ ] 使用`claude3.7`作为模型(相当于拥有一个聪明的大脑,总是能够做出正确的决策)
- [ ] 精通关系型数据库系统的理论知识以及`postgresql`的实现细节(知识库)
- [ ] 能够使用`postgresql mcp server`来分析现有数据库设计(行为)
"""
# 然后在notebook中加载
from dotenv import load_dotenv
# 加载当前目录下的.env文件
load_dotenv()
from agno.agent import Agent, RunResponse # noqa
from agno.models.deepseek import DeepSeek
from agno.knowledge.pdf_url import PDFUrlKnowledgeBase
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 import StdioServerParameters
# Create a knowledge base of PDFs from URLs
# pdf_url_kb = PDFUrlKnowledgeBase(
# urls=["https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"],
# # Use LanceDB as the vector database and store embeddings in the `recipes` table
# vector_db=LanceDb(
# table_name="recipes",
# uri="tmp/lancedb",
# search_type=SearchType.vector,
# embedder=OpenAIEmbedder(id="text-embedding-3-small"),
# ),
# )
# Create Local PDF knowledge base
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"),
),
)
# Combine knowledge bases
knowledge_base = CombinedKnowledgeBase(
sources=[
local_pdf_kb,
],
vector_db=LanceDb(
table_name="combined_documents",
uri="tmp/lancedb",
search_type=SearchType.vector,
embedder=OpenAIEmbedder(id="text-embedding-3-small"),
),
)
# Load the knowledge base: Comment after first run as the knowledge base is already loaded
knowledge_base.load()
server_params = StdioServerParameters(
command="cmd", # 或 "uvx",取决于你的安装方式
args=[
"/c",
"npx",
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://postgres:postgres@192.168.1.7:5432/postgres",
],
env={}, # 可选的环境变量
)
with MCPTools(server_params=server_params) as postgres_server:
# 使用mcp_tools
agent = Agent(
model=DeepSeek(id="deepseek-chat"),
markdown=True,
knowledge=knowledge_base,
search_knowledge=True,
show_tool_calls=True,
tools=[postgres_server],
)
# Get the response in a variable
# run: RunResponse = agent.run("Share a 2 sentence horror story")
# print(run.content)
# Print the response in the terminal
agent.print_response("看下aq这个数据库", stream=True)