1 pontos por GN⁺ 2024-01-03 | 1 comentários | Compartilhar no WhatsApp
  • ChatGPT e LLMs locais se tornaram ferramentas que, para programadores experientes, reduzem trabalhos desgastantes mais do que a escrita de código em si, como explorar documentação, aprender APIs complexas e escrever programas descartáveis
  • LLMs não são inteligências sobrenaturais; eles fazem interpolação de forma limitada dentro do espaço dos dados de treino, mas em áreas como programação, onde há muitos dados de boa qualidade, acabam sendo úteis como um “idiota que sabe muito”
  • Em problemas verificáveis, como transformação de tensores em PyTorch, cliente BLE em Objective-C no macOS, interpretação de entradas e saídas de modelos ONNX e scripts de análise de CSV, o GPT-4 reduz bastante o tempo de trabalho
  • Em tarefas que exigem raciocínio complexo, como programação de sistemas em C e implementação de algoritmos, aparecem limitações, como no projeto de hashes para Bloom filter e na interpretação do formato de quantização Q6_K do llama.cpp
  • Se grande parte da programação consiste em repetir padrões existentes com pequenas variações, então passa a ser mais importante saber usar bem LLMs e descrever problemas com clareza

Por que programadores experientes usam LLMs

  • O objetivo de usar LLMs não se limita a escrever código mais rápido
    • buscar documentação incomum
    • aprender APIs excessivamente complexas
    • escrever programas que serão jogados fora em poucas horas
    • lidar com detalhes intelectualmente pouco interessantes
  • Como o Google virou um espaço de busca cheio de spam, os LLMs se tornaram uma rota alternativa para obter rapidamente a informação necessária
  • O uso de LLMs aumentou em código de alto nível, como Python, mas é muito menor em código C
  • A diferença importante está em saber distinguir quando usar LLM acelera o trabalho e quando, pelo contrário, o torna mais lento
  • LLMs, assim como Wikipedia ou aulas no YouTube, ajudam muito quem tem vontade, capacidade e disciplina, mas podem ter limites para quem já está ficando para trás

LLMs não são onipotentes nem meros papagaios

  • O funcionamento interno de redes neurais e LLMs ainda é bastante opaco
  • Alguns especialistas em IA subestimaram os LLMs, tratando-os como Markov chains avançadas ou sistemas que apenas repetem variações dos dados de treino, mas essa visão de “papagaio” foi em grande parte abandonada diante das evidências
  • Por outro lado, também é incorreto atribuir aos LLMs capacidades sobrenaturais que não existem na realidade
  • LLMs conseguem interpolar de forma limitada dentro do espaço formado pelos dados vistos no treinamento
    • conseguem escrever programas que nunca viram exatamente antes
    • conseguem misturar várias ideias que aparecem com frequência nos dados de treino
    • podem falhar feio quando é necessário um raciocínio sutil
  • Apesar dessas limitações, LLMs podem ser vistos como a maior conquista da história da IA

Um assistente de programação como “idiota que sabe muito”

  • LLMs podem produzir raciocínio básico e frequentemente impreciso, alucinações e geração de fatos inexistentes
  • Ao mesmo tempo, em áreas com muitos dados de boa qualidade, como programação, funcionam como um savant com conhecimento vastíssimo
  • Talvez não sejam bons o bastante como colega de pair programming, mas são úteis numa dinâmica em que o usuário faz perguntas e valida as respostas
  • Antes, era possível fazer muita coisa conhecendo algumas linguagens, algoritmos clássicos e bibliotecas centrais
  • Hoje, a explosão de frameworks, linguagens e bibliotecas aumentou muito a complexidade, e nesse ambiente um “idiota que sabe tudo” se torna um colega útil

