Notas Rápidas

Pensamientos breves sobre tecnología. 3 notas en total.
Subscribite al feed RSS de notas

¿Agregar demasiados principios de programación arruinan el prompt?

En esta nota reviso la idea de usar algunos de los llamados principios pragmáticos de programación al momento de crear una instrucción para LLM/IA

Estuve leyendo un poco sobre prompts.

Pero antes de seguir con el tema de instrucciones, hay algunos principios de programación que ayudan de una forma u otra al momento de escribir código.

Estos principios son:

YAGNI: You Aren’t Gonna Need It / No lo vas a necesitar

SOLID: Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, Dependency Inversion / Responsabilidad única, Abierto-cerrado, Sustitución de Liskov, Segregación de interfaces, Inversión de dependencias

En el caso de SOLID contiene cinco principios en su interior.

KISS: Keep It Simple, Stupid / Manténlo simple, estúpido

DRY: Don’t Repeat Yourself / No te repitas

Entonces estas filosofías actúan como una guía al momento de diseñar un programa.

La idea central de esta nota es pensar ¿qué ocurre cuando agregamos estos principios al darle un prompt a una LLM/IA?

Por ejemplo, puedo pedirle a la IA que no agregue funcionalidades extra a la pieza de código que le estoy pidiendo. O puedo directamente decirle “necesito que te adhieras a los principios YAGNI al llevar adelante la tarea”.

¿Funciona esta idea de adherirnos a estas formas de pensar para estructurar los resultados?

Necesito hacer más pruebas al respecto. Tengo que decir que hay dos formas de usar estos principios:

1- Asignarlos al prompt antes de empezar a generar el código.

2- Utilizar los principios en un segundo momento, para revisar el código que ya fue generado.

En mi poca experiencia la idea funciona mejor en el segundo caso, cuando tenemos que revisar un código que ya fue generado. Encuentro que si utilizo estas instrucciones desde un primer momento, la IA se aleja un poco del objetivo principal al tratar de encajar y priorizar estos conceptos.

Pero cuando la IA repasa un código ya generado, tener estas referencias extras para saber qué tiene que mejorar en el programa le ayuda más.

Lo siguiente que encontré en mi experiencia es que no siempre es bueno agregar todos estos principios al mismo tiempo. Por ejemplo en lugar de decir:

“When designing or extending code, rigorously apply YAGNI, SOLID, KISS, and DRY principles, adapting them to each development scenario.”

Es mejor decir:

“When designing or extending code, rigorously apply the YAGNI principle, adapting it to each development scenario.”

Aunque también es cierto que estoy agregando un problema extra: SOLID contiene cinco principios individuales en su interior. Quizás al pedir todo a la vez no hago más que saturar la instrucción, agregando complejidad extra a la tarea.

Por lo que puedo entender al usar todas los principios juntos al mismo tiempo los cambios que se aplican no siempre resultan favorables. El código mejora en apariencia pero deja de funcionar al romper su funcionalidad, como si la necesidad por cubrir todas esas demandas hiciera aparecer errores en la respuesta.

Una forma gratuita pero poco práctica para completar tareas con IA

Esta nota se me ocurrió cuando pensaba: ¿es posible delegar la parte de planificación de una tarea a un LLM de acceso en línea y asignar la parte de acción a una API gratuita accesible en Cline? La herramienta en línea es gratis y parece más “potente” que la opción gratuita en Cline. Por ejemplo, usar Qwen en línea para detallar la tarea y MiniMax en Cline para actuar sobre los archivos locales.

Digamos que buscamos hacer una tarea más o menos compleja en un directorio de nuestra computadora. Algo como hacer cambios en unos archivos CSS y HTML en un proyecto personal.

Nos gustaría resolver la tarea con IA, pero nuestro presupuesto consiste exactamente de $0. Y nuestra computadora no tiene la potencia para correr LLM locales.

Esta es mi solución poco práctica pero gratuita. Es cierto, nada es “gratuito” en el mundo, quiero decir que podemos seguir adelante sin pagar una suscripción.

Entonces esto es lo que vamos a hacer. Vamos a rebotar entre dos LLM/IA. Una de ellas va a actuar para planear la mejor forma de llevar adelante los cambios, la otra va a accionar directamente sobre los archivos.

Parte 1: The Players

Primero vamos a necesitar una inteligencia artificial que pueda generar cambios directamente sobre nuestros archivos.

Para editar el código vamos a usar VSCode. O también alternativamente podemos usar VS Codium.

Vamos a instalar ahora la extensión Cline. Y vamos a crear una cuenta. Cline va a permitir que podamos conectarnos a diferentes API de distintas LLM. Algunas de esas opciones son gratuitas.

Bien, entonces Cline nos conecta con una IA que puede hacer cambios en nuestro directorio de trabajo si le damos autorización. Por ejemplo al momentos de escribir estas palabras una de esas IA es “minimax-m2.1”. Estas opciones gratuitas son geniales en su funcionamiento, pero con una ventana de contexto corta. Su efectividad para planear con efectividad puede variar según el caso.

Por eso vamos a necesitar un cerebro más poderoso. Necesitamos entonces utilizar otra IA gratuita, pero de acceso en linea (API solo por medio de pago). Por ejemplo Gemini o DeepSeek.

Hay varias opciones gratuitas de IA en linea, y todas tienen sus ventajas/desventajas. Esta IA solamente va a tener acceso a una parte del proyecto, pero con algunas instrucciones va a ayudarnos a organizar la resolución del problema.

