- "O experimento confuso que mudou minha forma de pensar sobre análise de código com IA"
- Observei situações em que IAs existentes frequentemente falhavam ao analisar codebases em React
- Percebi que a causa estava no método de analisar apenas linha por linha, como um desenvolvedor júnior lendo código pela primeira vez
A diferença entre a época do bootcamp e a mentalidade sênior
- Na fase júnior, é comum ler os arquivos em sequência, linha por linha, e logo se perder
- Desenvolvedores sêniores usam a seguinte abordagem ao revisar PRs grandes
- Verificam primeiro os arquivos principais
- Agrupam e entendem as mudanças por funcionalidade
- Primeiro compreendem a arquitetura como um todo e só depois examinam os detalhes de implementação
- Decidi aplicar essa abordagem à IA
O experimento
- Tentei uma abordagem de agrupar arquivos por funcionalidade e fornecer primeiro à IA informações de contexto sobre cada grupo
- No código de exemplo, defini a interface
FileGroup e processei os arquivos agrupando-os de acordo com a funcionalidade relacionada e o tamanho dos arquivos
- Montei prompts para orientar a IA em nível de grupo sobre “que área funcional é essa e no que ela deve prestar mais atenção”
O momento da mudança surpreendente
- Antes, a IA respondia de forma simples, como “inclui lógica de autenticação com token JWT”
- Depois, passou a oferecer insights de nível sênior, como “impactos em conexões WebSocket e possível condição de corrida em PRs mesclados recentemente”
- A IA começou a apontar questões considerando o contexto do sistema como um todo
O que realmente mudou
- O ponto principal não foi usar um modelo de machine learning mais complexo, mas dar à IA a ordem de raciocínio de um desenvolvedor sênior
- Contexto primeiro: começar entendendo o sistema inteiro
- Correspondência de padrões: agrupar arquivos semelhantes para encontrar lógica repetida
- Análise de impacto: reconhecer o efeito das mudanças sobre o sistema inteiro
- Entendimento do histórico: rastrear até os motivos e o contexto de mudanças anteriores no código
Efeitos colaterais inesperados
- Em vez de apenas corrigir os pontos desejados, a IA também passou a captar insights como
- Identificação de blocos de código duplicados por copiar e colar
- Alertas sobre padrões inconsistentes de tratamento de erros
- Detecção de possíveis gargalos de desempenho
- Sugestões de melhorias de arquitetura com base em padrões de uso
Por que isso importa
- IDEs baseadas em IA recentes estão focadas em gerar código automaticamente
- Mas fazer apenas sugestões sem o contexto do sistema inteiro pode ser tão arriscado quanto agir como “um desenvolvedor júnior que acabou de entrar no time”
- O que realmente importa é a “compreensão profunda do código”
Perguntas que ainda restam
- O problema de decidir quando atualizar e quando manter o contexto (informações históricas)
- Como reagir quando forem encontrados padrões conflitantes
- Como mostrar ao usuário resultados de análise com alto grau de incerteza
Direção futura
- Estou pensando se também será possível ensinar à IA sensibilidades como as de um desenvolvedor sênior, por exemplo
- A capacidade de detectar dívida técnica com antecedência
- A habilidade de propor melhorias arquiteturais de forma proativa
- A capacidade de detectar problemas de segurança a partir de padrões de uso
- A sensibilidade para perceber regras informais dentro da equipe
- O objetivo final não é simplesmente gerar “mais código”, mas ensinar “como entender profundamente todo o código como um desenvolvedor sênior”
3 comentários
As perguntas úteis para analisar e melhorar uma base de código não já são meio padronizadas? Parece que o autor está bastante empolgado.
Parece estar no mesmo contexto de usar o cursor para explicar a visão geral do projeto no notepad.
Opiniões no Hacker News
As pessoas estão críticas nos comentários. O texto aborda um resultado curto e positivo sobre a possibilidade de uma nova ferramenta, incluindo reflexões honestas e razoáveis
Este é mais um exemplo de LLM fazendo coisas impressionantes. No entanto, construir um sistema que funcione de forma consistente e precisa para todas as entradas é muito difícil
Deve haver lições aqui para sistemas de agentes melhores na escrita de código
Li a primeira linha do texto e me senti um alienígena. Eu teria que ler o texto inteiro, mas ler o código existente de forma sequencial parece estranho
Isso enfatiza a importância do fator humano. Sem compreensão contextual da codebase, não dá para saber o significado dos alertas da IA
É difícil impedir que a IA invente APIs que não existem. Quando funciona bem, é ótimo, mas na maior parte do tempo não funciona
Contexto e compreensão do código são importantes para melhorar a qualidade do código gerado por LLMs
Como na reclamação de John McCarthy, isto é uma história, não um experimento ou uma prova
O resultado é impressionante. Há críticas sobre estilo e uniformidade, mas o resultado parece útil
Parece que uma parte importante dessa tecnologia ficou de fora do texto. Não há implementação de
getFileContext()eshouldStartNewGroup()