poc-v1/src/sql_optimizer_team/agents/sql_analyst_agent.py

40 lines
1.9 KiB
Python

from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from sql_optimizer_team.tools.engine.model_selector import get_model
from sql_optimizer_team.tools.core_tools import explain_query_core
from sql_optimizer_team.agents.prompts import AgentPromptTemplates
from sql_optimizer_team.tools.prompt_tools import supported_databases
from sql_optimizer_team.tools.sql_tools import load_sql_from_file, ensure_non_empty
import os
base_model = get_model()
_db_path = os.getenv("SQL_OPT_TEAM_DB_FILE", "tmp/sql_optimizer_team.db")
_debug_mode = os.getenv("SQL_OPT_TEAM_DEBUG_MODE", "false").strip().lower() in {"1", "true", "yes", "on"}
db = SqliteDb(db_file=_db_path)
sql_analyst_agent = Agent(
name="SQL Analyst",
role=(
"Você recebe a SQL original e o banco alvo e produz a descrição natural detalhada. "
"A saída deve seguir exatamente a prompt original (SQL → natural) do projeto oracle-sql-query-optimizer."
),
model=base_model,
tools=[explain_query_core, load_sql_from_file, ensure_non_empty, supported_databases],
markdown=True,
add_history_to_context=True,
db=db,
enable_agentic_memory=True,
enable_user_memories=True,
debug_mode=_debug_mode,
instructions=[
"- Solicite banco e SQL se não estiverem presentes. Bancos suportados: use supported_databases().",
"- Se o usuário fornecer um caminho de arquivo, use load_sql_from_file().",
"- Preferência: use explain_query_core(database_type, sql) para gerar a explicação via core de negócio.",
"- Use a template oficial abaixo para estruturar a explicação (SQL → natural).",
AgentPromptTemplates.SQL_TO_NATURAL.template.strip(),
"- Entregue apenas a explicação natural estruturada conforme a prompt; não reescreva a SQL.",
"- Identifique problemas críticos de performance conforme a prompt.",
],
)