ProjAgent: Procedural Similarity Retrieval for Repository-Level Code Generation
O ProjAgent é um sistema de geração de código em nível de repositório que aumenta o desempenho ao recuperar funções baseadas em similaridade procedural por meio de um fluxo de trabalho agêntico e refinar saídas via feedback de análise estática, alcançando um Pass@1 de 41,14% no benchmark REPOCOD.
Artigo original sob licença CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo
Imagine que você esteja tentando escrever um novo capítulo para um romance de mistério massivo de 10.000 páginas. Você sabe o ponto da trama que precisa atingir, mas não conhece os nomes dos personagens, as regras específicas da cidade ou como o detetive costuma resolver crimes. Se você apenas adivinhar, pode acabar inventando um personagem que não existe ou quebrando as leis da cidade, arruinando a história. Isso é exatamente o que acontece quando uma Inteligência Artificial tenta escrever código para um grande projeto de software.
Por muito tempo, os assistentes de IA tentavam encontrar ajuda procurando por "semelhantes". Se você pedisse uma função para calcular a temperatura, a IA procuraria por outro código que usasse a palavra "temperatura" ou que parecesse semelhante na superfície. O artigo argumenta que isso é como tentar encontrar uma receita para um bolo apenas porque a outra receita também menciona "açúcar". Isso ignora a verdadeira magia: como o cozimento realmente acontece.
Os autores, Qihong Chen, Aaron Imani e Iftekhar Ahmed, construíram um novo sistema chamado ProjAgent. Eles descobriram que o código mais útil nem sempre é o código que parece igual; é o código que pensa da mesma maneira.
O "Pensar" vs. O "Falar"
O artigo sugere que o código possui duas camadas: as palavras que ele usa (como nomes de variáveis e comentários) e os passos reais que ele toma para resolver um problema (a lógica).
Imagine dois chefs. O Chef A está fazendo uma pizza e o Chef B está fazendo uma salada.
- O Jeito Antigo (Busca Léxica/Semântica): Se você pedir ajuda para fazer uma pizza, a IA antiga ignoraria o Chef B porque ele está fazendo uma salada. Ela apenas procuraria por outros chefs de pizza.
- O Jeito Novo (ProjAgent): O ProjAgent percebe que ambos os chefs têm que fazer a mesma coisa: picar ingredientes, verificar se estão frescos e colocá-los em uma tigela. Embora um esteja fazendo uma salada e o outro uma pizza, seus passos procedimentais são idênticos. O ProjAgent encontra o Chef B e diz: "Ei, veja como o Chef B verifica se a alface está fresca! Você pode usar essa mesma lógica para verificar se o seu tomate está fresco!"
O artigo descarta explicitamente a ideia de que a semelhança superficial (olhar para as palavras) é suficiente. Eles argumentam que confiar apenas em palavras ou no significado simples frequentemente perde os passos críticos de "como fazer", porque diferentes projetos usam nomes diferentes para as mesmas ações.
Como o ProjAgent Funciona: O Agente Detetive
O ProjAgent atua como um detetive superinteligente com uma ferramenta especial. Veja como ele resolve o mistério:
- Decomposição: Ele pega o novo código que você quer escrever e o divide em pequenos passos lógicos, como "verificar se o número é negativo" ou "converter as unidades".
- A Busca pelo "Pensamento": Em vez de apenas ler as palavras, o ProjAgent usa um truque especial para olhar para os "pensamentos ocultos" do modelo de IA. Ele remove o vocabulário sofisticado e olha apenas para a lógica pura. Ele encontra outro código no projeto que faz a mesma dança mental, mesmo que esteja escrito em uma parte completamente diferente da base de código.
- A Caçada do Agente: Se a primeira busca não encontrar o suficiente, um "agente" digital (um pequeno robô de IA) vai em uma caça ao tesouro pelos arquivos do projeto. Ele lê arquivos, procura funções e pergunta: "Existe algo aqui que pensa como isso?"
- Dupla Verificação: Para garantir que não foi enganado, o sistema usa uma ferramenta de "análise estática". Pense nisso como um corretor ortográfico para lógica. Ele verifica se o código realmente roda sem travar. Se a IA cometer um erro, o sistema diz: "Ops, isso não vai funcionar", e pede para a IA tentar novamente. Esse ciclo acontece até 10 vezes até que o código esteja sólido.
Os Resultados: Funcionou?
Os autores testaram o ProjAgent em um benchmark chamado REPOCOD, que contém 980 problemas do mundo real de 11 diferentes projetos de software.
- A Pontuação: O ProjAgent obteve uma pontuação Pass@1 de 41,14%. Isso significa que, na primeira tentativa, ele escreveu código funcional para cerca de 41 de cada 100 problemas.
- A Comparação: Isso superou os melhores métodos anteriores. Os métodos de "busca densa" antigos obtiveram apenas 28,83%, e a "busca esparsa" (procurar por palavras-chave) obteve 26,58%. Mesmo um sistema de alto nível chamado SpecAgent alcançou apenas 34,52%.
- A Prova: O artigo sugere que o maior impulso veio de encontrar aqueles passos "procedimentalmente semelhantes". Quando removeram a busca procedural, a pontuação caiu para 25,76%. Quando removeram a busca semântica (a parte de correspondência de palavras), caiu para 32,29%. Isso prova que você precisa de tanto do "como" quanto do "o quê" para ter sucesso.
O Que o Artigo Não Alega
É importante saber o que este artigo não diz.
- Ele não afirma ter resolvido todos os problemas de codificação. A pontuação é de 41,14%, o que significa que ele ainda falha na maioria das vezes.
- Ele não diz que isso funciona para todas as linguagens de programação. Os testes foram feitos apenas em projetos Python.
- Não afirma que o "agente" é perfeito. Os autores admitem que, às vezes, o agente fica sem tempo ou memória e não consegue encontrar o melhor código, sugerindo que ferramentas de exploração melhores ainda são necessárias.
A Conclusão
O artigo sugere que, para escrever um bom código para grandes projetos, a IA precisa parar de apenas procurar por palavras que combinam e começar a procurar por padrões de pensamento. Ao encontrar códigos que resolvem problemas da mesma maneira, mesmo que as palavras sejam totalmente diferentes, o ProjAgent ajuda a IA a escrever software melhor e mais confiável. É um passo à frente, mas a jornada para a geração de código perfeita ainda está em andamento.
Afogado em artigos na sua área?
Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.