O Motor de Decisão nunca age às cegas. Cada decisão passa por um pipeline de
ajustes de confiança, verificações de circuit breaker e validação de padrões
antes de qualquer ação ser executada.
Visão Geral da Arquitetura
Habilitando o motor
O motor vem desligado por padrão: as ApprovalPolicies são então a única barreira. Ligue por operator:CHATCLI_OPERATOR_DECISION_ENGINE=true no Deployment do operator. O RemediationReconciler passa a avaliar todo plano que chega a Pending, depois de as ApprovalPolicies e o tier do cluster darem sua palavra: um plano que uma ApprovalPolicy já segurou (inclusive uma regra auto com autoApproveConditions) não é reavaliado; um que uma regra auto sem condições liberou ainda é.
Toda avaliação deixa o veredito no plano, tenha ele rodado ou esperado:
WaitingApproval sob a política sintética decision-engine: um ApprovalRequest com policyRef: decision-engine, um aprovador exigido e timeout de 30 minutos, decidido como qualquer outro (dashboard, API REST ou a annotation platform.chatcli.io/approve / platform.chatcli.io/reject com o valor <aprovador>:<motivo>). Nenhum objeto ApprovalPolicy é necessário.
Todo canal registra quem decidiu e por quê em
status.decisions: a annotation grava o nome que carrega, e a API REST e o dashboard gravam o nome digitado mais a identidade da API key (<nome> (api-key: <identidade>)). Se o motor devolver erro, o plano fica Pending com um Event de Warning ApprovalGateUnavailable e é tentado de novo com backoff; ele nunca roda sem gate.<issue>-insight. Se esse AIInsight não existir, a confiança base é 0 e o plano termina como manual; um erro ao lê-lo (que não seja “não encontrado”) mantém o plano Pending e tenta de novo. O AIInsight vem do servidor ChatCLI ao qual o operator está conectado; só uma Instance por cluster dirige o AIOps (o operator usa a primeira Instance pronta que encontra no cluster inteiro).
Confiança Base (AIInsight)
Todo o processo começa com o campoconfidence do AIInsight CR, que é gerado pelo provedor LLM durante a análise de causa raiz. Esse valor representa a certeza da IA sobre o diagnóstico e as ações sugeridas.
Confiança Alta
0.90 - 1.00 — A IA identificou o problema com alta precisão. Cenários bem
conhecidos como OOMKilled, CrashLoopBackOff com imagem inválida.
Confiança Média
0.70 - 0.89 — Diagnóstico provável mas com incerteza. Problemas de
performance, resource pressure, dependências intermitentes.
Confiança Baixa
0.50 - 0.69 — A IA não tem certeza suficiente. Problemas complexos com
múltiplas causas possíveis.
Confiança Muito Baixa
< 0.50 — Cenário desconhecido ou dados insuficientes. Sempre requer
intervenção humana.
Fatores de Ajuste de Confiança
A confiança base do AIInsight é ajustada por cinco fatores e depois limitada a0.0–1.0. Todos os números abaixo são os que o operator aplica.
1. Taxa de Sucesso Histórica
O motor conta os RemediationPlans dos últimos 30 dias no namespace da Issue cujas ações incluem o primeiro tipo de ação do plano, e precisa de pelo menos 3 concluídos (Completed, Failed ou RolledBack) antes de ajustar:
Planos agênticos não carregam ações pré-planejadas, então este fator não se aplica a eles.
2. Pattern Match (Correspondência de Padrão)
Quando o Pattern Store do namespace da Issue guarda um padrão com o mesmo tipo de sinal, tipo de recurso e severidade que já foi resolvido com sucesso pelo menos duas vezes, oconfidenceBoost armazenado dele é somado. O boost é aprendido por padrão: successCount / (successCount + failureCount) × 0.15, então nunca passa de +0,15.
3. Horário do Dia (Time of Day)
O relógio é UTC de propósito: o operator não sabe o horário comercial do time.
4. Issues Ativas Simultâneas
Issues não terminais no mesmo namespace, incluída a que está sendo avaliada:5. Severidade do Incidente
Exemplo Prático de Cálculo
critical terminaria em 0,88 e ficaria em espera como manual: critical nunca roda sem alguém.
Thresholds de Decisão
A confiança final e a severidade decidem juntas quanta autonomia o plano recebe.- Auto-Remediação
- Auto com Notificação
- Requer Aprovação
- Manual
Requisitos: confiança ≥ 0,95 e severidade
lowO plano executa imediatamente. O veredito fica no plano:Um plano que uma ApprovalPolicy já segurou não é avaliado de novo. Um plano que uma regra
auto sem autoApproveConditions liberou ainda é: o motor só pode adicionar cautela, nunca remover a barreira de uma política.Circuit Breaker
O circuit breaker bloqueia todo plano novo num namespace quando as remediações ali continuam falhando, para a plataforma parar de acumular dano.1
Janela de falhas
A cada avaliação o motor conta os RemediationPlans do namespace que terminaram
Failed ou RolledBack na última 1 hora. O momento da falha é completedAt, ou startedAt quando o caminho de falha não o carimbou, ou a criação do plano.2
Abre
3 ou mais falhas na janela abrem o breaker: o plano fica em espera como
decision-mode: blocked com o motivo Circuit breaker open: 3 remediations failed in last hour, e chatcli_operator_decision_engine_circuit_breaker_state{namespace} marca 1.3
Fecha
O breaker fecha sozinho quando as falhas saem da janela de uma hora. Não há reset manual: aprove as requisições em espera que quiser rodar, ou corrija a causa e aguarde.
Pattern Store
O Pattern Store é o sistema de aprendizado de padrões da plataforma. Ele permite que o AIOps “lembre” como incidentes passados terminaram e devolva essa memória ao ajuste de pattern match (fator 2 acima).Fingerprint
Cada padrão é identificado por um fingerprint do tipo de sinal, do tipo de recurso e da severidade da Issue, em minúsculas:Armazenamento em ConfigMap
Os padrões ficam num ConfigMap chamadochatcli-pattern-store no namespace da Issue (um por namespace que já teve remediações), criado pelo operator no primeiro uso. Cada chave de data é um fingerprint e o valor é o padrão em JSON:
Quando os padrões são registrados
O RemediationReconciler atualiza o padrão quando um plano chega a um estado terminal:
Os dois caminhos recalculam
confidenceBoost e atualizam lastSeenAt.
Cálculo do Confidence Boost
successCount ≥ 2.
Um pattern match só aparece pelo efeito no veredito: o valor final na annotation
platform.chatcli.io/confidence do plano. O operator não grava detalhes do padrão na Issue, no AIInsight nem no RemediationPlan.Enriquecimento de Causa Raiz (RCA)
Antes de pedir a análise ao servidor ChatCLI, o controller de AIInsight coleta contexto extra do cluster sobre a Issue e o anexa ao prompt da análise como um bloco de texto (limitado a 4.000 caracteres). Ele alimenta o diagnóstico do LLM e, por meio dele, oconfidence do AIInsight; o motor de decisão não o lê diretamente, e ele não é gravado como campo estruturado em nenhum CR.
O enriquecedor olha 30 minutos para trás a partir do detectedAt da Issue (ou da sua criação):
O bloco termina com uma lista fixa de “possíveis causas”, nesta ordem e só quando o sinal correspondente existe: mudança de deploy recente, mudança de ConfigMap recente, cada Service não saudável, Issues ativas relacionadas ou, quando nada disso se aplica,
No obvious external cause detected — may be resource exhaustion or application bug. A lista é uma dica heurística para o LLM, não um ranking pontuado.
Detector de Convergência
O Detector de Convergência protege o loop agêntico de remediação. Ele inspeciona ospec.agenticHistory do plano (ação e observação de cada passo) para parar loops travados, oscilando, falhando repetidamente ou prestes a estourar o timeout, em vez de deixá-los queimar os passos restantes.
IsConverged
Verdadeiro quando os últimos 3 passos do histórico agêntico têm a mesma observação (comparada sem espaços nas pontas, em minúsculas e não vazia): o loop não está mudando mais nada, para melhor ou para pior.IsOscillating
Verdadeiro quando as ações dos últimos 4 passos alternam entre dois tipos de ação diferentes, A → B → A → B (por exemploScaleDeployment, RestartDeployment, ScaleDeployment, RestartDeployment). Passos sem ação quebram o padrão.
ShouldStop
O RemediationReconciler chama o detector antes de cada passo agêntico, depois dos limites rígidos (máximo de passos, timeout de 10 minutos):
Uma parada falha o plano com
status.result igual a Agentic loop stopped: <motivo> (estimated progress NN%) e incrementa chatcli_operator_agentic_convergence_stops_total{reason} com converged, oscillating, timeout ou failures. A Issue então tenta de novo na próxima tentativa ou escala, exatamente como depois de qualquer plano que falhou.
EstimateProgress
Estima o progresso do loop agêntico de 0,0 a 1,0; o valor só aparece na mensagem de parada acima.
O resultado é limitado a
1,0.
Fluxo Completo de Decisão
Métricas do Motor de Decisão
Próximos Passos
Federação Multi-Cluster
Veja como o motor de decisão opera em ambientes multi-cluster com políticas
por tier.
Chaos Engineering
Valide as decisões do motor com experimentos de chaos controlados.
Auditoria e Compliance
Planos em espera, decisões de aprovação e início, sucesso e falha de remediações são registrados como AuditEvents.
AIOps Platform
Retorne à visão geral completa da plataforma AIOps.