Casos de sucesso em código de alto nível e interpretação de dados

  • Ao migrar de Keras para PyTorch, o LLM ajudou a escrever o código necessário para montar o modelo sem precisar estudar a documentação do PyTorch do zero
    • o usuário já conhecia conceitos como embedding e residual network
    • foi eficaz apresentar com clareza a estrutura de modelo necessária e as perguntas relevantes
  • O GPT-4 recebeu o modelo em PyTorch e o formato de batch, e escreveu o código para fazer o reshape dos tensores de acordo com a entrada da rede neural
    • o usuário verificou no CLI do Python se as dimensões dos tensores e os batches estavam corretos
  • Ao criar um cliente BLE para um dispositivo baseado em ESP32, ele escreveu rapidamente código em Objective-C para usar a API nativa do macOS
    • concluiu-se que bindings Bluetooth multiplataforma em geral não seriam utilizáveis
    • foi preciso voltar a lidar com a API BLE em Objective-C e com detalhes de Objective-C usados muito tempo atrás
    • o código final está em SerialBTE.m
  • Embora o LLM não tenha escrito diretamente a maior parte do código, ele explicou a causa do problema e formas de resolvê-lo, acelerando bastante a implementação
  • Esse programa auxiliar tinha baixo retorno em relação ao esforço, então é bem possível que sem ChatGPT ele nem tivesse sido tentado

Interpretação de modelos ONNX e escrita de programas descartáveis

  • Ao usar um convnet em formato ONNX com pouca documentação, o LLM interpretou o funcionamento com base nos metadados de entrada e saída e nos valores brutos de output de imagens de teste
    • no início, não se sabia o formato nem o tamanho da imagem de entrada
    • a saída não era uma simples classificação binária, mas composta por centenas de valores
    • o ChatGPT supôs que a saída poderia ser caixas normalizadas indicando áreas de possíveis defeitos na imagem e a probabilidade de defeito
    • após algumas interações, foram produzidos um script de inferência em Python e o código de conversão do tensor de entrada
  • Em “programas descartáveis”, às vezes vale deixar o LLM escrever o código inteiro
  • Para visualizar a loss curve durante o treino de uma pequena rede neural, o GPT-4 viu o formato do CSV e gerou plot.py
    • foi pedido que, ao receber vários arquivos CSV na linha de comando, o script comparasse a validation loss curve de cada experimento
    • o trabalho todo levou 30 segundos
  • Um programa em pandas para ler relatórios CSV do AirBnB, agrupar por apartamento, mês e ano, e calcular o aluguel médio mensal considerando taxa de limpeza e número de noites também funcionou de primeira
  • Como esses programas são tediosos e pouco interessantes de escrever, deixá-los com o LLM permite que o usuário foque no que importa

Limitações que aparecem em C e programação de sistemas

  • Ao escrever programas em C, o LLM quase sempre é usado apenas como uma forma mais conveniente de documentação
  • Em programação de sistemas, é preciso raciocínio complexo, e os LLMs atuais frequentemente falham justamente aí
  • Quando foi pedido para implementar um Bloom filter, o GPT-4 recebeu a condição de 100.000 elementos e probabilidade máxima de false positive de 5%, mas não entregou uma boa implementação
    • usou apenas duas hash functions parecidas entre si
    • faltou uma abstração para gerar K hashes suficientemente decorrelacionados a partir da mesma string
    • quando se pediu explicitamente que produzisse N saídas decorrelacionadas, ele sugeriu uma hash function melhor
  • O GPT-4 conseguia escrever uma função de hash mais adequada quando o problema era dividido em subproblemas menores, mas não conseguiu aplicar essa própria ideia ao projeto completo do Bloom filter
  • Esse resultado pode ser visto como efeito combinado de raciocínio fraco, pouca disponibilidade de material sobre o tema e mistura com material de baixa qualidade

Diferença entre modelos locais e modelos grandes

  • Em problemas de programação de sistemas, a diferença entre modelos pequenos e grandes fica clara
  • O Mixtral, no mesmo problema de hash_id, sugeriu acrescentar hash_id ao final do resultado do hash, o que foi considerado uma solução muito ruim
  • O resultado com o deepseek-coder 34B quantizado em 4 bits e executado num MacBook M1 Max foi melhor
    • o usuário forneceu a pista de que adicionar hash_id no fim piorava a distribuição
    • o modelo identificou que a simples soma podia ser a causa do problema
    • sugeriu alternativas que misturam hash_id com operações bitwise, como XOR
  • Esse caso se aproxima mais de identificar a causa do problema e propor uma solução de um jeito difícil de obter apenas com documentação ou busca no Google
  • Mesmo assim, para um programador de sistemas experiente, LLMs ainda quase nunca entregam soluções realmente satisfatórias

