Fix ReAct loop and tool arguments
This commit is contained in:
31
ai_agent.py
31
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 <REFINED> ... </REFINED> 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
|
||||
|
||||
Reference in New Issue
Block a user