Idiomas: English · Nederlands · Deutsch · Español · Français · Italiano · Português · Papiamentu · Frysk

Índice / Artículos / Usando IA para generar código

Usando IA para generar código

Programar con superpoderes

Publicado
Actualizado
(creado )
Escrito por
Willem L. Middelkoop
Temas
AI · nube · datos · programación · servidor · trabajo
Versión humana de este artículo
https://willem.com/es/2023-05-03_usando-ia-para-generar-codigo/
English
Using AI to generate code
Nederlands
AI gebruiken om code te genereren
Deutsch
KI-gestützte Codegenerierung
Français
Générer du code avec l'IA
Italiano
Usare l'AI per generare codice
Português
Usar IA para gerar código
Papiamentu
Usa AI pa generá kòdigo
Frysk
AI brûke om koade te generearjen
Idiomas
Traducido del original en inglés por un modelo de lenguaje en dos pasadas (traducción y corrección) con un glosario y un corrector ortográfico; aún no revisado por un hablante nativo.

Resumen

Como parte de mis esfuerzos de optimización de software para reducir los costes de la nube, necesitaba sustituir un software de servidor ineficiente por algo basado en herramientas más robustas (aunque fragmentadas) de Debian GNU/Linux. ¿Podría el modelo de lenguaje GPT4 ofrecerme algo de magia de IA? ¡Sigue leyendo!

Texto completo

Una parte de los servicios en la nube de mi empresa es el llamado "Lemmid Manager", un sistema integrado de gestión de contenidos que toma datos en bruto (texto, vídeos, imágenes) y genera sitios web estáticos preciosos y de alto rendimiento. Ante los costes de la nube disparados, estoy reescribiendo partes del software para que sea más eficiente: usar menos potencia de cálculo para conseguir los mismos resultados.

Rotación de imágenes

Quizá no te hayas dado cuenta, pero cada vez que haces una foto con el móvil, se guarda siempre en horizontal (o panorámico). Cuando haces una foto vertical, el móvil simplemente añade un poco de información extra que recuerda cómo sostenías la cámara, de modo que al volver a mirar la foto aparece bien orientada. Es más rápido escribir un solo dato (extra) que girar los bits y bytes reales que forman tu imagen.

Eso está bien mientras la foto no salga de tu móvil, pero si la subes a un sitio web, tiene que estar optimizada para la web. Entonces los bits y bytes reales de la imagen deben reflejar el contenido real de la foto. Después la imagen se puede seguir optimizando para una carga más rápida y para distintos tamaños de pantalla.

Rotación automática de imágenes según el EXIF

Las cámaras modernas (de smartphone) guardan la orientación en el llamado EXIF que acompaña a los datos de la imagen. Para que la imagen (sus bits y bytes) refleje correctamente la orientación de la cámara, hay que leer los datos EXIF y, según la orientación, aplicar un algoritmo de rotación a los bits y bytes de la imagen.

Implementación actual

La implementación original (escrita a mano) usa NodeJS y un módulo llamado "lwip" (LightWeight ImageProcessor) para hacerlo. Funciona bien en la mayoría de los casos, pero a medida que las imágenes han ido creciendo (con más megapíxeles), las necesidades de memoria se han disparado. El inconveniente de hacerlo todo en un único proceso de NodeJS es que se convierte en un devorador de memoria, y todo el backend de NodeJS se resiente cuando lo llevas al límite procesando miles de fotos.

Una estrategia habitual para optimizar los cuellos de botella de un software es sacarlos del programa principal. En lugar de procesar las imágenes directamente desde NodeJS, quiero usar herramientas corrientes de Debian GNU/Linux (con un historial probado) para la rotación automática. Desde NodeJS puedo llamar al 'auto_rotator' externo y esperar a que termine su tarea. Si un proceso de NodeJS espera un resultado/callback asíncrono, queda libre otra vez para otras peticiones.

GPT4 como generador de código

Lo mejor del software libre (libre de verdad) es que hay muchísimas piezas disponibles para construir tus propios programas. Yo sabía que Debian GNU/Linux tiene herramientas que pueden rotar imágenes a partir de los datos EXIF. El reto es crear un único script que combine esas herramientas para hacer el trabajo y que además gestione bien las excepciones.

En lugar de sumergirme yo mismo en todos los comandos y opciones disponibles, decidí pedirle a GPT4 que generara un script que hiciera justo lo que yo quería, con herramientas estándar de Debian GNU/Linux:

Generar código es tan fácil como escribir una instrucción descriptiva
Generar código es tan fácil como escribir una instrucción descriptiva

En pocos segundos, GPT4 de OpenAI generó un script bash que usa ImageMagick (una herramienta gráfica muy extendida) para hacer modificaciones a partir de los datos EXIF de un archivo de imagen. La IA eligió "exiftool" para leer la orientación y, según el resultado de esa herramienta, ejecutar el comando "convert" de ImageMagick con la rotación correcta.

El código "auto_rotate.sh" generado por GPT4, que rota imágenes con ImageMagick según la orientación EXIF
El código "auto_rotate.sh" generado por GPT4, que rota imágenes con ImageMagick según la orientación EXIF

El código completo (generado en segundos) está comentado de maravilla y te da una idea clara de lo que ocurre. Está estructurado y optimizado para que lo lean personas.

Documentación

Además del código que funciona, la IA entregó documentación que explica cómo usar el software recién generado, con instrucciones de instalación incluidas. Sé que la mayoría de los programadores se olvida de esto (la documentación técnica suele ser lo último en lo que se piensa).

Las instrucciones de la IA para usar el código generado: la mayoría de los programadores de verdad pueden aprender de su claridad
Las instrucciones de la IA para usar el código generado: la mayoría de los programadores de verdad pueden aprender de su claridad

Conclusión

En unos minutos tenía un código que funciona, documentado, y que me ayuda a resolver un cuello de botella en un software en la nube. Es sencillamente alucinante: me ahorró tiempo (que después usé para escribir este artículo del blog).

Solo cabe preguntarse qué efectos tendrán los grandes modelos de lenguaje como ChatGPT/GPT4 en nuestra forma de trabajar. Yo abrazo por completo las herramientas de IA: saber usarlas será esencial en un futuro cercano (¡creo yo!).

Un programador del futuro, tal como lo imaginó DALL-E de OpenAI
Un programador del futuro, tal como lo imaginó DALL-E de OpenAI

Formatos legibles por máquinas de esta página