SKILL.md — AgentSpeak(L) & Arquitetura de Agente BDI
Quando entidades autônomas devem perceber, deliberar e agir enquanto gerenciam metas concorrentes e respondem a eventos sem abandonar o trabalho em andamento.
Pontos de Decisão
Seleção de Arquitetura Primária
SE o sistema precisa apenas de reação a eventos sem metas persistentes
→ Use sistema reativo/de regras (BDI é exagero)
SENÃO SE o sistema precisa de planejamento em ambiente estático sem interrupções
→ Use planejador clássico
SENÃO SE o sistema precisa tanto de reatividade QUANTO persistência de metas em ambiente dinâmico
→ Use arquitetura BDI
Tabela de Invocação de Funções de Seleção
| Situação | Função Usada | Critérios de Decisão |
|---|---|---|
| Novo evento chega | SE (Seleção de Evento) | Prioridade, urgência, restrições de recursos |
| Evento precisa de plano | SO (Seleção de Opção) | Guardas de contexto, histórico de sucesso do plano, tolerância a risco |
| Múltiplas intenções ativas | SI (Seleção de Intenção) | Prazos, alocação de recursos, política de justiça |
| Falha de plano ocorre | SO depois SI | Encontrar plano de tratamento de falha, depois reagendar intenções |
Árvore de Decisão para Recuperação de Falha de Plano
O plano P falha ao executar a ação A:
SE existir plano de tratamento de falha para este tipo de falha
→ Publicar evento de falha, deixar SO selecionar plano de recuperação
→ Continuar com pilha de intenções modificada
SENÃO SE existirem planos alternativos para o mesmo evento desencadeador
→ Retroceder ao evento, deixar SO tentar o próximo plano aplicável
→ Remover plano falhado da consideração
SENÃO SE não houver alternativas disponíveis
→ Propagar falha para cima na pilha de intenções
→ SE existir plano pai → desencadear evento de falha no nível do plano pai
→ SENÃO descartar intenção completamente
Avaliação de Impacto de Atualização de Crença
Nova crença B chega:
SE B contradiz crenças existentes
→ Executar protocolo de revisão de crenças
→ Verificar todas as intenções ativas quanto a violações de guarda de contexto
→ SE contexto não for mais válido → suspender intenção (não descartar)
SENÃO SE B habilita novos planos aplicáveis
→ Verificar fila de eventos para eventos dormentes que agora têm planos aplicáveis
→ Repriorizar usando SE
SENÃO SE B satisfaz condições de meta pendente
→ Marcar conclusão, limpar intenções relacionadas
→ Publicar evento de conclusão para limpeza de planos
Modos de Falha
1. Oscilação de Planos (Plan Thrashing)
Sintomas: Agente alterna rapidamente entre planos sem fazer progresso; o mesmo evento desencadeia planos diferentes repetidamente. Regra de Detecção: Se o mesmo evento for processado >3 vezes em N ciclos de execução com seleções de plano diferentes a cada vez, você tem oscilação de planos. Causa Raiz: A função SO (seleção de opção) é não determinística ou as guardas de contexto são muito fracas/sobrepostas. Correção: Tornar SO explicitamente ordenado por prioridade; fortalecer guardas de contexto para serem mutuamente exclusivas; adicionar histórico de sucesso/falha de planos aos critérios de seleção.
2. Paralisia por Crenças Obsoletas (Stale Belief Paralysis)
Sintomas: Agente seleciona planos com base em modelo de mundo desatualizado; planos falham imediatamente devido a suposições falsas sobre o ambiente. Regra de Detecção: Se a taxa de falha de planos for >50% e as falhas forem devidas a violações de guarda de contexto no momento da execução (não no momento do planejamento), você tem crenças obsoletas. Causa Raiz: Frequência de atualização de crenças é muito baixa em relação à taxa de mudança do ambiente; a revisão de crenças não está propagando para verificações de contexto de intenção. Correção: Aumentar frequência de percepção; adicionar timestamps de obsolescência de crenças; suspender intenções quando suas guardas de contexto se tornarem inválidas.
3. Loops Infinitos de Intenções
Sintomas: Agente cria intenções que publicam eventos que criam mais intenções para a mesma meta; pilha de intenções cresce sem limites. Regra de Detecção: Se a profundidade da pilha de intenções aumenta monotonicamente ao longo do tempo sem conclusões de metas correspondentes, você tem loops de intenções. Causa Raiz: Planos criam submetas que eventualmente levam de volta à meta original sem condições de terminação. Correção: Adicionar detecção de conclusão em guardas de contexto; implementar subsumição de intenções (mesclar intenções duplicadas); adicionar limites máximos de profundidade de recursão.
4. Anti-Padrão de Política em Planos (Policy-in-Plans Anti-Pattern)
Sintomas: Mesmos eventos desencadeiam comportamentos diferentes com base em condicionais dentro dos corpos dos planos; a política do agente está dispersa e difícil de mudar.
Regra de Detecção: Se os corpos dos planos contêm condicionais de prioridade/urgência (if alta_prioridade then X else Y), a política está no lugar errado.
Causa Raiz: A racionalidade do agente está codificada na lógica do plano em vez das funções de seleção.
Correção: Mover toda a lógica de prioridade/política para funções SE/SO/SI; tornar os planos neutros em termos de política e sensíveis apenas ao contexto.
5. Gargalo de Intenção Única (Single-Intention Bottleneck)
Sintomas: Agente não consegue lidar com interrupções; eventos urgentes esperam enquanto o agente completa tarefas de longa duração; sem concorrência. Regra de Detecção: Se o agente tem no máximo uma intenção ativa a qualquer momento, você tem gargalo de intenção única. Causa Raiz: A função SI (escalonamento de intenção) não está implementando verdadeira concorrência; tratando intenções como exclusivas em vez de concorrentes. Correção: Permitir múltiplas intenções ativas; implementar escalonamento preemptivo no SI; projetar planos como sequências interrompíveis.
Exemplos Práticos
Exemplo 1: Alocação de Tarefas Multi-Agente com Conflitos de Planos
Cenário: Dois agentes (A1, A2) coordenam para alcançar entregar(pacote, destino). Ambos têm planos, mas capacidades diferentes.
Estado Inicial:
- Crenças de A1:
localizacao(A1, armazem),pode_carregar(A1, itens_pequenos),localizacao(pacote, armazem) - Crenças de A2:
localizacao(A2, deposito),pode_carregar(A2, qualquer),tem_veiculo(A2) - Crença compartilhada:
tamanho(pacote, grande),destino(site_cliente)
Evento: +!entregar(pacote, site_cliente) publicado para ambos os agentes
Processo de Decisão:
-
Seleção de Plano A1 (SO):
- Plano P1:
+!entregar(X,Y) : pode_carregar(A1,itens_pequenos) & tamanho(X,pequeno) <- pegar(X); transportar(X,Y) - Guarda de contexto falha:
tamanho(pacote, grande)contradiztamanho(X, pequeno) - Nenhum plano aplicável → publica
falha_plano(entregar, sem_capacidade)
- Plano P1:
-
Seleção de Plano A2 (SO):
- Plano P2:
+!entregar(X,Y) : pode_carregar(A2,qualquer) & tem_veiculo(A2) <- pegar(X); dirigir(X,Y); deixar(X) - Guarda de contexto bem-sucedida → P2 selecionado
- Cria intenção I1:
[pegar(pacote), dirigir(pacote, site_cliente), deixar(pacote)]
- Plano P2:
-
Atualização de Crença A1:
- Recebe mensagem:
tentando(A2, entregar, pacote) - Atualiza crenças:
+delegado(entregar, pacote, A2) - Descarta intenção falhada
- Recebe mensagem:
Erro de Iniciante: Ambos os agentes tentariam a entrega, criando conflitos de recurso. Percepção de Especialista: A coordenação ocorre através de compartilhamento de crenças e guardas de contexto de plano, não conhecimento de agente codificado.
Exemplo 2: Tratamento de Interrupção com Reconsideração de Intenção
Cenário: Agente executando tarefa de processamento de dados de longa duração recebe alerta de segurança urgente.
Estado Inicial:
- Intenção ativa I1:
[processar_lote(dados1), processar_lote(dados2), gerar_relatorio()] - Execução atual: meio de
processar_lote(dados1)(levará mais 10 minutos)
Evento: +alerta_seguranca(intrusao_detectada, servidor_3)
Processo de Decisão:
-
Seleção de Evento (SE):
- Prioridades SE: eventos_seguranca > processamento_rotina
alerta_segurancaselecionado em vez de continuar I1
-
Seleção de Plano (SO):
- Plano P3:
+alerta_seguranca(Tipo, Local) : tem_acesso_admin <- isolar_sistema(Local); notificar_equipe(Tipo) - Guarda de contexto satisfeita → P3 selecionado
- Cria intenção I2:
[isolar_sistema(servidor_3), notificar_equipe(intrusao_detectada)]
- Plano P3:
-
Escalonamento de Intenção (SI):
- Intenções atuais: I1 (suspensa em
processar_lote(dados1)), I2 (nova, urgente) - Política SI: intenções de segurança preemptam intenções de processamento
- Seleciona I2 para execução
- Intenções atuais: I1 (suspensa em
-
Execução:
- Executa
isolar_sistema(servidor_3)imediatamente - Executa
notificar_equipe(intrusao_detectada) - I2 completa, descartada do conjunto de intenções
- Executa
-
Retomada:
- Apenas I1 permanece:
[processar_lote(dados1), processar_lote(dados2), gerar_relatorio()] - Retoma
processar_lote(dados1)do ponto de suspensão
- Apenas I1 permanece:
Erro de Iniciante: Ignoraria o alerta de segurança ou abandonaria a tarefa de processamento completamente. Percepção de Especialista: A suspensão de intenção preserva o progresso enquanto permite comportamento responsivo. A política de escalonamento SI é explícita e configurável.
Portões de Qualidade
- Arquitetura do agente tem funções de seleção SE, SO, SI explícitas com políticas documentadas
- Cada plano tem evento desencadeador e guarda de contexto bem definidos que podem ser avaliados em relação às crenças atuais
- Biblioteca de planos inclui planos de tratamento de falha para cada tipo de plano principal (não apenas caminhos de sucesso)
- Mecanismo de atualização de crenças pode lidar com informações contraditórias e propagar mudanças para intenções ativas
- Múltiplas intenções podem estar ativas concorrentemente com regras claras de escalonamento/preempção
- Processamento da fila de eventos é priorizado (não FIFO) com atribuição explícita de prioridade
- Falha de plano desencadeia eventos em vez de travamentos do sistema ou falhas silenciosas
- Guardas de contexto são mutuamente exclusivas OU a seleção de plano é explicitamente ordenada para evitar não determinismo
- Agente pode explicar suas ações expondo a pilha de intenções e eventos desencadeadores
- Desempenho do sistema degrada graciosamente sob alta carga de eventos (sem loops infinitos ou estouro de pilha)
Limitações (NOT-FOR Boundaries)
NÃO PARA: Sistemas de regras simples onde todo comportamento é reativo (sem metas persistentes) → USE EM VEZ DISSO: Motor de regras básico ou sistema evento-ação
NÃO PARA: Problemas de planejamento estático onde o ambiente não muda durante a execução → USE EM VEZ DISSO: Planejadores clássicos (A*, STRIPS, HTN)
NÃO PARA: Sistemas de tempo real que exigem tempos de resposta garantidos ou prazos rígidos → USE EM VEZ DISSO: Sistemas de escalonamento de tempo real com análise de temporização
NÃO PARA: Sistemas onde toda coordenação pode ser tratada por um controlador central → USE EM VEZ DISSO: Orquestração de fluxo de trabalho ou fila de tarefas centralizada
NÃO PARA: Pipelines puros de transformação de dados sem tomada de decisão autônoma → USE EM VEZ DISSO: Ferramentas ETL, frameworks de processamento de fluxo
NÃO PARA: Aplicações que exigem aprendizado de máquina ou inferência estatística como capacidade primária → USE EM VEZ DISSO: Frameworks de ML com BDI como camada de coordenação, se necessário