Skip to main content

Reflection Pattern (Reflexão)

PARA AGENTES DE IAChatGPTClaude

Padrão arquitetural para aumentar a confiabilidade dos agentes, que divide o processo em geração da solução (Generator), auditoria crítica (Critic) e refinamento iterativo (Refiner).

1. Visão Geral do Conceito e o Problema Sistêmico

Os modelos de linguagem autoregressivos possuem uma característica arquitetural fundamental: eles geram tokens sequencialmente e não dispõem de um mecanismo de hardware para "backtracking" (retrocesso). Se, no início de uma função, o modelo escolhe uma abordagem subótima, o mecanismo Self-Attention o força a continuar escrevendo código dentro dessa trajetória incorreta:

  1. Ilusão de Confiança: O modelo gera código com alucinações ou verificações null/undefined ausentes com a mesma alta confiança que teria em código correto.
  2. Omissão de Casos Extremos (Edge Cases): Na geração de passagem única (Zero-Shot), a atenção do modelo está focada no cenário básico (Happy Path), enquanto o tratamento de erros, race conditions e limites de memória são ignorados.
  3. Baixa Qualidade do Primeiro Rascunho: Assim como um engenheiro humano, a inteligência artificial raramente produz código arquitetônico impecável na primeira tentativa sem uma revisão cuidadosa.

O Reflection Pattern introduz um ciclo metacognitivo: o modelo transforma-se em seu próprio revisor de código, avaliando o resultado contra critérios de engenharia claros antes de retornar a resposta final.

2. Taxonomia Arquitetural e Modelo Mental

A implementação clássica do padrão de reflexão consiste em três componentes especializados:

  • 1. Gerador (Producer / Generator): Recebe os requisitos de entrada do usuário e gera a solução primária $S_0$. Foca na resolução da tarefa funcional.
  • 2. Crítico (Auditor / Critic): Recebe o artefato gerado $S_0$ e o avalia sob a perspectiva de um arquiteto rigoroso ou auditor de segurança, utilizando um checklist estruturado (complexidade $O(N)$, vazamentos de memória, vulnerabilidades OWASP, segurança de tipos). Formula uma lista detalhada de observações $C_0$.
  • 3. Refinador (Refiner): Recebe o código-fonte original $S_0$ junto com as críticas $C_0$ e gera uma versão atualizada $S_1$, na qual todas as deficiências apontadas foram corrigidas.
  • 4. Tipos de Reflexão:
    • Interna (Internal Self-Reflection): A crítica é realizada exclusivamente pela própria LLM por meio de um prompt especial.
    • Fundamentada no Ambiente (Grounded / External Reflection): A crítica baseia-se em fatos objetivos — saída do compilador, erros de linter ou falhas em testes unitários.

3. Pipeline Técnico e Mecânica Interna

O ciclo de vida do processo reflexivo:

  1. Initial Drafting (Formação da Solução Primária): O Gerador cria uma solução candidata para o problema.
  2. Adversarial Critique (Auditoria pelo Crítico): O prompt do crítico é acionado com uma exigência explícita de máxima severidade: "Analise o código apresentado. Encontre pelo menos 3 potenciais pontos de falha, vazamentos de memória ou edge cases que levariam a erros em produção."
  3. Stopping Invariant Evaluation (Verificação do Critério de Parada): O resultado da crítica é avaliado: se não houver observações críticas ou se o limite de rodadas for atingido (iterations >= 2), o sistema retorna a solução atual.
  4. Targeted Revision (Refinamento Direcionado): O Gerador recebe uma mensagem de sistema: "Aqui está o código inicial e as observações do auditor. Reescreva a função corrigindo cada observação sem perder a funcionalidade."

4. Cenários Práticos de Engenharia em Produção

01. Auditoria de Segurança de Código e Smart Contracts

O Gerador escreve uma função de transferência de fundos em um smart contract Solidity. O Crítico analisa o código e aponta: "A linha 14 é vulnerável a ataques de reentrância (Reentrancy), pois a alteração do saldo ocorre após a chamada ao contrato externo." O Refinador adiciona o modificador nonReentrant e reposiciona a atualização do estado antes do envio dos fundos (padrão Checks-Effects-Interactions).

02. Otimização de Desempenho de SQL e Consultas ORM

O Crítico revisa o código gerado para leitura de entidades relacionadas e alerta sobre o problema de consultas $N+1$: "Foi utilizado um loop para acessar perfis relacionados; substitua isso por um único JOIN ou eager loading via include."

03. Síntese de Expressões Regulares Robustas

Construção de uma expressão regular para validação de endereços de e-mail complexos ou números de telefone. Na fase de reflexão, o Crítico testa o regex gerado contra 10 strings extremas não padrão (ataques ReDoS, strings vazias, caracteres especiais) e aponta casos onde o filtro pode ser burlado.

5. Armadilhas, Erros Comuns e Segurança

  • Sycophancy do Crítico: Se o prompt do crítico for formulado de maneira muito suave, o modelo tende a elogiar sua própria solução ("O código parece ótimo!"), tornando a reflexão fictícia. Sempre dite a persona de um auditor de segurança intransigente.
  • Crítica Alucinada (Over-Critique): O Crítico pode inventar problemas onde não existem, forçando o Gerador a complicar desnecessariamente código simples e funcional com wrappers supérfluos. Fundamente a crítica em testes reais e no compilador.
  • Oscilação Infinita: No primeiro passo, o crítico pede para adicionar uma verificação; no segundo, pede para removê-la como redundante. É obrigatório fixar o número máximo de passos do ciclo.
/ Perguntas FrequentesSchema.org FAQPage

FAQ: Reflection Pattern (Reflexão)

Durante a geração inicial, o LLM prevê tokens da esquerda para a direita e não pode 'voltar atrás' para corrigir escolhas iniciais inadequadas. Quando o modelo avalia um texto já concluído (Fase de Crítica), toda a estrutura do código está presente na sua janela de atenção, permitindo detectar facilmente lacunas lógicas, casos extremos ausentes e inconsistências sintáticas.
/ Links internos
Todos os termos