Pergunte às pessoas que desenvolvem IA generativa para que ela serve atualmente — o que realmente as entusiasma nessa tecnologia — e muitas dirão: codificação.
“Isso é algo muito empolgante para os desenvolvedores”, disse Jared Kaplan, cientista-chefe da Anthropic, à MIT Technology Review: “É realmente entender o que há de errado com o código e depurá-lo.”
Copilot, uma ferramenta construída sobre os grandes modelos de linguagem da OpenAI e lançada pelo GitHub (apoiado, por sua vez, pela Microsoft) em 2022, é agora utilizada por milhões de desenvolvedores ao redor do mundo. Milhões de outros recorrem a chatbots de uso geral como o Claude da Anthropic, o ChatGPT da OpenAI e o Gemini do Google DeepMind para ajuda diária.
“Hoje, mais de um quarto de todo o novo código no Google é gerado por IA, depois revisado e aceito por engenheiros”, afirmou o CEO da Alphabet, Sundar Pichai, em uma teleconferência de resultados em outubro: “Isso ajuda nossos engenheiros a fazer mais e se mover mais rápido”. Espera-se que outras empresas de tecnologia o alcancem, se ainda não o fizeram.
Não são apenas as grandes feras que estão lançando ferramentas de codificação de IA. Novas startups também entraram neste mercado agitado. Novatas como Zencoder, Merly, Cosine, Tessl (avaliada em US$ 750 milhões em poucos meses de criação) e Poolside (avaliada em US$ 3 bilhões antes mesmo de lançar um produto) estão todas disputando sua fatia do bolo. “Parece que os desenvolvedores estão dispostos a pagar por copilotos”, diz Nathan Benaich, analista da empresa de investimentos Air Street Capital: “E então o código é uma das maneiras mais fáceis de monetizar a IA.”
Essas empresas prometem levar os assistentes de codificação generativa para o próximo nível. Em vez de fornecer aos desenvolvedores um tipo de autocompletar supercarregado, como a maioria das ferramentas existentes, esta próxima geração tem a capacidade de prototipar, testar e depurar códigos. O resultado é que os desenvolvedores podem essencialmente se transformar em gerentes, e podem gastar mais tempo revisando e corrigindo códigos escritos por um modelo do que escrevendo-os do zero.
Mas há mais. Muitas das pessoas que constroem assistentes de codificação generativa acham que eles podem ser um caminho rápido para a inteligência geral artificial (AGI), a hipotética tecnologia super-humana que várias empresas importantes afirmam ter em vista.
“A primeira vez que veremos uma atividade economicamente valiosa atingir capacidades de nível humano será no desenvolvimento de software”, diz Eiso Kant, CEO e cofundador da Poolside. (A OpenAI já se gabou de que seu último modelo o3 venceu o próprio cientista chefe da empresa em um desafio competitivo de codificação.)
Bem-vindo à segunda onda de codificação de IA.
Código correto
Engenheiros de software falam sobre dois tipos de correção. Há o sentido em que a sintaxe de um programa (sua gramática) está correta — significando que todas as palavras, números e operadores matemáticos estão no lugar certo. Isso importa muito mais do que a correção gramatical na linguagem natural. Erre uma coisinha em milhares de linhas de código e nada disso será executado.
A primeira geração de assistentes de codificação é muito boa em produzir código correto nesse sentido. Treinados em bilhões de pedaços de código, eles assimilaram as estruturas de nível superficial de muitos tipos de programas.
Mas também há o sentido em que a função de um programa está correta: claro, ele roda, mas ele realmente faz o que você queria? É esse segundo nível de correção que a nova onda de assistentes de codificação generativa está buscando — e o que realmente mudará a maneira como o software é feito.
“Grandes modelos de linguagem podem escrever código que compila, mas eles nem sempre podem escrever o programa que você queria”, diz Alistair Pullen, um cofundador da Cosine. “Para fazer isso, você precisa recriar os processos de pensamento pelos quais um codificador humano teria passado para obter esse resultado final.”
O problema é que os dados com os quais a maioria dos assistentes de codificação foram treinados — os bilhões de pedaços de código retirados de repositórios online — não capturam esses processos de pensamento. Eles representam um produto finalizado, não o que foi usado para fazê-lo. “Há muito código por aí”, diz Kant. “Mas esses dados não representam o desenvolvimento de software.”
O que Pullen, Kant e outros estão descobrindo é que, para construir um modelo que faça muito mais do que autocompletar — um que possa criar programas úteis, testá-los e corrigir bugs —, é preciso mostrar a ele muito mais do que apenas código. Você precisa mostrar a ele como esse código foi montado.
O objetivo é criar modelos que não apenas imitem a aparência de um bom código — independentemente de funcionar bem ou não — mas que imitem o processo que produz esse código em primeiro lugar.
Migalhas de pão
Para fazer isso, você precisa de um conjunto de dados que capture esse processo — os passos que um desenvolvedor humano pode fazer ao escrever código. Pense nesses passos como uma trilha de migalhas de pão que uma máquina pode seguir para produzir um pedaço de código semelhante.
A Zencoder contratou vários veteranos de mecanismos de pesquisa para ajudá-la a criar uma ferramenta capaz de analisar grandes bases de código e descobrir o que é ou não relevante. Esse contexto detalhado reduz as alucinações e melhora a qualidade do código que os grandes modelos de linguagem podem produzir, diz Filev: “Chamamos isso de repo grokking”.
A Cosine também acredita que o contexto é fundamental. Ela está coletando todas as migalhas de pão que consegue encontrar e usando-as para criar um tipo de conjunto de dados. A empresa pediu a dezenas de programadores que registrassem o que estavam fazendo enquanto trabalhavam em centenas de tarefas de programação diferentes. “Pedimos a eles que anotassem tudo”, diz Pullen: ”Por que você abriu esse arquivo? Por que rolou a tela até a metade? Por que você o fechou?” Eles também pediram aos programadores que anotassem as partes concluídas do código, marcando as seções que exigiriam conhecimento de outras partes do código ou documentação específica para serem escritas.
Em seguida, a Cosine pega todas essas informações e gera um grande conjunto de dados sintéticos que mapeia as etapas típicas que os programadores realizam e as fontes de informação que eles utilizam para as partes concluídas do código. Esse conjunto de dados é utilizado para treinar um modelo cuja função é descobrir qual trilha de migalhas de pão ele precisa seguir (e como deve seguir) para produzir um determinado programa.
A Poolside, com sede em São Francisco, também está criando um conjunto de dados sintéticos que captura o processo de codificação, mas se baseia mais em uma técnica chamada RLCE – aprendizagem por reforço a partir da execução do código (A Cosine também usa essa técnica, mas em um grau menor).
A RLCE é análoga à técnica RLHF (também conhecida como “aprendizado por reforço a partir de feedback humano”), usada para transformar chatbots como o ChatGPT em conversadores habilidosos.
Com o RLHF, um modelo é treinado para produzir um texto mais parecido com o tipo de texto que os testadores humanos dizem preferir. Com o RLCE, um modelo é treinado para produzir um código mais parecido com o tipo que faz o que deve fazer quando é executado.
Jogando com o sistema
A Cosine e a Poolside dizem que se inspiraram na abordagem adotada pela DeepMind com seu modelo de jogo AlphaZero. O AlphaZero recebeu as etapas que poderia executar – os movimentos em um jogo – e depois foi deixado para jogar contra si mesmo repetidamente, descobrindo por tentativa e erro qual sequência de movimentos era vencedora e qual não era.
“Eles permitiram que ele explorasse as jogadas em cada turno possível, simulando o máximo de jogos que você pudesse computar, o que levou à vitória sobre Lee Sedol”, diz Pengming Wang, cientista fundador da Poolside, referindo-se ao grande mestre coreano de Go que o AlphaZero venceu em 2016. Antes da Poolside, Wang trabalhou na Google DeepMind em aplicações do AlphaZero além dos jogos de tabuleiro, incluindo o FunSearch, uma versão treinada para resolver problemas avançados de matemática.
Quando essa abordagem do AlphaZero é aplicada à codificação, as etapas envolvidas na produção de um código se tornam as jogadas disponíveis em um jogo, e um programa correto se torna o vencedor desse jogo. Deixado para jogar sozinho, um modelo pode melhorar muito mais rápido do que um ser humano poderia. “Um programador humano tenta e falha uma falha de cada vez”, diz Kant. “Os modelos podem tentar 100 vezes de uma só vez.”
Uma diferença importante entre a Cosine e a Poolside é que a Cosine está usando uma versão personalizada do GPT-4o fornecida pela OpenAI, o que possibilita o treinamento em um conjunto de dados maior do que o modelo básico pode suportar. No entanto, a Poolside está construindo seu próprio modelo grande de linguagem a partir do zero.
Kant, da Poolside, acredita que o treinamento de um modelo em código desde o início produzirá melhores resultados do que a adaptação de um modelo existente que já absorveu não apenas bilhões de trechos de código, mas também a maior parte da Internet. “Não me importo que nosso modelo esqueça a anatomia das borboletas”, diz ele.
A Cosine afirma que seu assistente de codificação generativa, chamado Genie, está no topo da tabela de classificação do SWE-Bench, um conjunto padrão de testes para modelos de codificação. A Poolside ainda está desenvolvendo seu sistema, mas afirma que o que tem até agora já se equipara ao desempenho do Copilot do GitHub.
“Pessoalmente, acredito muito que os modelos de linguagem grandes nos levarão a ser tão capazes quanto um desenvolvedor de software”, diz Kant.
No entanto, nem todo mundo tem essa opinião.
LLMs ilógicos
Para Justin Gottschlich, CEO e fundador da Merly, os modelos grandes de linguagem são a ferramenta errada para o trabalho – ponto final. Ele invoca seu cachorro: “Nenhum treinamento para o meu cachorro fará com que ele seja capaz de programar, isso simplesmente não acontecerá”, diz ele. “Ele pode fazer todos os tipos de outras coisas, mas é incapaz de atingir esse nível profundo de cognição.”
Tendo trabalhado na geração de código por mais de uma década, Gottschlich tem um problema semelhante com modelos grandes de linguagem. A programação exige a capacidade de resolver quebra-cabeças lógicos com precisão inabalável. Não importa o quanto os modelos de linguagem de grande porte possam aprender a imitar o que os programadores humanos fazem. Em sua essência, eles ainda são essencialmente máquinas caça-níqueis estatísticas, diz ele: “Não posso treinar um sistema ilógico para se tornar lógico”.
Em vez de treinar um modelo de linguagem grande para gerar código alimentando-o com muitos exemplos, a Merly não mostra ao seu sistema nenhum código escrito por humanos. Isso porque, para realmente criar um modelo capaz de gerar código, argumenta Gottschlich, é preciso trabalhar no nível da lógica subjacente que o código representa, e não no código em si. Portanto, o sistema da Merly é treinado em uma representação intermediária – algo como a notação legível por máquina para a qual a maioria das linguagens de programação é traduzida antes de ser executada.
Gottschlich não diz exatamente como isso se parece ou como o processo funciona. Mas ele faz uma analogia: “Há uma ideia na matemática de que os únicos números que precisam existir são os números primos, porque você pode calcular todos os outros números usando apenas os primos. Pegue esse conceito e aplique-o ao código”, diz.
Essa abordagem não apenas vai direto à lógica da programação, mas também é rápida, pois milhões de linhas de código são reduzidas a alguns milhares de linhas de linguagem intermediária antes que o sistema as analise.
Mudança de mentalidade
O que você pensa sobre essas abordagens rivais depende diretamente do que você deseja que os assistentes de codificação generativa sejam.
Em novembro, a Cosine proibiu seus engenheiros de usar ferramentas que não fossem seus próprios produtos. Agora, a empresa está vendo o impacto do Genie em seus próprios engenheiros, que muitas vezes se veem observando a ferramenta enquanto ela cria códigos para eles. “Agora você dá ao modelo o resultado que deseja e ele vai em frente e se preocupa com a implementação para você”, diz Yang Li, outro cofundador da Cosine.
Pullen admite que isso pode ser desconcertante, exigindo uma mudança de mentalidade. “Temos engenheiros realizando várias tarefas ao mesmo tempo, alternando entre janelas”, diz. “Enquanto o Genie está executando o código em uma, eles podem estar solicitando que ele faça outra coisa em outra.”
Essas ferramentas também possibilitam a criação de várias versões de um sistema ao mesmo tempo. Digamos que você esteja desenvolvendo um software que precisa de um sistema de pagamento integrado: você pode pedir a um assistente de codificação que experimente simultaneamente várias opções diferentes – Stripe, Mango, Checkout – em vez de ter que codificá-las manualmente, uma de cada vez.
O Genie pode ser deixado para corrigir bugs 24 horas por dia. A maioria das equipes de software usa ferramentas de relatório de bugs que permitem que as pessoas carreguem descrições dos erros encontrados. O Genie pode ler essas descrições e propor correções. Em seguida, uma pessoa só precisa revisá-las antes de atualizar a base de código.
Nenhum ser humano compreende os trilhões de linhas de código dos maiores sistemas de software atuais, diz Li, “e à medida que mais e mais softwares forem escritos por outros softwares, a quantidade de código só aumentará”.
Isso fará com que os assistentes de codificação que mantêm esse código para nós sejam essenciais. “O gargalo será a rapidez com que os humanos poderão revisar o código gerado por máquinas”, diz Li.
Qual é a opinião dos engenheiros da Cosine sobre tudo isso? De acordo com Pullen, pelo menos, muito boa. “Se eu lhe apresentar um problema difícil, você ainda pensará em como deseja descrever esse problema para o modelo”, diz ele. “Em vez de escrever o código, você precisa escrevê-lo em linguagem natural. Mas ainda há muito raciocínio envolvido nisso, portanto, você não está realmente tirando o prazer da engenharia. A coceira ainda é coçada.”
Alguns podem se adaptar mais rapidamente do que outros. A Cosine gosta de convidar possíveis contratados para passar alguns dias codificando com sua equipe. Há alguns meses, a empresa pediu a um desses candidatos que criasse um widget que permitisse aos funcionários compartilhar nas mídias sociais partes interessantes do software em que estivessem trabalhando.
A tarefa não era simples, exigindo conhecimento prático de várias seções dos milhões de linhas de código da Cosine. Entretanto, o candidato conseguiu realizá-la em questão de horas. “Essa pessoa que nunca tinha visto nossa base de código apareceu na segunda-feira e, na terça-feira à tarde, já tinha enviado algo”, diz Li. “Pensamos que ele levaria a semana inteira.” (Eles o contrataram).
Mas há outro ângulo também. Muitas empresas usarão essa tecnologia para reduzir o número de programadores que contratam. Li acredita que em breve veremos níveis de engenheiros de software. Em um extremo, haverá desenvolvedores de elite com salários milionários que poderão diagnosticar problemas quando a IA der errado. No outro extremo, equipes menores de 10 a 20 pessoas farão um trabalho que antes exigia centenas de programadores. “Será como os caixas eletrônicos transformaram os serviços bancários”, diz Li.
“Tudo o que você quiser fazer será determinado pela computação e não pelo número de funcionários”, diz ele. “Acho que é geralmente aceito que a era de adicionar mais alguns milhares de engenheiros à sua organização acabou.”
Unidades Warp
De fato, para Gottschlich, as máquinas que podem codificar melhor que os humanos serão essenciais. Para ele, essa é a única maneira de construirmos os vastos e complexos sistemas de software de que ele acredita que precisaremos no futuro. Como muitos no Vale do Silício, ele prevê um futuro em que os humanos se mudarão para outros planetas. Isso só será possível se conseguirmos que a IA crie o software necessário, diz ele: “O verdadeiro objetivo da Merly é nos levar a Marte”.
Gottschlich prefere falar sobre “programação de máquinas” em vez de “assistentes de codificação”, porque ele acha que esse termo enquadra o problema de forma errada. “Não acho que esses sistemas devam auxiliar os humanos – acho que os humanos devem auxiliá-los”, diz. “Eles podem se mover na velocidade da IA. Por que restringir seu potencial?”.
“Há um desenho animado chamado Os Flintstones em que eles têm esses carros, mas eles só se movem quando os motoristas usam os pés”, diz Gottschlich. “É mais ou menos assim que eu acho que a maioria das pessoas está fazendo IA para sistemas de software.”
“Mas o que Merly está construindo são, essencialmente, naves espaciais”, acrescenta. Ele não está brincando. “E não acho que as naves espaciais devam ser movidas por humanos em uma bicicleta. As naves espaciais devem ser movidas por um motor de dobra.”
Se isso parece loucura, é porque é. Mas há uma questão séria a ser levantada sobre o que as pessoas – que estão construindo essa tecnologia – acham que é realmente o objetivo final.
Gottschlich não é um caso isolado com sua visão de cérebro de galáxia. Apesar de seu foco em produtos que os desenvolvedores desejarão usar hoje, a maioria dessas empresas está de olho em um resultado muito maior. Visite o site da Cosine e verá que ela se apresenta como um “Laboratório de raciocínio humano”. Ela vê a codificação como apenas o primeiro passo em direção a um modelo de uso mais geral que pode imitar a solução de problemas humanos em vários domínios.
A Poolside tem objetivos semelhantes: A empresa afirma desde o início que está criando AGI. “O código é uma forma de formalizar o raciocínio”, diz Kant.
Wang invoca agentes. Imagine um sistema que possa criar seu próprio software para realizar qualquer tarefa em tempo real, pede ele. “Se você chegar a um ponto em que seu agente possa realmente resolver qualquer tarefa computacional que você queira por meio de software, isso é uma demonstração de AGI, essencialmente.”
Aqui na Terra, esses sistemas continuam sendo um sonho impossível. Ao mesmo tempo, a engenharia de software está mudando mais rapidamente do que muitos na vanguarda esperavam.
“Não estamos em um ponto em que tudo será feito por máquinas, mas estamos definitivamente nos afastando da função usual de um engenheiro de software”, diz Pullen, da Cosine. “Estamos vendo as faíscas desse novo fluxo de trabalho – o que significa ser um engenheiro de software no futuro.”
O post A segunda onda de codificação de IA está aqui apareceu primeiro em MIT Technology Review – Brasil.