Generando código: ¿Roslyn o IA?
En este artículo continúo con la automatización de la generación de código destinada a migrar el editor de este blog, una aplicación Windows de escritorio desarrollada por mí, a mi nueva plataforma universal AIDBDeveloper, que aúna servicios avanzados de aplicación, bases de datos, e inteligencia artificial.
En el artículo anterior, conseguí generar unas 11.000 líneas de código de manera totalmente determinista. Se trataba de crear una clase para el repositorio y una serie de clases para cada una de las tablas del esquema de base de datos en las que almaceno la configuración del blog.
También generé una serie de interfaces, ya que mi plataforma las utiliza de manera intensiva para representar la gran multitud de abstracciones que necesita mi arquitectura para poder gestionar toda la complejidad de una infraestructura que pretende ser universal, es decir, sobre la cual se pueda construir prácticamente cualquier tipo de solución.
Utilicé inteligencia artificial solo para generar textos en inglés y español para decorar con atributos de nombre, categoría y descripción las interfaces, las clases y sus propiedades, ya que también me apoyo en las anotaciones de metadatos que permiten los atributos de la plataforma .NET para documentar tanto el código como la interfaz de usuario y los controles en tiempo de ejecución.
He ido subiendo el nivel de complejidad:
En el primer artículo de esta serie, solo modificaba los archivos de recursos añadiendo las versiones en inglés y español de los textos literales asignados a propiedades de los controles como AccessibleName, AccessibleDescription o ToolTipText.
La automatización modificaba además los diseñadores de los formularios y controles sustituyendo las cadenas literales por referencias a estos recursos.
En el segundo artículo ya añadí generación de código nuevo a partir de plantillas, más complicado, pero todavía relativamente sencillo. Además de código C#, añadí la generación de código MySQL para los procedimientos de actualización de las clases.
En el presente artículo presento, en formato de vídeo, como viene siendo habitual, un avance más en la complejidad de la automatización: la creación de un componente integrable en mi plataforma para la gestión de los objetos del repositorio a través de la interfaz de usuario.
Eso significa implementar una serie de interfaces ya definidas, y sobrescribir algunos métodos y propiedades de la clase base, también predefinida. En este caso, con ayuda de las automatizaciones que ya proporciona mi plataforma en tiempo de ejecución, he conseguido también hacerlo nuevamente de forma determinista. Recordemos que el caso que nos ocupa es automatizar el código de un repositorio de base de datos genérico pero estandarizado.
Pero también me he dado cuenta de que, a partir de aquí, voy a necesitar sí o sí recurrir a algún tipo de análisis del código preexistente.
Será necesario presentar opciones y modelos de generación de código al usuario o a la IA, basándome en las clases e interfaces ya desarrolladas, para tomar decisiones imposibles de automatizar de manera determinista.
Que un paso no sea determinista no impide que podamos reducir al mínimo posible la información necesaria para ejecutarlo. Tengo que recordar que no estoy intentando demostrar que se puede hacer todo sin IA, sino que la automatización se puede hacer rentable sin pagar sobrecostes innecesarios, en tokens, pero también en horas humanas dedicadas a supervisar y validar los resultados.
Pero antes de cargarle a la IA todo el trabajo de análisis, y ya que estamos en .NET, hay una opción muy interesante para estudiar, que es el uso de Roslyn.
Roslyn es la plataforma de compilación de código abierto de Microsoft para C# y Visual Basic .NET. Proporciona herramientas para analizar, interpretar y transformar código fuente, mediante el acceso a su estructura sintáctica y semántica.
Todo el trabajo que podamos hacer antes de que entre en juego la IA es un ahorro en tokens y también en tiempo de revisión.
Si sumamos a esto unas automatizaciones específicas para nuestra arquitectura, y que además dicha arquitectura proporcione servicios propios de automatización en tiempo de ejecución, creo que tenemos el éxito y la rentabilidad garantizados.
En el vídeo también muestro una primera automatización que utiliza Roslyn para encontrar los archivos de código fuente que contienen las declaraciones de cualquier tipo que hayamos obtenido mediante reflexión.
Se trata de un uso bastante básico, pero que puede ahorrar mucho tiempo de trabajo. Ni todos los archivos se llaman como el tipo que contienen, ni todos contienen un solo tipo.
Aprovecho esta capacidad para automatizar la documentación de las interfaces de mi plataforma, combinando el análisis de código mediante Roslyn con la generación de los textos mediante IA. También explico cómo utilizo interfaces y atributos para automatizar la definición de funciones y sus parámetros en el mecanismo de Function Calling.
Sin más preámbulos, os invito a ver todo esto en el vídeo:
Espero que lo encontréis interesante e inspirador. ¡Gracias por leer y hasta la próxima!









