EN·ES·DE·PT·FR
⌘K

Loop do Agente & Recuperação de Erros

O loop agêntico central: receber mensagem, chamar LLM, executar ferramentas, iterar, responder.

Fluxo do Loop do Agente

  1. Persistir mensagem do usuário — armazenada com pontuação de importância
  2. Auto-rotear modelo — classificar complexidade da consulta (se não substituído manualmente)
  3. Construir prompt do sistema — prompt base + skills correspondentes + fatos conhecidos
  4. Recuperar contexto — recuperação de memória tri-híbrida
  5. Iterar (até max_iterations):
    • Coletar memórias antigas fixadas + mensagens recentes (deduplicadas)
    • Construir lista de mensagens no formato OpenAI
    • Chamar LLM com recuperação classificada por erro
    • Se houver chamadas de ferramentas → executar cada uma, persistir resultados, continuar loop
    • Se não houver chamadas de ferramentas OU iteração final → retornar resposta em texto
  6. Máximo de iterações atingido → retornar mensagem de timeout

Orçamento Dinâmico de Iterações

O agente possui uma ferramenta integrada request_more_iterations que estende o orçamento do loop quando o limite atual é insuficiente:

  • Estende o orçamento em 10 iterações por chamada
  • Limite rígido impede extensão ilimitada (tipicamente 25 no total)
  • Requer um parâmetro reason explicando o que resta a ser feito
  • Usado quando o agente tem um plano claro mas ficaria sem iterações no meio da tarefa

Estratégia de Recuperação de Erros

O método call_llm_with_recovery classifica erros e responde de acordo:

Tipo de ErroEstratégia
Auth / BillingRetornar imediatamente ao usuário — sem retry
Rate LimitAguardar retry_after_secs (limitado a 60s), tentar novamente uma vez
Timeout / Network / Server ErrorAguardar 2s, tentar novamente uma vez; em caso de falha, voltar ao modelo anterior
Not Found (modelo inválido)Alternar imediatamente para modelo de fallback
UnknownPropagar como erro
Last Known Good
Após cada chamada bem-sucedida ao LLM, a configuração atual é salva como config.toml.lastgood. Isso permite a recuperação automática de alterações ruins na configuração.

Correção de Ordenação de Mensagens

Para satisfazer restrições entre provedores Gemini, Anthropic e OpenAI, o aidaemon executa uma correção de três passagens no histórico de mensagens antes de cada chamada ao LLM:

  1. Passagem 1: Mesclar mensagens consecutivas do mesmo papel (combina arrays de tool_calls)
  2. Passagem 2: Descartar resultados de ferramentas órfãos (sem tool_call correspondente do assistente) e remover tool_calls órfãos (sem resultado de ferramenta correspondente)
  3. Passagem 3: Mesclar novamente após a remoção de órfãos, que pode criar novas mensagens consecutivas do mesmo papel

Execução de Ferramentas

Durante o loop, cada chamada de ferramenta recebe:

  • _session_id — injetado automaticamente para rastreamento de sessão
  • _untrusted_source — flag definida para sessões originadas por triggers

Detecção de Travamento & Repetição

O loop do agente inclui proteções contra travamentos:

  • Detecção de travamento — se a mesma ferramenta for chamada 3+ vezes consecutivas com argumentos similares, o loop é interrompido
  • Detecção de repetição — detecta texto de resposta repetido e força uma interrupção
  • Limite rígido de iterações — padrão 10, extensível até 25 via request_more_iterations

Tipos de Sessão

Tipo de SessãoFormatoTrusted
Chat do TelegramChat ID como stringSim
Canal do Slackslack:{channel_id} ou slack:{channel_id}:{thread_ts}Sim
Canal do Discorddiscord:{channel_id}Sim
Trigger de emailemail_triggerNão
Trigger de eventoevent_{uuid}Não
Sub-agentesub-{depth}-{uuid}Herdado