Mi teoría es que de esa forma vamos a aliviar presión sobre la tarea que le encargamos al asistente de Cline. Y el proyecto se v a completar sin necesidad de volver a generarlo.

Parte 2: Copiar y pegar

Ahora vamos a llevarle las partes necesarias para comprender el asunto a la IA en linea.

Con “llevarle” las partes necesarias me refiero a la clásica actividad de “copy & paste”.

En el caso de nuestro ejemplo eso puede ser las partes relevantes de nuestro archivo CSS y el documento HTML correspondiente.

Y le decimos a la IA algo como:

Teniendo en cuenta los fragmentos relevantes en los archivos de mi proyecto (index.html, style.css, script.js):

- Quiero crear una nueva sección que debe llamarse "ejemplos"
- La sección debe ubicarse después del header y antes del content en el HTML
- El menú en JS debe ser un botón de "Ver más ejemplos" que expande/colapsa el contenido

Instrucciones:
1. Lista exactamente 3 pasos en orden:
   a) Cambios en HTML (solo la nueva sección con estructura mínima)
   b) Estilos CSS necesarios (solo para .ejemplos y el botón)
   c) Lógica JS mínima (toggle de expansión/collapsing)

2. Genera la respuesta en un único codeblock sin formato incluyendo detalles como:
<!-- index.html: Insertar después de <section id="servicios"> -->
<section class="ejemplos">...</section>

/* style.css: Agregar al final */
.ejemplos { ... }

// script.js: Insertar después de DOMContentLoaded
document.querySelector(...) { ... }

3. PROHIBIDO:
- Explicaciones adicionales
- Código para funcionalidades no solicitadas
- Comentarios en el código

Lo anterior es solamente un ejemplo sencillo, se puede expandir para tareas más complejas. Vamos a obtener una respuesta con una serie de pasos a implementar.

Es cierto que esa LLM en linea tiene la capacidad de completar el proyecto por si sola, pero para hacerlo tendría que escribir los tres archivos completamente desde cero. Eso es lo que estamos tratando de evitar, en especial si son archivos muy largos.

Lo que vamos a obtener es un codeblock con una serie de pasos para completar, con todo el código generado para la sección que intentamos implementar.

Ahora movemos la respuesta que vamos a obtener a Cline, en el area de “Act”. Y le pedimos que ejecute esos pasos. La IA gratuita a la que estemos conectados, digamos Minimax para seguir el ejemplo, va a ir paso a paso actuando sobre esta lista que le damos.

¿Puede esto mejorar el resultado? Pensemos que la IA en VSCode ahora tiene que solamente interpretar lo que le pedimos. No necesita idearlo. Caso contrario tendría que interpretar nuestro pedido original + crear un plan + ejecutarlo.

Por supuesto esta idea tiene varios problemas. Requiere bastante seguimiento de nuestra parte para copiar y pegar código. También necesitamos revisar los cambios. Y todo la actividad es bastante frágil, pueden aparecer errores inesperados en esta triple conversación entre dos LLM y un humano. No es algo para proyectos complejos.

Pero incluso si el desarrollo de la idea no es de utilidad real, me sirvió escribir la nota para pensar un poco en el tema.

Nueva Sección de notas rápidas en el blog

Este artículo de Wikipedia nos recuerda que una de las características de los blogs es que son actualizados con frecuencia.

Este es un blog de tutoriales, pero nunca tuve muchas intenciones de actualizarlo de forma constante. Una publicación larga de tanto en tanto para cubrir lo último que estaba aprendiendo siempre me pareció suficiente.

Sin embargo esto cambio en los últimos tiempos. Con la aparición de herramientas IA/LLM el uso de publicaciones 100% informativas ya no parece tan necesario como antes.

¿Sobre qué escribir entonces? ¿Qué puedo hacer con el blog?

Las opciones

Es una situación rara. No quiero dejar de escribir, pero tampoco quiero publicar textos que nadie va a leer.

Si quiero escribir actualizaciones rápidas sobre algo, creo que las redes sociales ya tienen cubierto ese terreno. Y si escribo un tutorial muy largo tampoco voy a encontrar público, las personas pueden consultar los detalles interactuando directamente con una inteligencia artificial.

Una solución rápida puede ser la de escribir artículos de opinión. Pero no me gusta mucho la polémica, y supongo que las redes sociales ya tienen esos temas cubierto.

Por supuesto estoy generalizando un poco. Estoy seguro que muchos blogs triunfan todavía el día de hoy escribiendo tutoriales en profundidad o sobre temas muy avanzados. Pero no tengo tanta experiencia como para hacer ese tipo de material.

Entonces se me ocurrió…

Una vieja nueva forma de actualizar el blog

Quizás puedo encontrar una forma de actualizar el blog de una forma casi periódica, con un post nuevo cada día. Retomando un poco esa idea del blog que se actualiza día a día.

Para eso voy a escribir post de un largo intermedio, y los voy a agregar en esta nueva sección de notas.

Esta sección tiene su propia categoría, y su propio feed de RSS. De esa forma las notas van a poder coexistir con los ocasionales apuntes largos, que no van a mezclarse con esta nueva parte del blog.

El tema de las notas también va a ser el de tecnología y computación. Pero mejor dejo de escribir, o esta nota va a tener más palabras que un post largo.

Espero que puedas seguir leyendo el blog, no olvides compartirme tu opinión enviándome un correo electrónico.