Agentes de codificação por IA como o Jules podem criar, refatorar e fazer o scaffolding do código enquanto você se concentra em outras tarefas. A conveniência e a facilidade de uso são excelentes, mas também podem representar bugs sutis, casos de borda não detectados e suposições não testadas. É por isso que estamos introduzindo um novo recurso no Jules que revisa e faz a crítica do código antes que você tenha acesso a ele.
A função é simples, mas avançada: enquanto o Jules cria, o recurso de crítica desafia. Cada alteração proposta passa pela revisão adversária antes da conclusão. Pense no recurso de crítica como o colega revisor do Jules, altamente familiarizado com os princípios de qualidade de código e sem medo de dar sua opinião quando você tenta se arriscar a reinventar a roda.
A crítica é integrada diretamente ao processo de geração de código, algo chamado de geração aprimorada por crítica. Nesta primeira versão, esse é um processo único que avalia a saída final em uma única passagem. Os marcos futuros terão como objetivo fazer disso um verdadeiro agente com várias etapas, capaz de usar chamadas de ferramentas ou ser acionado após subtarefas ou antes do planejamento. Mas, por enquanto, ele revisa a geração completa de uma só vez. Isso utilizará a pesquisa em várias etapas, na qual um crítico valida as saídas usando ferramentas externas (como um interpretador de código ou um mecanismo de pesquisa) e aprende com esses resultados.
O crítico não corrige o código. Ele o sinaliza e o devolve ao Jules para que sejam feitas melhorias. Por exemplo:
Como isso acontece após a geração do patch e antes do envio (possivelmente várias vezes, se ainda estiver sinalizado), o Jules pode replanejar em tempo real. Nossa meta é ter menos problemas em PRs, melhor cobertura de testes e segurança reforçada.
As ferramentas de inspeção (linters) seguem regras superficiais e fixas; os testes validam declarações específicas. O recurso de crítica compreende a intenção e o contexto por trás do código. Ele está mais próximo de um método de avaliação livre de referência, verificando se o código está correto e é confiável, sem precisar de uma implementação final.
Ele também se baseia nas pesquisas de LLM como juiz, nas quais um modelo avalia o trabalho de outro modelo quanto à qualidade e exatidão. Esse tipo de julgamento automatizado é especialmente útil quando integrado totalmente à geração, transformando a revisão em um loop de feedback em tempo real.
1 – Você pede ao Jules para iniciar uma tarefa.
2 – O recurso de crítica revisa o patch candidato e sua descrição em uma única passagem, fazendo um julgamento geral.
3 – O Jules responde ao feedback antes de finalizar e, então, o crítico pode revisar o patch atualizado novamente e continuar sinalizando quaisquer pontos que julgar necessários até que não haja mais problemas.
4 – Você recebe um código que já foi revisado internamente.
Isso tem como base o aprendizado por reforço (RL, na sigla em inglês) entre agente e crítico, no qual um "agente" gera e um "crítico" avalia. No RL, esse loop atualiza o agente e o crítico com base em um sinal de aprendizado. Em nossa configuração de LLM como crítico, o padrão é semelhante: propor e, em seguida, avaliar. No entanto, em vez de atualizar os parâmetros de aprendizado, o feedback influencia o estado atual e as próximas etapas. Esse mesmo princípio também sustenta a pesquisa no LLM como juiz, na qual a avaliação do crítico orienta a qualidade sem a necessidade de retreinamento.
Em um mundo de rápida iteração, o crítico move a revisão para o início do processo e para o próprio ato de geração. Isso significa que o código que você revisa já foi questionado, refinado e submetido a testes de estresse. Obviamente, você deve sempre revisar o código gerado com cuidado antes de usá-lo.
Os grandes desenvolvedores não só escrevem código: eles o questionam. E, agora, o Jules também faz isso.