Estas últimas dos semanas he estado aprendiendo, probando y desafiándome con el uso de la inteligencia artificial generativa. Pasé de escéptico a querer rediseñar todo mi flujo de trabajo para integrar a la IA en todos los pasos, esta es la bitácora:
Prompts ambiguos y ambiciosos
Mis primeros intentos de escribir una nueva función con la IA fueron inocentemente ambiciosos y, como después aprendí, ambiguos. Prompts al estilo “agrega una nueva página de autores”, el resultado fue decepcionante, más decepcionante después de esperar 10 o 15 minutos viendo como la IA imprimía e imprimía cosas en la terminal que no me paré a leer ni dos palabras seguidas. El resultado no fue ni cercano a lo que pedí, es más, ni siquiera se podía ejecutar: error 500 en el servidor cuando la IA había escrito confiada, “ya terminé y corregí todos los errores en el camino”.
Después aprendería qué estaba mal con eso. Pero días después.
Un zoológico de herramientas
¿Sabían que hay un programa que se llama zookeeper para manejar herramientas de sistema distribuidos? Estoy casi seguro que quién le pusó nombre le metió un poquito de ironía, hay tantas herramientas que es un zoológico. Lo mismo sentía yo con la IA, Agents.md, SKILL.md, subagentes, modelos, agentes, contexto, MCP. Muchas cosas que aprender en poco tiempo ¿no?, pero hay una buena herramienta para saber más de la IA, la IA misma.
Uno de los primeros usos que le di a la IA con mucho gusto fue explorar un tema, abrir Gemini y comenzar a preguntar ¿qué es MCP? y recibir una respuesta a la que podía seguir con un “¿y eso qué tiene que ver conmigo?” y recibir otra respuesta satisfactoria me convenció que explorar un tema era muy fácil con la IA. Aunque claro puede que está equivocada, pero es igual que cuando estás en una reunión de programadores hablando de la IA, igual y ellos se equivocan, o por qué no me di a explicar o porque las coronas ya están haciendo de las suyas.
Después de preguntarle a la misma IA qué había que saber de la IA, decidí instalar openproject en mi homelab y crear tareas que me ayudaron a ir entendiendo todo el ecosistema.
La IA puede mejorarse a si misma
Al final resultó que no hacía falta madrugar con un buen café para crear un SKILL, resulta que si tienes una muy buena conversación con la IA al final puedes decir con “oye esto estuvo muy bien, hay que hacer esto un SKILL”. La misma IA va a guardar todo incluso con más detalle que lo que tú pudiste lograr.
Es un archivo de texto plano, parafraseando TAOUP, el texto plano es rey. Dile a la IA que cambie algo, abre el archivo con emacs (porque vi es del diablo) y modifícalo.
Quizás fue aquí donde fue comprendiendo que se trata de agregar contexto. Durante la semana he ido creando analogías de la IA, y creo que la que me quedo hoy es que es un manejador de contexto, dale más contexto todo el que puedas, la IA puede manejar mucho contexto mucho más que tú, por eso si aprendes algo escríbelo en algún lugar que la IA pueda obtenerlo y podrá darte mejores respuestas.
De regreso a 2006
Cuando estaba en la preparatoria me enseñaron que la manera correcta de hacer software era escribir un documento que describiera todo lo que el software tenía que hacer antes de siquiera atreverte a abrir Borland Turbo C. Podías usar español, diagramas, pseudocódigo, notas al margen, lo que fuera necesario para que el programador sólo tuviera que “traducir” a código.
Le dimos la vuelta a CMMI, las tecnologías ágiles y el vibe coding para volvernos a encontrar con una detallada especificación de código. Durante la semana encontré Github Spec Kit y después OpenSpec.
Aún tengo pendiente usarlo para escribir una verdadera característica lista para producción, pero la idea es: usar la IA para escribir una especificación con todo el detalle posible para que la IA no se desvíe del propósito original. Es más mi gerente compartió una librería sin código, es una especificación para tu agente de elección que supuestamente creará el código que hace lo que quieres.
Hay muchas formas en la que las computadoras hacen cosas muy básicas que no sorprenderían a nadie si no fuera porque lo hacen a velocidades o capacidades sorprendentes, las computadoras hacen cosas incríebles sólo sumando y moviendo enteros, también la IA maneja prompts que son archivos largos. No porque la entrada del prompt te incite a escribir dos líneas significa que estás limitado a eso solamente.
De nuevo la IA trabaja mejor mientras más contesto tenga, los SKILLS y las specs son más contexto que se agregan al prompt.
Limitaciones y Grafos
Después de sentirme cómodo con el ecosistema de la IA llegó el momento de la verdad, escribir una característica para el sitio de extensiones de LibreOffice. Usé Github Spec Kit, detallé lo que quería pero falló miserablemente. ¿Por qué? Una cosa nueva que aprendí, aunque la IA está haciendo cosas hay que revisar qué pasa, por qué falla, por qué tarda tanto en terminar, recuerda el contexto es para ayudarle a mejorar.
Fallaba porque usamos el framework Silverstripe para el sitio de extensiones, y hay poco contenido cuando se compara con Laravel por ejemplo. ¿Cómo podía hacerle para darle más contexto? Recomendaban SKILLS y más contexto en Agents, pero vi graphify una herramienta para parsear tú código y craer un grafo de dependencias y código para entender mejor el codebase.
Después de reintentarlo cuando el grafo fue creado, puedo decir que las cosas mejoraron mucho. Un ejemplo antes del grafo había muchos errores porque la IA usaba funciones que no existían en SilverStripe 5, después del grafo todo estaba bien. Ahora puedo preguntar cómo es que funciona Versioned con Locales y lo sabe, antes podía ver cómo el agente “pensaba” cosas muy lejos de encontrar la respuesta.
Aprendí también el propósito de agregar al prompt cosas como “Eres un programador experto en SilverStripe”, ¿qué acaso es decretar que eres bueno y te conviertes en bueno? Pues resulta, según lo que leí, que en lugar de aumentar las capacidades de la IA las disminuye, o en este caso las concentra. Si le dices a la IA que es expera en IA en realidad le estás diciendo “enfócate en SilverStripe, olvídate de todo lo que no nos sirva”. Al reducir el contexto, mejoras la búsqueda. Por que sí la IA es una búsqueda, pero eso es para otro día.
¿Qué sigue?
Refinar mi flujo de trabajo con la IA. Puedes guardar preferencias a nivel de usuario para decirle cómo te gusta trabajar, para mi será “dame un resumen al final”, “dime con qué tuviste problemas”, “detente si estás teniendo problemas con algo por mucho tiempo y dime que lo causa”. Todo con la intención de 1. Mejorar yo, aprender lo que la IA está haciendo y 2. Facilitarle el proceso a la IA.
Con la IA ejecuté unos comandos con docker y noté que le daba muchas vueltas a lo mismo, la detuve y pregunté por qué reintentaba tanto, la causa era que no tenía permisos para escribir archivos en mi carpeta local e intentaba de todo para poder escribir hasta que lo forzaba por el contenedor.
Dos lecciones ahí, agregué permisos para escribir en local y dos, la IA va a intentar de todo para sobrepasar los permisos que le diste así que con cuidado.
Que sirva este escrito al menos para recordar lo que me ha pasado estas últimas dos semanas y quizás vuelva en otras dos semanas con una actualización o en unos años a leer lo mal que redactaba.
Por cierto
Esto no fue escrito con la ayuda de la IA, más bien con la ayuda de una Delirum Tremens de cereza que me robé del refri de mi suegra.