Generating Complex Code Analyzers from Natural Language Questions
Este artigo apresenta o Merlin, um sistema que combina modelos de linguagem de grande escala com o framework de análise de programas CodeQL, utilizando uma abordagem iterativa de geração e auto-teste baseada em RAG para responder eficazmente a perguntas complexas em linguagem natural sobre grandes bases de código, melhorando significativamente a precisão e a eficiência das tarefas dos desenvolvedores.
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ê tem uma biblioteca massiva contendo milhões de livros (a base de código) escritos em uma linguagem muito específica e técnica. Você é um bibliotecário (o desenvolvedor) que precisa encontrar um padrão muito específico: "Encontre cada livro onde um personagem se apresenta antes de nascer completamente."
Fazer isso manualmente é impossível. Usar uma barra de pesquisa simples para procurar a palavra "nascer" (como grep) é inútil porque ignora o significado da frase. Pedir a um assistente de IA superinteligente (um Modelo de Linguagem Grande ou LLM) que leia toda a biblioteca e lhe diga a resposta frequentemente falha porque a biblioteca é grande demais para a IA manter em sua memória de uma só vez, ou a IA apenas chuta errado.
Aí entra o Merlin.
O Merlin é um novo sistema que atua como um tradutor e detetive superpoderoso. Ele fica entre você (que fala inglês natural) e um mecanismo de banco de dados muito estrito e poderoso chamado CodeQL (que entende perfeitamente a estrutura técnica do código).
Veja como o Merlin funciona, usando analogias simples:
1. O Tradutor (Linguagem Natural para CodeQL)
Você faz uma pergunta ao Merlin em inglês simples: "Mostre-me todos os lugares onde um construtor chama um método que pode ser alterado depois."
O Merlin não apenas chuta a resposta. Em vez disso, ele traduz sua pergunta em uma consulta precisa para o banco de dados CodeQL. Pense no CodeQL como uma enorme planilha estruturada de todo o seu código. O Merlin escreve um comando específico, semelhante ao SQL, para pedir a essa planilha os dados exatos que você precisa.
2. O "Auto-teste" (O Teste da Litígia)
Aqui está a parte complicada: Mesmo que o Merlin escreva uma consulta que pareça gramaticalmente correta, ela ainda pode estar logicamente errada. Pode pedir "maçãs" quando você quis dizer "frutas", ou pode ser muito exigente e não encontrar nada.
Para corrigir isso, o Merlin possui um recurso de auto-teste. Antes de pesquisar em sua biblioteca massiva, ele pede à IA para criar um exemplo pequeno e falso (um cenário "mock") para ver se a consulta funciona.
- A Analogia: Imagine que você está testando um detector de metais. Antes de atravessar uma cidade inteira, você atravessa um pequeno jardim com algumas moedas enterradas. Se o detector de metais apitar para as moedas, você sabe que está funcionando. Se ficar em silêncio, você sabe que o detector está quebrado e o conserta antes de desperdiçar tempo procurando na cidade.
- O Resultado: Se a consulta falhar nesse pequeno teste, o Merlin sabe que está quebrado e tenta novamente.
3. A "Consulta Assistiva" (A Lanterna do Detetive)
Às vezes, a consulta é sintaticamente perfeita, mas ainda não encontra nada porque a IA mal-entendeu um detalhe sutil.
O Merlin usa uma técnica chamada Consultas Assistivas.
- A Analogia: Imagine que você está procurando um tipo específico de pássaro em uma floresta, mas seus binóculos estão embaçados. Em vez de apenas olhar mais forte, você pede a um ajudante para gritar tudo o que ele vê nas árvores agora ("Vejo um pássaro vermelho, um pássaro azul, um esquilo...").
- Como ajuda: Ao ver essa lista de "testemunhas", a IA percebe: "Ah! Eu estava procurando por pássaros vermelhos, mas a floresta está cheia de pássaros azuis. Preciso mudar minha busca." Isso ajuda a IA a depurar sua própria lógica e encontrar a resposta correta.
4. Os Resultados: Por Que Isso Importa
Os pesquisadores testaram o Merlin contra outras ferramentas e desenvolvedores humanos.
- Encontrando a Agulha: O Merlin encontrou quase todos os bugs que ferramentas profissionais existentes encontraram, mas também encontrou muitos mais que as outras ferramentas perderam.
- Velocidade Humana: Em um estudo onde programadores reais tiveram que encontrar e corrigir bugs:
- Aqueles que usavam o Merlin foram 3,8 vezes mais precisos do que aqueles sem ele.
- Eles concluíram as tarefas 31% mais rápido.
- O "Porquê": Sem o Merlin, os programadores frequentemente ficavam presos fazendo buscas manuais e tediosas ou confiavam em IAs que lhes davam respostas erradas. O Merlin forneceu a eles uma lista clara e auditável de localizações e a lógica exata usada para encontrá-las, para que pudessem confiar nos resultados.
Resumo
O Merlin é como ter um tradutor que fala tanto "Inglês Humano" quanto "Lógica de Máquina", um inspetor de controle de qualidade que testa as instruções antes de enviá-las e um detetive que usa lanternas para descobrir por que uma busca falhou. Ele permite que desenvolvedores façam perguntas complexas sobre bases de código enormes e obtenham respostas confiáveis e precisas sem precisar ser especialistas na própria linguagem técnica de consulta.
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.