10 pontos por GN⁺ 2025-03-04 | 1 comentários | Compartilhar no WhatsApp
  • Muitos desenvolvedores tentam usar LLMs para escrever código, encontram alucinações e perdem a confiança
    • É comum que um LLM invente métodos ou bibliotecas que não existem
    • Mas, no código, as alucinações são o tipo menos perigoso de alucinação
  • O caso mais perigoso é quando o LLM produz um erro que não é detectado imediatamente pelo compilador ou interpretador
    • Um método alucinado geralmente gera erro assim que é executado, então é fácil de identificar
    • Em alguns casos, também é possível corrigir automaticamente ao reenviar a mensagem de erro ao LLM
  • Ao contrário das alucinações em texto comum, no código é possível verificar os fatos por meio da execução
  • LLMs com recursos automáticos de correção de erros
    • Ferramentas como ChatGPT Code Interpreter e Claude Code executam o código escrito pelo LLM, detectam erros e fazem correções por conta própria
    • Avaliar código gerado por LLM sem sequer executá-lo é ineficiente
  • Alguns desenvolvedores tentam rejeitar a tecnologia inteira porque o LLM gerou métodos alucinados
    • Mas, para usá-la de forma eficaz, aprendizado e experimentação são indispensáveis
    • O autor pesquisa escrita de código com IA há mais de 2 anos e ainda continua aprendendo novas técnicas
  • Teste manual do código é indispensável
    • O fato de o código rodar normalmente não garante que ele funcione como esperado
    • Nem revisão de código nem testes automatizados conseguem validar completamente a correção do código
    • O processo de executar e verificar diretamente é essencial
    • Como o código gerado por LLM costuma ser muito legível, há risco de baixar a guarda
    • O mesmo vale para código escrito por pessoas: não se deve confiar antes de executá-lo pessoalmente
  • Como reduzir alucinações
    • Usar outro modelo: escolher um modelo com dados de treinamento mais ricos para determinada plataforma
      • Ex.: Claude 3.7 Sonnet (com thinking mode ativado), OpenAI o3-mini-high, GPT-4o (com Python Code Interpreter)
    • Aproveitar o contexto: mesmo que o LLM não conheça uma biblioteca específica, ele pode aprender padrões se receber exemplos de código
    • Escolher tecnologias estáveis: bibliotecas mais antigas têm maior chance de serem melhor compreendidas pelo LLM
  • A importância da revisão de código
    • O texto rebate a ideia de que "se é preciso revisar todo o código escrito por um LLM, então é mais rápido escrever tudo manualmente"
    • Isso também pode ser uma fala que revela pouca habilidade de revisão de código
    • Revisar código gerado por LLM pode ser uma ótima oportunidade para melhorar suas habilidades
  • Bônus: feedback do Claude 3.7 Sonnet
    • O autor pediu ao "extended thinking mode" do Claude 3.7 Sonnet para revisar um rascunho do post
    • Ele pediu para "avaliar se a lógica do texto era convincente, o que poderia ser melhorado e se faltava algo"
    • O Claude ajudou a suavizar o tom do rascunho
    • Link da conversa com o feedback do Claude

1 comentários

 
GN⁺ 2025-03-04
Opinião do Hacker News
  • O autor concordou com o texto anterior, mas não concorda com este

    • Discorda da opinião de que "se eu tiver que revisar todo o código escrito por LLM, é mais rápido eu mesmo escrever"
    • Não concorda com a afirmação de que falta investimento na capacidade de ler, entender e revisar código de outras pessoas
    • A revisão varia conforme a especialização e a confiabilidade do autor, e revisar contribuições anônimas é diferente
    • É importante inferir e comparar a intenção e a abordagem do código, e no caso de LLMs esse escopo é limitado
    • Motivação é importante, e nem todo desenvolvedor gosta de revisar código
    • O código de LLM não tem aspecto social, e outra pessoa ainda precisa revisar as mudanças
  • Mesmo que o código gerado por LLM funcione bem, se você não for o autor é difícil encontrar bugs ou falhas lógicas

    • Se você vê programação não como implementar um plano bem projetado, mas como encaixar peças, há preocupação com um algoritmo encaixando peças por adivinhação
    • LLMs não assumem riscos que humanos podem assumir, e podem não entender o significado de um bloco de código em um contexto específico
  • O código gerado por LLM é limpo, mas faz você gastar mais tempo com QA e limpeza

    • O fato de o código funcionar bem e não ter erros não significa que esteja fazendo a coisa certa
    • Apenas executar e testar o código não prova sua correção; é preciso raciocinar logicamente
  • The Primeagen e Casey Muratori revisam a saída dos geradores de código LLM mais recentes

    • Em teoria, o desenvolvimento deveria ser fácil ao fornecer tarefas bem representadas nos dados de treinamento do LLM
    • Na prática, o desenvolvimento iterativo converge para código inútil, e o LLM passa a não conseguir avançar mais
  • Outra categoria de erro que Simon ignorou é a alucinação em que o modelo esquece funcionalidades

    • Em comparação com o lado positivo de o código compilar, o lado negativo de esquecer funcionalidades centrais é mais difícil
    • A funcionalidade do código pode mudar levemente dependendo de código que se espera estar fora da janela de conversa/contexto
  • Métodos alucinados são um obstáculo pequeno, e quando as pessoas reclamam disso parte-se do pressuposto de que passaram o mínimo de tempo aprendendo a usar o sistema de forma eficaz

    • Essa é uma suposição muito errada, e as pessoas veem as alucinações e pensam: "se nem as coisas mais fáceis ele acerta de forma consistente, não dá para confiar nas mais difíceis"
  • A alucinação em si não é o maior risco apresentado por LLMs

    • O risco maior é que chatbots podem persuadir humanos a se machucarem
    • Já houve casos disso, e não há vontade de compartilhar ideias sobre o que poderia ser ainda mais perigoso
  • É menos perigoso apenas dentro do contexto limitado de erros de compilação

    • Se um programador inventasse uma biblioteca inteira para evitar o esforço de encontrar a solução real, isso seria ainda mais irritante
    • Se você trata alucinação apenas como uma perda de velocidade, está subestimando o que o LLM realmente deveria fazer
  • É preciso muito esforço para obter bons resultados com LLMs

    • Isso atravessa o hype
    • Fica a dúvida sobre para que os LLMs são úteis e o que se pode esperar se for preciso aprender por anos para obter resultados não confiáveis
  • Experiência escrevendo código para encontrar a clínica 'principal' de um paciente em um centro médico

    • Era preciso encontrar a consulta mais recente considerando apenas consultas clínicas
    • Se não houvesse consulta clínica, era preciso encontrar a consulta mais recente de qualquer tipo
    • O código foi escrito ordenando os dados, mas o ChatGPT entendeu a ordenação ao contrário durante a documentação
    • Esse é um erro muito pior do que "o código não executa"