O caso da interpretação do formato Q6_K no llama.cpp

  • O projeto ggufflib é uma biblioteca para ler e escrever arquivos no formato GGUF, usado pelo llama.cpp ao carregar modelos quantizados
  • A codificação quantizada armazena os bits de cada quant de forma complexa por razões de desempenho
  • No começo, tentou-se entender a codificação com o ChatGPT, mas fazer reverse engineering diretamente no código do llama.cpp foi muito mais rápido
  • Mesmo com uma função pequena o suficiente para caber no contexto do GPT-4, o resultado de reconstruir a documentação do formato a partir das declarações de structs e da função de decoding foi inútil
  • Mesmo ao pedir uma explicação do formato Q6_K, ele não conseguiu descrever claramente como os bits lower/upper são armazenados em ql e qh dependendo da posição do weight
    • mesmo quando foi pedido uma função explicando uma forma de armazenamento mais simples, os índices estavam errados
    • o tratamento de sign extension de 6 bits para 8 bits também estava errado
  • No fim, esse trabalho foi resolvido com papel e caneta, leitura de código e rastreamento dos bits extraídos pelo decoder
  • Ainda assim, espera-se que esse tipo de tarefa também entre no alcance dos modelos em poucos meses, talvez só com um pouco mais de scaling e sem grandes avanços conceituais

A natureza do trabalho de programação e a habilidade de usar LLMs

  • Hoje, uma parte considerável da programação consiste em repetir a mesma coisa com pequenas variações, e muitas vezes sem exigir raciocínio de alto nível
  • LLMs são bastante fortes nesse tipo de programação repetitiva, mas a limitação de tamanho de contexto ainda é uma restrição importante
  • Vale pensar se continuar escrevendo apenas programas do tipo que um LLM já consegue fazer parcialmente ainda será uma boa posição daqui a 5 ou 10 anos
  • A capacidade de raciocínio dos LLMs é fraca e incompleta, mas é difícil explicar os resultados observados tratando-os apenas como repetidores de palavras
  • O objetivo de treinamento de prever o próximo token força a criação de algum tipo de modelo abstrato, e esse modelo é fraco, cheio de lacunas e incompleto

Por que usar LLMs agora

  • Há poucos motivos para não usar LLMs em programação
  • A capacidade de fazer as perguntas certas aos LLMs se torna uma habilidade importante
  • Saber explicar problemas com clareza é útil não só com LLMs, mas também ao se comunicar com pessoas
  • Muitos programadores podem ser excelentes em áreas específicas e ainda assim ter dificuldades de comunicação
  • Num cenário em que o Google ficou mais difícil de usar, LLMs também funcionam bem como documentação comprimida
  • O valor prático dos LLMs está em fazer o usuário aprender menos diretamente esse tipo de “junk knowledge”, como protocolos de comunicação ambíguos ou detalhes complexos de bibliotecas

