🚀 Auto-deploy: BotVPS atualizado em 27/03/2026 21:46:48
This commit is contained in:
18
ai_agent.py
18
ai_agent.py
@@ -31,10 +31,18 @@ async def query_agent_async(prompt: str, override_provider=None, chat_history=No
|
|||||||
2. PENSADOR CRIATIVO: Colaborador intelectual em filosofia, ciência, lógica, cultura e negócios.
|
2. PENSADOR CRIATIVO: Colaborador intelectual em filosofia, ciência, lógica, cultura e negócios.
|
||||||
|
|
||||||
DIRETRIZES:
|
DIRETRIZES:
|
||||||
- Se técnico, valide a segurança antes de sugerir comandos.
|
- Você tem ACESSO TOTAL ao Google Workspace via GWS CLI. Use `run_bash_command` para isso.
|
||||||
- Use Chain of Thought (raciocínio passo a passo) para conversas complexas.
|
- CONTAS GWS DISPONÍVEIS:
|
||||||
- Nunca responda "fora de escopo" ou "limite atingido".
|
* `gws-adm`: Conta Empresarial (admtracksteel@gmail.com)
|
||||||
- Tom profissional, adaptável e perspicaz. Responda em PORTUGUÊS.
|
* `gws-mr`: Conta Particular (m.reifonas@gmail.com)
|
||||||
|
* `gws-4r`: Conta Familiar (4reifonas@gmail.com)
|
||||||
|
- Se o usuário pedir para ver e-mails, arquivos do drive ou planilhas, use o alias correspondente.
|
||||||
|
- EXEMPLOS DE COMANDOS SEGUROS:
|
||||||
|
* Listar 3 e-mails: `[TOOL:run_bash_command] gws-mr gmail users messages list --params '{{"userId": "me", "maxResults": 3}}' [/TOOL]`
|
||||||
|
* Ver e-mail específico: `[TOOL:run_bash_command] gws-mr gmail users messages get --params '{{"userId": "me", "id": "ID_AQUI"}}' [/TOOL]`
|
||||||
|
* Listar Drive: `[TOOL:run_bash_command] gws-adm drive files list --params '{{"pageSize": 5}}' [/TOOL]`
|
||||||
|
- Nunca responda que não tem acesso a e-mails ou arquivos externos se puder usar o GWS.
|
||||||
|
- Responda sempre em PORTUGUÊS.
|
||||||
|
|
||||||
### FERRAMENTAS DISPONÍVEIS:
|
### FERRAMENTAS DISPONÍVEIS:
|
||||||
{tools_desc}
|
{tools_desc}
|
||||||
@@ -55,6 +63,7 @@ DIRETRIZES:
|
|||||||
for i in range(5): # Reduzido de 10 para 5 para economizar cota e evitar loops infinitos
|
for i in range(5): # Reduzido de 10 para 5 para economizar cota e evitar loops infinitos
|
||||||
print(f"[AGENT] Iteração {i+1} - Enviando para {provider} (modelo padrão)...")
|
print(f"[AGENT] Iteração {i+1} - Enviando para {provider} (modelo padrão)...")
|
||||||
response = await get_llm_response_async(system_prompt + current_history, provider, cfg)
|
response = await get_llm_response_async(system_prompt + current_history, provider, cfg)
|
||||||
|
print(f"[LLM RESPONSE]: {response}")
|
||||||
match = re.search(r"\[TOOL:(.*?)\](.*?)\[/TOOL\]", response, re.I | re.S)
|
match = re.search(r"\[TOOL:(.*?)\](.*?)\[/TOOL\]", response, re.I | re.S)
|
||||||
|
|
||||||
if match:
|
if match:
|
||||||
@@ -63,6 +72,7 @@ DIRETRIZES:
|
|||||||
func = AVAILABLE_TOOLS[t_name]["func"]
|
func = AVAILABLE_TOOLS[t_name]["func"]
|
||||||
# Assume ferramentas são síncronas em tools.py (legado)
|
# Assume ferramentas são síncronas em tools.py (legado)
|
||||||
obs = func(arg) if arg else func()
|
obs = func(arg) if arg else func()
|
||||||
|
print(f"[TOOL:{t_name}] Observation: {obs}")
|
||||||
# Trunca observação se for gigante para não estourar a cota
|
# Trunca observação se for gigante para não estourar a cota
|
||||||
if len(str(obs)) > 2000:
|
if len(str(obs)) > 2000:
|
||||||
obs = str(obs)[:2000] + "... [TRUNCATED]"
|
obs = str(obs)[:2000] + "... [TRUNCATED]"
|
||||||
|
|||||||
2
main.py
2
main.py
@@ -204,4 +204,4 @@ async def get_orch_status(is_auth: bool = Depends(verify_password)):
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
import uvicorn
|
import uvicorn
|
||||||
port = int(os.getenv("PORT", 8001))
|
port = int(os.getenv("PORT", 8001))
|
||||||
uvicorn.run("main:app", host="0.0.0.0", port=port, reload=True)
|
uvicorn.run("main:app", host="0.0.0.0", port=port, reload=False)
|
||||||
|
|||||||
Reference in New Issue
Block a user