La Inteligencia Artificial en el desarrollo de software

10 enero, 2023
Imagen de Gerd Altmann en Pixabay.

Una de las líneas más prometedoras de la Inteligencia Artificial en el ámbito de la informática es su aplicación en el desarrollo de software. Las IAs generativas sintetizan una salida compleja (como un texto, una imagen, o un vídeo) a partir de las indicaciones proporcionadas por el usuario. Por ejemplo, podemos explicar qué debe hacer una aplicación y pedirle a la IA que escriba el código. ¿Fácil y sencillo, no? 

Large Language Models (LLM), una navaja suiza

Imagina el siguiente problema: recibes como entrada un texto inacabado y tienes que completarlo. ¿Cómo lo harías? Seguramente te basarías en la información que aparece en la entrada, así como en tu experiencia con otros textos similares. Por ejemplo, si ves que se trata de una carta, quizás le añadirías una despedida y una firma. En cambio, en un currículum quizás añadirías experiencia laboral y personas de referencia. ¿Sencillo, no?

Un large language model (LLM) es una técnica de aprendizaje profundo para resolver este problema: predecir qué palabras vendrán a continuación para completar un texto. Un LLM no intenta aprender conceptos (al menos, no de forma directa), sino relaciones entre secuencias de palabras. Sin embargo, al entrenarse con ingentes volúmenes de datos y analizar secuencias de palabras muy largas (8192 tokens en los últimos sistemas publicados), pueden conseguir una buena precisión en las predicciones. 

Una ventaja de estos métodos es su flexibilidad: permiten resolver muchas tareas diferentes. Por ejemplo, si el texto a completar es una pregunta, el modelo la responderá. Si es un cuento inacabado, nos escribirá el final. De la misma forma, podemos pedirle a un LLM que explique un concepto, resuma un texto o nos proporcione ejemplos.

La imagen de esta entrada ha sido generada por Stable Diffusion a partir de la descripción “humanoid robot sitting in front of a typewriter”.

GitHub Copilot, prediciendo tu código antes de escribirlo

Volvamos al punto de partida de los LLM y cambiemos la premisa: ¿qué pasa si en vez de completar un texto queremos completar programas? Usando información como el nombre de las variables, los comentarios del código fuente, etc. podemos pedirle a una IA que termine de escribir un programa.

Esta es la premisa de herramientas como GitHub Copilot (basado en el LLM Codex) o Ghostwriter: asistentes integrados en el entorno de desarrollo que intentan “completar” el código a medida que escribes. Funcionan tan bien que ya se ofrecen como servicios de pago, solucionando el problema de monetizar estos modelos que tienen un coste de entrenamiento tan elevado. Y, a pesar de que estos sistemas son muy recientes, ya existen nuevos servicios como AlphaCode de DeepMind que consiguen mejorar sus resultados.

ChatGPT: la última incorporación 

ChatGPT es el último servicio publicado por OpenAI y está dando mucho que hablar. Este sistema, basado en el LLM llamado GTP-3.5, está enfocado a mantener conversaciones con humanos. Pero la versatilidad de los LLM lo lleva a que pueda resolver muchos problemas, incluyendo proponer código en diferentes lenguajes de programación, explicar el funcionamiento de un algoritmo con ejemplos o encontrar errores en código. 

Como ejemplo de su versatilidad, es posible proponer un “juego” a ChatGPT, pidiéndole que responda simulando ser el terminal de un sistema operativo como MS-DOS o Linux. Es como tener una máquina virtual dentro de una IA

No es oro todo lo que reluce

Sin embargo, no debemos dejarnos deslumbrar por las capacidades que ha alcanzado la IA: estos sistemas todavía necesitan supervisión de un usuario experto. Un sistema como Copilot o ChatGPT puede proporcionar sugerencias incorrectas, pero estos errores no son obvios. Por ejemplo, imagina un texto bien redactado, sin faltas de ortografía, explicando cómo puedes viajar en coche entre Reino Unido y Canadá. Para alguien con conocimientos de geografía, el error será evidente. Pero si usas una IA para generar código y no tienes conocimientos para revisarlo, puedes tener problemas: no puedes confíar ciegamente en sus respuestas. 

Y es que todavía hay muchas cuestiones por resolver. Por ejemplo, al entrenarse con grandes volúmenes de código y texto, ¿estamos seguros que los datos de entrenamiento no tienen errores? ¿O que la IA no introduce defectos en sus soluciones? Pueden haber problemas de muchos tipos: bugs, vulnerabilidades, código protegido por patentes o propiedad intelectual, sesgos por género o raza, … ¿Quién tendrá la culpa si estos problemas acaban en el código fuente?

En conclusión, estos sistemas son muy buenos para resolver problemas sencillos o para preparar rápidamente un prototipo de usar y tirar. Además, con la supervisión adecuada, también son herramientas excelentes para incrementar la productividad de un ingeniero de software. Pero debemos ser realistas: las IAs todavía no están suficientemente maduras para llevar las riendas del proceso de desarrollo o programar de forma autónoma.

(Visited 42 times, 1 visits today)
Autor / Autora
Robert Clarisó Viladrosa
Profesor de los Estudios de Informática, Multimedia y Telecomunicación de la UOC. Director del Bachelor's Degree in Techniques for Software Development de la UOC.
Comentarios
Deja un comentario