1 comentários

 
GN⁺ 2024-01-03
Opiniões no Hacker News
  • O ponto central é este trecho: “Eu conseguiria ter feito sem o ChatGPT? Claro que provavelmente sim, mas o fato de que teria levado mais tempo não é a parte mais interessante. A verdade é que não teria valido a pena, então eu nem teria tentado”
    Na assistência a código, o verdadeiro potencial dos LLMs está em reduzir a barreira para começar novas tarefas, fazendo com que coisas que ficariam indefinidamente na pilha de projetos futuros sejam de fato encaradas e concluídas
    A internet e o open source tiveram um efeito parecido: com o tempo, mesmo projetos pelos quais alguém tinha interesse mas não executou acabaram tendo problemas semelhantes resolvidos por outras pessoas em grau suficiente para serem reutilizados ou adaptados, causando uma explosão de apps e bibliotecas úteis
    Concordo com o autor quando ele diz que LLMs, sozinhos, não são tão competentes, mas para pessoas com habilidades básicas e motivação eles se tornam amplificadores

    • Mesmo além da “barreira para começar”, muitas coisas que exploro com o ChatGPT eram, no início, apenas curiosidades, sem intenção real de avançar
      Aí percebo que dá para fazer com muito menos esforço do que eu esperava
      Trocar ideias com a pessoa certa pode ter um efeito parecido, mas não existe alguém que não precise conhecer completamente o domínio do problema e ainda assim consiga dar contribuições relevantes 24 horas por dia, a um clique
    • Sinto que fiquei bastante de fora dessa onda dos LLMs
      Eles me ajudaram em algumas coisas, mas normalmente, quando chego ao ponto em que não sei o que estou fazendo, o modelo também não sabe melhor do que eu
      Fora isso, é difícil montar um prompt mais rápido do que simplesmente escrever o código eu mesmo
      Fico me perguntando se sou eu que não sei usar essas ferramentas
    • Mas talvez o efeito de diversão de usar uma tecnologia nova e badalada como LLMs forneça justamente a energia inicial necessária para tarefas que, de outro modo, seriam tediosas
    • Recentemente trabalhei em um projeto para criar um analisador avançado de arquivos de classe Java
      Eu conhecia razoavelmente a biblioteca ow2 asm, mas ela me poupou muito tempo que eu gastaria procurando para lembrar o formato exato dos descritores
      Também me ajudou a entender por que outras bibliotecas de análise estática não eram suficientes para mim, por causa da forma como lidam com estado
      Para mim, o ChatGPT faz duas coisas: reduz buscas triviais no StackOverflow e a exploração de código de bibliotecas para responder a perguntas específicas, e me ajuda, na fase de pesquisa antes de começar um projeto, a entender a viabilidade da abordagem que pretendo seguir
    • Ouvi dizer que, entre pessoas com TDAH, muitas afirmam que os LLMs mudaram suas vidas muito mais do que para pessoas neurotípicas
      Quando se tem TDAH severo, as coisas simples são as mais difíceis, e até tirar o lixo ou abrir correspondência pode ser quase impossível
      A conversa na cabeça fica gritando por horas para simplesmente fazer aquilo, mas o corpo não obedece
      Chamam isso de disfunção executiva, mas é um tormento na minha vida
      Só o fato de um LLM conseguir me fazer começar a tarefa já é algo enorme
  • Sobre programação, concordo totalmente
    O ponto ideal de uso de LLMs é quando você já conhece o assunto o suficiente para validar o resultado e sabe o bastante para explicar em detalhes o que quer, de preferência indo direto ao essencial
    Eles fazem você ir mais rápido, fazem você realizar coisas que talvez não fizesse, e ajudam muito a criar programas pequenos, valiosos e descartáveis
    Outra área em que foram muito úteis foi a exploração de assuntos completamente novos, programação ou não
    Basta dizer que você não sabe muito, que os detalhes não são indispensáveis, mas que quer conversar sobre aquilo e precisa de ajuda para organizar o pensamento
    É especialmente útil para quem está disposto a pesquisar mais com base no que ouviu ou fazer novas perguntas
    A porta de entrada para muitas áreas está em entender a terminologia básica, ouvir quais distinções as pessoas fazem e por quê, e saber quem são as autoridades naquele tema

    • Por outro lado, para desenvolvedores juniores, é igualmente prejudicial, só que na direção oposta
      Surge a situação de ficar cutucando até produzir um monstro que não se entende, mas que pelo menos passa no build
      Quem está aprendendo precisa de ajuda, mas a ajuda oferecida por LLMs no formato do Copilot não é a forma correta
      Seria interessante treinar um modelo tipo Copilot projetado como um parceiro que faz perguntas de esclarecimento e define a solução em conjunto, em vez de tentar gerar código a qualquer custo a partir de perguntas vagas ou mal especificadas de um júnior
    • No mês passado, usei LLMs para coisas que eu não sabia e que também não conseguia encontrar facilmente
      Todas as vezes eles apresentaram algo sutilmente errado ou até uma premissa alucinada, e isso me fez perder tempo até perceber que estava errado
      Se não fosse a atitude de confiança indevida nas respostas erradas, eu poderia dizer que não foi muito pior do que juntar as coisas que eu já sabia; mas, por enquanto, é aceitável como substituto de rubber duck ou autocompletar
    • O que eu realmente quero com frequência é um LLM personalizado como o GPT, mas treinado para uma linguagem, framework ou tema específico
      Seria ótimo entrar no site de uma linguagem nova e ter um LLM com quem conversar e a quem fazer perguntas sobre a documentação para ajudar na compreensão
      Melhor ainda se ele fosse treinado com exemplos reais de código daquela linguagem ou framework e ajudasse ali mesmo a escrever um novo programa ou função
      Se estivesse conectado a um REPL online e ajudasse inline, seria uma vantagem ainda maior
    • One Pagers e Six Pagers escritos a partir de critérios frouxos ajudam a refinar esses critérios e, em alguns casos, revelam abordagens que originalmente não teriam chamado atenção
  • Acho que o aspecto mais subestimado dos LLMs é o papel de algo como um desenvolvedor que sabe tudo, que o texto até toca, mas não aborda diretamente
    Por mais sênior que um programador seja, ele inevitavelmente acaba se deparando com alguma tecnologia sobre a qual sabe quase nada
    Todo mundo é júnior em alguma área
    Mesmo que alguém seja um deus de Win32, C++ e COM, pode travar diante de scripts NSIS obscuros ao empacotar software
    Mesmo tendo criado apps web por 25 anos e participado do comitê da linguagem PHP, se receber a tarefa de implementar um padrão ISO obscuro que se comunica com redes de cartão de crédito, talvez nunca tenha se comunicado com redes de cartão de crédito nesse nível
    Mesmo tendo feito apps iOS desde o primeiro iPhone, e antes disso apps para Mac, trabalhado alguns anos na Apple, decorado a maioria das APIs do iOS e até projetado algumas delas, se receber a tarefa de implementar suporte a CalDAV em um app, pode nem saber o que é CalDAV
    Nessas situações, um LLM pode ajudar e, mesmo que não escreva todo o código, ao menos pode apontar a direção correta

    • Há casos ainda piores
      Depois de encher a cabeça com outra tecnologia, chega uma hora em que você precisa se lembrar de algo que aprendeu antes, mas deixou de lado por causa de tecnologias novas, e revisar aquilo
      É uma sensação estranha
      Você naturalmente acompanha a mediana do que a empresa onde trabalha faz, até se ver numa situação em que pensa: “faz um tempo” que não mexo com CSS
      Talvez precise estudar no fim de semana para recuperar a intuição sobre dataclass em Python
    • A essência do GPT é ser o melhor googler do mundo
      Se é algo que dá para encontrar no Google, há uma boa chance de que um LLM encontre e organize mais rápido e melhor
    • Mesmo que hoje ele não consiga fazer isso, amanhã certamente conseguirá, e já é hora de procurar outra profissão
      Felizmente, é provável que eu já esteja aposentado por essa época
  • É surpreendente a tendência de dizer que “a maior parte do código foi escrita recortando e colando do ChatGPT”
    Continuo chocado com tanta gente tolerando um fluxo de trabalho tão doloroso
    O autor do texto original claramente não é um iniciante programando acima do próprio conhecimento com GPT, mas sim um engenheiro experiente
    Normalmente seria alguém que se importaria com o fluxo de trabalho de programação e com a usabilidade e eficiência das ferramentas, mas ainda assim muita gente aguenta ficar copiando e colando código entre o GPT e arquivos locais
    Esse fluxo de trabalho frustrante foi o que inicialmente me motivou a criar o aider
    O aider compartilha o repositório git local com o GPT, permitindo que novo código e alterações sejam aplicados diretamente aos arquivos
    Ele também compartilha com o GPT o contexto relevante do código, então é possível escrever código que se integra ao projeto
    Assim, ele permite não só trechos de código isolados fáceis de copiar e colar, mas também contribuições mais refinadas
    No fim, vira um fluxo de trabalho fluido de programação em par, em que eu e o GPT editamos arquivos juntos enquanto conversamos
    https://github.com/paul-gauthier/aider

    • Eu gosto do aider
      Mas existe alguma forma de usá-lo só para conversar sobre código?
      Uso LLMs para discutir os prós e contras de várias abordagens ou para destrinchar um problema como se fosse um rubber duck
      Para isso, preciso copiar o código, e o aider é focado em aplicar mudanças, então não se encaixou muito bem nesse uso
      Normalmente só decido se vou aplicar uma mudança depois de várias idas e vindas sobre qual é a abordagem correta
    • “O autor do texto original claramente é um engenheiro experiente”?
      Ele é o criador do Redis
    • A interface web do ChatGPT é útil para muito mais coisas além de programação
      Se você já paga a assinatura, faz sentido copiar e colar em vez de pagar a mais pela API
      Além disso, cada pessoa tem um critério diferente para avaliar se o ganho de eficiência vale depender do projeto de outra pessoa, e esse tipo de projeto ainda corre o risco de virar pago ou ser abandonado
    • Gosto muito da ideia do aider, mas quando tentei, não funcionou
      O primeiro arquivo real com que testei era grande demais e estourou; o segundo arquivo real também ainda era grande demais
      Fiquei surpreso que o aider aparentemente não consiga dividir arquivos grandes para caber no limite de tokens
      O limite de tokens do GPT não comporta arquivos-fonte tão grandes
      Se eu tenho que escolher o arquivo em que vou trabalhar e ainda fazer uma cirurgia para o GPT não engasgar, não sei se isso economiza tempo em relação a usar o Copilot no IDE
      No começo, achei que lidar com o problema “tamanho do código ≫ limite de tokens” fosse a principal contribuição do aider, mas parece que não era
      Ainda quero tentar de novo, mas o aider está naquela categoria desfavorável em que é preciso “encontrar um problema e uma base de código simples o bastante para o aider dar conta”
      Já o Copilot e o ChatGPT aparecem onde eu estou todos os dias no trabalho real, em bases de código reais, com todos os seus defeitos, e me ajudam
    • Quero dizer obrigado por ter criado o Aider
      Acho que, com os recursos atuais, ele cobre muito bem os casos de uso de chat e confirmação
      Os comentários aqui talvez não reflitam a alta satisfação da maioria dos usuários de software
      O Aider ajuda a executar de fato o caso de uso que antirez descreveu no texto
      Especialmente conforme a pessoa melhora em fazer as perguntas certas ao LLM, como disse antirez
  • Nos últimos dias, tentei corrigir um bug em um app fechado para Mac
    Gosto desse app, mas esse bug me enlouqueceu por anos
    Eu tinha bastante certeza de qual método Objective-C aproximadamente causava o bug, mas não sabia o que esse método fazia, e a versão decompilada era uma bagunça sem sentido
    Parecia que eu tinha batido numa parede
    Então peguei o ruído cuspido pelo decompilador, coloquei no GPT-4 e pedi para transformá-lo em uma versão limpa
    O resultado não foi perfeito, mas consegui arrumá-lo, e quando fiz swizzling desse resultado no app, o bug parece ter sumido
    Nunca encontrei os passos para reproduzir, mas normalmente o problema já teria acontecido a esta altura
    Sem o GPT-4, eu jamais teria conseguido fazer isso

    • Isso soa bastante parecido com um desenvolvedor júnior ou ruim que muda a ordem das funções dentro de um arquivo-fonte e faz o bug desaparecer, pelo menos por enquanto
      Claro que, se você reescreve completamente um trecho de código, mesmo sem entender o que ele faz e usando um LLM, é pouco provável que ele tenha o mesmo bug da implementação original
      Mas outros bugs podem surgir, e espero que ninguém faça isso em código no qual as consequências dos bugs sejam importantes, como interrupções de sistema ou custos para clientes
  • Este texto me deixou completamente chocado
    Salvatore é um dos engenheiros de software mais competentes em atividade hoje
    Ele consegue ver claramente que essa suposta ferramenta é totalmente inútil na sua área de especialidade
    Mesmo assim, em vez de descartá-la como uma chave de fenda torta que não encaixa, aceita a premissa dos defensores de que é preciso encontrar alguma utilidade para ela de algum jeito
    Como se aprende em uma aula introdutória de macroeconomia, se uma ilha é superior na produção do widget A, surge uma especialização em que a ilha A aproveita a ilha B, por pior que seja a capacidade da outra ilha de produzir B
    Então é natural que a capacidade relativa de programação de sistemas do antirez empurre os LLMs para outras tarefas de programação
    Mas nós não existimos isolados
    Ao nosso redor há inúmeros seres humanos que querem desafios técnicos e comida
    Muitos deles têm, ou podem adquirir, habilidades complementares às nossas
    Trabalhando juntos, o resultado da cooperação pode superar a soma das partes
    Talvez um LLM consiga escrever código PyTorch melhor que o antirez
    Mas só porque há uma chave de fenda velha e torta na garagem não significa que você precise usá-la
    Talvez seja melhor ir à loja de ferragens hoje

    • Se um LLM escreve código Torch melhor do que eu, então é uma boa ideia fazer o LLM escrever minha definição de modelo
      Porque a sintaxe exata ou a reformulação de tensores não são tão importantes para mim
      Se for para uso pessoal, criando e treinando uma convnet para minhas imagens, não preciso incomodar um especialista em Torch
      Se eu entendo suficientemente a própria convnet e só não conheço o bastante a sintaxe ou os métodos do Torch, consigo fazer por conta própria
      A alternativa é estudar os detalhes do manual do Torch, e o resultado será o mesmo
      O que importa nessa tarefa não são os detalhes de MLX, Keras ou PyTorch, mas controlar os conceitos de aprendizado de máquina
    • O interessante nos LLMs é que não há necessidade de se apressar para adotá-los
      Hoje eles são úteis até certo ponto, mas é difícil dizer que realmente sejam, e você não vai “ficar para trás” por não usá-los
      Como todos os envolvidos estão fazendo o possível para torná-los mais capazes, quando esse dia chegar bastará pedir por prompt o que você quiser
      Não há necessidade de correr para extrair algo à força da geração atual; por enquanto, muitas vezes eles reduzem a produtividade em vez de aumentá-la
    • Acho que você interpretou este texto de uma forma excessivamente desfavorável
      A ponto de eu me perguntar se lemos o mesmo texto
      Ele olha para uma nova ferramenta que outras pessoas acharam interessante, encontra formas de uso que são úteis para ele e, ao mesmo tempo, reconhece onde ela é inútil
      Ele também sustenta bem os exemplos em que ela não foi inútil
      Isso não é uma percepção especialmente revolucionária para um desenvolvedor
      Estamos sempre usando várias ferramentas, como linguagens de programação, e cada ferramenta tem pontos fortes e fracos
      Não vejo por que só os LLMs teriam de ser tão diferentes
      Afirmar que eles não têm ponto forte nenhum parece tolice
    • Você quer dizer que, em vez de perguntar a um LLM, eu deveria gastar tempo procurando no Fiverr ou no Upwork alguém para fazer uma tarefa de programação aleatória fora da minha área de especialidade?
      Dá para fazer isso por menos de US$ 20 por mês?
    • Não sei qual parte é chocante
  • Ao iniciar um novo projeto, existe um problema de impedância
    No começo, 0% do trabalho está concluído e é preciso começar de algum lugar, seja um hello world, um arquivo CMakeLists ou um script Python, e isso é difícil
    Antes do ChatGPT/LLMs, eu precisava arrancar esse esforço de dentro de mim até a ponta dos dedos
    Agora posso delegar isso ao ChatGPT
    Na prática, é menos eficiente e menos poderoso do que “sentar e fazer eu mesmo”, mas elimina o custo de “decidir sentar e fazer eu mesmo”
    Ainda assim, continuo copiando e remendando pedaços vindos de busca de código no GitHub, StackOverflow, posts aleatórios de blogs, documentação, Discord etc.
    Depois de algumas tentativas e novas tentativas, surge um ponto de partida de 5% para o projeto, e, quando ele finalmente ganha forma, posso trabalhar de verdade
    No fim, vou fazendo rapidamente por copiar e colar provas de conceito rasas e lixo que o ChatGPT cospe, e, quando ganho impulso suficiente, passo a mergulhar eu mesmo
    Então é mais lento e ineficiente, e não é que o ChatGPT faça melhor do que eu, mas é mais fácil e não exige cavar tão fundo
    No fim, consigo aguentar muito mais nas partes realmente importantes do projeto, o meio e o fim, sem entrar em burnout logo no começo

    • Será que antigamente eu estava cavando fundo demais?
      Eu estava fazendo as perguntas certas desde o início? Se não, dá para resgatar esse trabalho de forma eficaz?
      O custo afundado desaparece dentro de uma assinatura de 20 dólares
  • Acho que o ponto-chave é a passagem: “Tenho um problema e preciso saber rapidamente algo que eu consiga verificar se o LLM disser besteira. Nesses casos, uso o LLM para acelerar a obtenção do conhecimento necessário”
    Uma das razões pelas quais programação combina especialmente bem com LLMs é que verificar a resposta correta costuma ser trivial
    Estou experimentando um conceito para avaliar se um LLM é a ferramenta certa para determinada tarefa
    Algo como plotar em um gráfico “quão importante é que a saída esteja correta” e “quão fácil é verificar se a saída está correta”
    Fazer com o ChatGPT uma lista de músicas que tiveram participação de artistas mulheres vencedoras do Emmy leva tempo para verificar a precisão, mas a importância também é baixa e alguns erros são aceitáveis

    • Você está dizendo que programação combina bem com LLMs porque verificar a resposta correta costuma ser trivial?
      Então software não tem bug nenhum?
    • Sim, é exatamente isso
      São problemas em que é difícil pensar na solução, mas fácil verificar uma solução possível
      E todo mundo sabe como essa classe de problemas é chamada
    • Se algo leva muito tempo, não é muito importante e a precisão não importa, talvez a resposta correta seja não fazer
      O mundo já está cheio de textos irrelevantes e imprecisos, e é melhor reduzir essa produção do que acelerá-la
      Não estou falando de um exemplo específico, mas da ideia como um todo
  • Uso o ChatGPT como parceiro de raciocínio para escrever código
    Converso com ele o dia todo, todos os dias, para concluir o trabalho
    A empresa aprovou o Copilot, mas a autocompletação do Copilot foi uma experiência horrível
    A empresa não aprovou o Copilot Chat, que é o que eu preciso
    Ainda assim, seria bom ter uma ferramenta parecida que gerasse testes unitários, comentários de código etc. para o meu código no meu notebook
    Claro, partindo das minhas entradas e da minha orientação

    • Tive a mesma experiência com a autocompletação do Copilot
      Como muitos colegas elogiavam, cheguei a pensar que o problema era comigo, mas era extremamente dispersivo e desliguei depois de alguns dias
      Parecia que alguém tentava terminar minhas frases enquanto eu ainda estava falando
      Mesmo quando acertava, era irritante e quebrava o fluxo; além disso, errava com muita frequência
    • Se você usa VS Code ou uma IDE da JetBrains, o Continue funciona bem com o Ollama e é realmente fácil de começar a usar
      [0] https://continue.dev/
      [1] https://ollama.ai/
    • A propósito, hoje em dia já existem modelos locais comparáveis ao 3.5-turbo em chat de código
      Testei o Codeninja há alguns dias
      Pelo que me lembro, não chega nem perto do 4 que roda o backend do Copilot, mas para dados sensíveis que não podem sair para fora, é praticamente a única opção
      Ou então talvez dê para obter uma instância dedicada da OpenAI
  • Este pode ser o trecho mais importante do texto e, pensando no que está por vir em 2024, é uma parte que nunca é demais repetir
    “Então, até que ponto os LLMs têm capacidade de raciocínio, ou é tudo blefe? Como dizem os semióticos, talvez eles às vezes pareçam raciocinar porque o ‘significante’ dá a impressão de um significado que na verdade não existe. Mas quem já lidou bastante com LLMs sabe, mesmo aceitando suas limitações, que isso por si só não explica tudo. A capacidade de misturar coisas vistas anteriormente vai muito além de simplesmente regurgitar palavras aleatoriamente. Ainda que a maior parte do treinamento tenha sido feita, durante o pré-treinamento, pela previsão do próximo token, esse objetivo força o modelo a construir algum tipo de modelo abstrato. Esse modelo é fraco, cheio de lacunas e incompleto, mas, se observamos o que observamos, ele necessariamente precisa existir. Quando a certeza matemática é duvidosa e até os maiores especialistas frequentemente ficam em lados opostos, parece sensato acreditar no que se vê com os próprios olhos”