Que es el prompt engineering y por que importa
El prompt engineering es el arte de escribir instrucciones precisas para que una IA genere exactamente lo que necesitas. No es magia ni talento natural: es una habilidad tecnica que se aprende con practica y patrones especificos. Despues de trabajar con modelos de IA durante mas de 2 anos, he identificado patrones claros que consistentemente producen mejores resultados.
La diferencia entre un prompt mediocre y uno excelente puede ser la diferencia entre codigo con bugs y codigo listo para produccion. Los modelos de lenguaje como GPT-4 y Claude son extremadamente capaces, pero su output depende directamente de la calidad de tu input.
Los 5 principios fundamentales
1. Especificidad sobre generalidad
| Prompt malo | Prompt bueno | Por que es mejor |
|---|---|---|
| "Haz una funcion de login" | "Crea una funcion async en Node.js/Express que reciba email y password por POST, valide contra bcrypt, genere un JWT con expiracion de 24h, y retorne {token, user} o error 401" | Especifica lenguaje, patron, libreria, formato de respuesta |
| "Mejora este codigo" | "Refactoriza este controlador Laravel aplicando Single Responsibility. Extrae la logica de validacion a un FormRequest y la logica de negocio a un Service" | Define que patron aplicar y como |
| "Haz una query SQL" | "Escribe una query PostgreSQL que obtenga los 10 productos mas vendidos del ultimo mes, incluyendo nombre, total_vendido y revenue. Tablas: products(id,name,price), orders(id,created_at), order_items(order_id,product_id,quantity)" | Incluye schema y requisitos exactos |
2. Contexto, contexto, contexto
En mi experiencia, el 80% de las respuestas malas de ChatGPT se deben a falta de contexto. Antes de pedir codigo, incluye:
## Contexto de mi proyecto
- Stack: Laravel 11 + Vue 3 + MySQL
- PHP 8.3, Composer
- Autenticacion: Laravel Sanctum
- Testing: PHPUnit
- Estructura: Controladores en app/Http/Controllers/Api/
## Lo que necesito
Crea un endpoint para actualizar el perfil del usuario autenticado.
Debe validar: name (string, max:100), email (unique excepto el actual),
avatar (nullable, image, max:2MB).
## Restricciones
- Usar FormRequest para validacion
- Retornar UserResource con el usuario actualizado
- Incluir test unitario
3. Few-shot: ensena con ejemplos
Cuando necesitas un formato especifico, dale un ejemplo de entrada y salida esperada.
Convierte estas rutas de Express a documentacion OpenAPI 3.0.
Ejemplo:
Input: app.get('/users/:id', getUser)
Output:
/users/{id}:
get:
summary: Get user by ID
parameters:
- in: path
name: id
required: true
schema:
type: integer
Ahora convierte estas:
app.post('/products', createProduct)
app.put('/products/:id', updateProduct)
app.delete('/products/:id', deleteProduct)
4. Chain-of-thought: pide razonamiento
Para problemas complejos, pide a la IA que razone paso a paso antes de dar la solucion.
Analiza este problema de performance en mi query MySQL.
Piensa paso a paso:
1. Identifica los posibles cuellos de botella
2. Sugiere indices que podrian ayudar
3. Reescribe la query optimizada
4. Explica por que cada cambio mejora el rendimiento
Query:
SELECT u.*, COUNT(o.id) as total_orders, SUM(o.total) as revenue
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE o.created_at > '2026-01-01'
GROUP BY u.id
HAVING revenue > 1000
ORDER BY revenue DESC
LIMIT 20;
5. Rol y restricciones
Asignarle un rol a la IA enfoca sus respuestas. Un error que cometia al principio era no establecer el nivel de experiencia esperado.
Actua como un Senior Backend Engineer con 10 anos de experiencia en PHP/Laravel.
Revisa este codigo y señala:
- Vulnerabilidades de seguridad
- Problemas de rendimiento
- Violaciones de principios SOLID
- Mejoras de legibilidad
No me des codigo corregido todavia, solo lista los problemas
con severidad (critica/alta/media/baja).
Patrones avanzados para programadores
Patron "Iterativo"
No intentes obtener la respuesta perfecta en un solo prompt. Construye iterativamente:
Paso 1: "Diseña la arquitectura de un sistema de notificaciones push"
Paso 2: "Ahora implementa el servicio de envio con Firebase FCM"
Paso 3: "Agrega manejo de errores y reintentos con exponential backoff"
Paso 4: "Escribe tests para los 3 escenarios principales"
Patron "Comparativo"
Compara estas 3 formas de manejar estado global en React:
1. Context API + useReducer
2. Zustand
3. Redux Toolkit
Para cada una muestra:
- Ejemplo de codigo minimo funcionando
- Pros y contras
- Cuando elegir cada una
- Rendimiento con 50+ componentes
Patron "Rubber Duck" (Depuracion)
Actua como mi rubber duck de debugging.
Te voy a explicar mi problema paso a paso.
Despues de cada paso, hazme preguntas que me ayuden
a encontrar el bug yo mismo.
No me des la solucion directamente.
Mi problema: la paginacion de mi API devuelve
registros duplicados cuando el usuario avanza a la pagina 2...
Errores comunes y soluciones
Error 1: Prompts de una sola linea. "Haz un CRUD" produce codigo generico. Invierte 2 minutos en escribir un prompt detallado y ahorra 20 minutos de correcciones. La regla es: si tu prompt tiene menos de 3 lineas, probablemente le falta contexto.
Error 2: No especificar el stack. Si no dices que usas TypeScript, obtendras JavaScript. Si no dices Laravel 11, obtendras Laravel 8. La IA no adivina tu entorno.
Error 3: Pedir codigo completo de un proyecto. Los modelos tienen limites de contexto. Pide componentes individuales y conéctalos tu. Es mas efectivo y produce mejor codigo.
Error 4: Ignorar la documentacion oficial. Para conocer la sintaxis actual de un framework, la documentacion oficial siempre gana. La IA puede tener informacion desactualizada.
Error 5: No validar la seguridad. Nunca uses codigo generado por IA para autenticacion, encriptacion o manejo de datos sensibles sin una revision exhaustiva. Las IAs generan codigo que "funciona" pero puede tener vulnerabilidades criticas como SQL injection o XSS.