LLMs e as tendências de programação no início de 2024
(antirez.com)- 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 acrescentarhash_idao 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_idno fim piorava a distribuição - o modelo identificou que a simples soma podia ser a causa do problema
- sugeriu alternativas que misturam
hash_idcom operações bitwise, como XOR
- o usuário forneceu a pista de que adicionar
- 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
qleqhdependendo 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
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
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
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
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
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
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
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
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
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
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
Se é algo que dá para encontrar no Google, há uma boa chance de que um LLM encontre e organize mais rápido e melhor
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
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
Ele é o criador do Redis
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
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
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
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
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
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
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
Dá para fazer isso por menos de US$ 20 por mês?
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
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
Então software não tem bug nenhum?
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
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
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
[0] https://continue.dev/
[1] https://ollama.ai/
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”