Usar IA para gerar código

Escrita · 3 mai 2023

Usar IA para gerar código

Programar com superpoderes

No âmbito dos meus esforços de otimização de software para reduzir os custos da nuvem, precisava de substituir um software de servidor ineficiente por algo que use ferramentas mais robustas (embora fragmentadas) disponíveis no Debian GNU/Linux. Será que o modelo de linguagem GPT4 me ia dar um pouco de magia de IA? Acompanha-me!

Parte dos serviços na nuvem da minha empresa é o chamado “Lemmid Manager”, um sistema integrado de gestão de conteúdos que pega em material em bruto (texto, vídeos, imagens) e gera sites estáticos bonitos e de alto desempenho. Perante o aumento dos custos da nuvem, estou a reescrever partes do software para o tornar mais eficiente: usar menos poder de computação para obter os mesmos resultados.

Rotação de imagens

Podes não ter noção disso, mas sempre que usas o telemóvel para tirar uma fotografia, ela é guardada sempre na horizontal (ou em formato panorâmico). Quando tiras uma fotografia na vertical, o telemóvel limita-se a acrescentar um bocadinho de informação extra que regista a forma como seguraste a câmara, para que, quando voltas a ver a fotografia, ela apareça com a orientação certa. É mais rápido escrever um único bit de informação (extra) do que rodar os bits e bytes que compõem a imagem.

Isto não tem problema enquanto a fotografia não sai do telemóvel, mas quando a carregas para um site, tem de ser otimizada para a web. Os bits e bytes da imagem têm então de refletir o conteúdo real da fotografia. Depois, a imagem pode ser otimizada ainda mais para a velocidade de carregamento e para diferentes ecrãs.

Rotação automática de imagens com base no EXIF

As câmaras modernas (dos smartphones) guardam a orientação no chamado EXIF, que acompanha os dados da imagem. Para que a imagem (os bits e bytes) reflita corretamente a orientação da câmara, é preciso ler os dados EXIF e, com base na orientação, aplicar um algoritmo de rotação aos bits e bytes da imagem.

Implementação atual

A implementação original (escrita à mão) usa NodeJS e um módulo chamado “lwip” (LightWeight ImageProcessor) para fazer isto. Funciona bem na maioria das situações, mas, à medida que as imagens cresceram (com mais megapíxeis), as necessidades de memória aumentaram bastante. O senão de fazer tudo num único processo NodeJS é que o conjunto se torna um verdadeiro devorador de memória, e todo o backend NodeJS sofre quando o levas ao limite a processar milhares de fotografias.

Uma estratégia comum para otimizar os pontos de estrangulamento de um software é tirá-los do programa principal. Em vez de processar as imagens diretamente a partir do NodeJS, quero usar ferramentas comuns do Debian GNU/Linux (com provas dadas) para fazer a rotação automática. A partir do NodeJS posso depois chamar o 'auto_rotator' externo e esperar que acabe a tarefa. Ao fazer um processo NodeJS esperar por um resultado/callback assíncrono, ele fica novamente disponível para outros pedidos.

GPT4 como gerador de código

O melhor do software livre (de liberdade, não de preço) é que há imensos blocos de construção à tua disposição para criares os teus próprios programas. Eu sabia que o Debian GNU/Linux tem ferramentas capazes de rodar imagens com base nos dados EXIF. O desafio é criar um único script que use estas várias ferramentas para fazer o trabalho, com alguma robustez no tratamento de exceções.

Em vez de me enfiar eu próprio em todos os comandos e opções de comando disponíveis, decidi pedir ao GPT4 que gerasse um script que fizesse exatamente o que eu queria, usando ferramentas padrão do Debian GNU/Linux:

Gerar código é tão fácil como escrever uma instrução descritiva
Gerar código é tão fácil como escrever uma instrução descritiva

Em poucos segundos, o GPT4 da OpenAI gerou um script bash que usa o ImageMagick (uma ferramenta gráfica comum) para fazer alterações com base nos dados EXIF de um determinado ficheiro de imagem. A IA escolheu o “exiftool” para ler os dados de orientação e, com base no resultado dessa ferramenta, executar o comando “convert” do ImageMagick para aplicar a rotação certa.

O código gerado pelo GPT4, “auto_rotate.sh”, que roda imagens com o ImageMagick com base na orientação EXIF
O código gerado pelo GPT4, “auto_rotate.sh”, que roda imagens com o ImageMagick com base na orientação EXIF

O código completo (gerado em segundos) está lindamente comentado e dá uma ótima ideia do que se passa. Está estruturado e otimizado para ser lido por humanos.

Documentação

Além do código funcional, a IA entregou documentação a explicar como usar o software acabado de gerar, incluindo instruções de instalação. É algo que a maioria dos programadores descura, eu sei (a documentação técnica costuma ficar para o fim).

As instruções da IA sobre como usar o código gerado: a maioria dos programadores a sério pode aprender com a sua clareza de comunicação
As instruções da IA sobre como usar o código gerado: a maioria dos programadores a sério pode aprender com a sua clareza de comunicação

Conclusão

Em poucos minutos tinha um pedaço de código funcional e documentado que me ajuda a resolver um ponto de estrangulamento num software na nuvem. É simplesmente fantástico: poupou-me tempo (que depois usei para escrever este artigo).

Só nos resta imaginar que efeitos terão os grandes modelos de linguagem, como o ChatGPT/GPT4, na forma como trabalhamos. Abraço totalmente as ferramentas de IA: saber usá-las vai ser essencial num futuro próximo (acho eu)!

Um programador do futuro, imaginado pelo DALL-E da OpenAI
Um programador do futuro, imaginado pelo DALL-E da OpenAI

← Mais textos