diff --git a/ai_agent.py b/ai_agent.py index b18db22..7e2ecf4 100644 --- a/ai_agent.py +++ b/ai_agent.py @@ -45,10 +45,11 @@ Sua missão é ser o SysAdmin de elite do Marcos. Você tem acesso root. ### REGRAS: 1. Responda em PORTUGUÊS (Brasil). -2. Para agir, use: [CMD] comando [/CMD]. Rode UM comando por vez. -3. Seus comandos devem ser diretos (docker, git, ls, rm, mkdir). -4. Após o comando, você receberá a saída. O seu objetivo é resolver a solicitação do usuário. -5. Quando terminar, sua resposta FINAL deve ter: +2. Para agir, use o formato: [TOOL:nome_da_ferramenta] argumento [/TOOL]. Rode UMA ferramenta por vez. +3. Para comandos de terminal, use a ferramenta 'run_bash_command'. Exemplo: [TOOL:run_bash_command] ls -la [/TOOL]. +4. Para ler arquivos do host, use 'read_vps_file'. Exemplo: [TOOL:read_vps_file] /etc/hosts [/TOOL]. +5. Após usar a ferramenta, você receberá a saída. O seu objetivo é resolver a solicitação do usuário. +6. Quando terminar, sua resposta FINAL deve ter: - Um resumo técnico rápido. - Uma seção entre tags ... com uma tabela Markdown limpa ou resumo em tópicos (Nome: Valor) para o usuário leigo. @@ -72,17 +73,25 @@ Relatório: Coletei os dados solicitados. full_prompt = system_prompt + history response = get_llm_response(full_prompt, provider, cfg) - # Procura por comandos na resposta - match = re.search(r"\[CMD\](.*?)\[/CMD\]", response, re.IGNORECASE | re.DOTALL) + # Procura por chamadas de ferramentas na resposta + match = re.search(r"\[TOOL:(.*?)\](.*?)\[/TOOL\]", response, re.IGNORECASE | re.DOTALL) if match: - cmd = match.group(1).strip() - # Executa a tool (por enquanto focada em bash que é a mais poderosa) - print(f"Agente executando: {cmd}") - observation = AVAILABLE_TOOLS["run_bash_command"]["func"](cmd) + tool_name = match.group(1).strip() + arg = match.group(2).strip() + + print(f"Agente usando ferramenta: {tool_name} -> {arg}") + + if tool_name in AVAILABLE_TOOLS: + if tool_name in ["get_system_health", "get_docker_stats"]: + observation = AVAILABLE_TOOLS[tool_name]["func"]() + else: + observation = AVAILABLE_TOOLS[tool_name]["func"](arg) + else: + observation = f"Erro: Ferramenta '{tool_name}' não encontrada. Use as ferramentas listadas ou 'run_bash_command'." # Adiciona ao histórico para a IA ler na próxima rodada - history += f"\nAgente (Pensamento/Ação): {response}\nSISTEMA (Saída do Terminal): {observation}\n" + history += f"\nAgente (Ação): {response}\nSISTEMA (Saída de {tool_name}): {observation}\n" else: # Se não tem comando, é a resposta final return response