Saltar al contenido

Lección 9 de 20 · Lectura y práctica

Práctica: Desarrollo de un asistente de código con prompts avanzados

Concepto claveEl desarrollo de un asistente de código con prompts avanzados implica crear un sistema que no solo genera código, sino que entiende contexto, sigue patrones arquitectónicos y mantiene coherencia en proyectos.

Del concepto a la práctica

Taller de esta lección

Un asistente de código fiable necesita contexto acotado: convenciones, archivo objetivo y criterio de aceptación. No debe reescribir módulos no solicitados. La respuesta puede incluir propuesta, parche pequeño y pruebas, pero cada parte se revisa por separado.

Ejemplo resuelto

Contexto: función sumar(a,b) en Python; convención: tipos anotados; tarea: rechazar entradas no numéricas. Criterio: sumar(2,3)==5 y sumar("2",3) genera TypeError. El asistente debe modificar solo esa función.

Pruébalo

  1. Entrega el contrato y el fragmento relevante.

  2. Pide una modificación mínima.

  3. Exige dos pruebas de aceptación.

  4. Compara archivos tocados con el alcance pedido.

Error frecuente: pegar todo el repositorio; corrígelo incluyendo únicamente dependencias necesarias y un árbol resumido.

Comprueba tu resultado

La propuesta debe conservar el nombre sumar, pasar la prueba numérica y rechazar la cadena. Si cambia otra función, el ejercicio falla aunque el resultado parezca correcto.

Contrato verificable de suma

python
def sumar(a: int | float, b: int | float) -> int | float:
    if type(a) not in (int, float) or type(b) not in (int, float):
        raise TypeError("Se requieren números")
    return a + b
assert sumar(2, 3) == 5
try:
    sumar("2", 3)
except TypeError:
    pass
else:
    raise AssertionError("Debe rechazar cadena")

Este contrato acepta int y float, excluye bool y no usa eval. Si necesitas prohibir infinito o NaN, añádelo como otro requisito y caso. No envíes secretos ni archivos ajenos al propósito para completar el contexto.

Cinco piezas de un pedido a la IA: objetivo, contexto, límites, formato y criterio de evaluación.
CursaloMapa de práctica
Un pedido que se puede evaluar

Un pedido útil explica qué resultado se busca y aporta el contexto necesario. Los límites y el formato reducen ambigüedades. Un criterio observable permite revisar el resultado y pedir un ajuste concreto.

Ver la infografía en tamaño completo ↗
Fuentes para profundizar

Concepto clave

El desarrollo de un asistente de código con prompts avanzados implica crear un sistema que no solo genera código, sino que entiende contexto, sigue patrones arquitectónicos y mantiene coherencia en proyectos complejos. Piensa en esto como tener un arquitecto de software virtual que no solo te da ladrillos, sino que entiende cómo construir una casa completa, considerando cimientos, estructura y acabados.

En el mundo real, esto se parece a trabajar con un desarrollador senior que conoce tus convenciones de equipo, tus patrones de diseño preferidos y las mejores prácticas de tu stack tecnológico. El asistente debe ir más allá de generar funciones aisladas; debe entender relaciones entre componentes, manejar estados, y mantener consistencia en todo el proyecto.

Cómo funciona en la práctica

Vamos a construir un asistente que ayude a desarrollar una API REST con Node.js y Express. El proceso comienza con un prompt básico y lo refinamos paso a paso:

  1. Prompt inicial: "Genera un endpoint GET para usuarios"
  2. Prompt mejorado: "Como desarrollador full stack, necesito un endpoint GET /api/users que: 1) Use async/await, 2) Incluya validación de JWT token en headers, 3) Implemente paginación con límite de 20 resultados, 4) Retorne formato JSON estándar con status 200, 5) Maneje errores con try-catch y status 500"
  3. Prompt contextual: Agregamos información sobre la base de datos (MongoDB con Mongoose), estructura de modelo existente, y convenciones de nombrado del equipo.

Codigo en accion

Veamos la diferencia entre un prompt básico y uno avanzado:

Antes: Prompt simple

// Prompt: "Crea una función para obtener usuarios"
// Resultado típico:
async function getUsers() {
  const users = await User.find({});
  return users;
}

Después: Prompt avanzado con contexto

// Prompt: "Como desarrollador full stack trabajando en un proyecto Node.js/Express con MongoDB, crea un endpoint GET /api/users que:
// - Use el modelo User de Mongoose ya definido con campos: name, email, role, createdAt
// - Implemente autenticación JWT (token en header Authorization)
// - Incluya paginación: query params 'page' y 'limit' (default 20)
// - Solo admin puede ver todos los usuarios, usuarios normales solo ven su propio perfil
// - Formato de respuesta: { success: true, data: [...], pagination: { page, limit, total } }
// - Manejo de errores con middleware de errores existente"

// Resultado:
const auth = require('../middleware/auth');
const User = require('../models/User');

router.get('/users', auth.verifyToken, auth.checkRole(['admin', 'user']), async (req, res, next) => {
  try {
    const page = parseInt(req.query.page) || 1;
    const limit = parseInt(req.query.limit) || 20;
    const skip = (page - 1) * limit;
    
    let query = {};
    if (req.user.role !== 'admin') {
      query = { _id: req.user.id };
    }
    
    const [users, total] = await Promise.all([
      User.find(query)
        .select('name email role createdAt')
        .skip(skip)
        .limit(limit)
        .sort({ createdAt: -1 }),
      User.countDocuments(query)
    ]);
    
    res.status(200).json({
      success: true,
      data: users,
      pagination: {
        page,
        limit,
        total,
        pages: Math.ceil(total / limit)
      }
    });
  } catch (error) {
    next(error);
  }
});

Errores comunes

  • Falta de contexto específico: No proporcionar información sobre stack tecnológico, modelos existentes o convenciones del equipo. Solución: Incluir siempre detalles técnicos relevantes en el prompt.
  • Prompt demasiado general: Pedir "crea una API" sin especificar endpoints, métodos o requisitos. Solución: Desglosar en requisitos específicos y estructurados.
  • Ignorar seguridad: Olvidar incluir requisitos de autenticación, autorización o validación. Solución: Siempre mencionar aspectos de seguridad en los prompts.
  • No especificar formato de respuesta: Dejar que el modelo decida el formato, creando inconsistencia. Solución: Definir estructura de respuesta esperada.
  • Ausencia de manejo de errores: No indicar cómo deben manejarse los casos de error. Solución: Incluir estrategia de manejo de errores en el prompt.

Checklist de dominio

  1. ¿Incluyo stack tecnológico completo en el prompt? (Node.js version, framework, base de datos, ORM)
  2. ¿Especifico modelos de datos existentes y sus relaciones?
  3. ¿Defino requisitos de seguridad (autenticación, autorización, validación)?
  4. ¿Establezco formato de respuesta consistente (JSON structure, status codes)?
  5. ¿Incluyo manejo de errores y casos límite?
  6. ¿Menciono convenciones de código del equipo (nombrado, estructura de archivos)?
  7. ¿Proporciono ejemplos de entrada/salida cuando es necesario?

Desarrollo de un asistente de código para sistema de autenticación

Objetivo

Crear un sistema de prompts que genere un módulo completo de autenticación para una aplicación web.

Pasos

  1. Define el contexto: Crea un prompt inicial describiendo la aplicación: Stack MERN (MongoDB, Express, React, Node.js), usuario con campos: username, email, password (hash), role, createdAt.
  2. Especifica endpoints: Diseña prompts para 4 endpoints: registro, login, logout, y verificación de token.
  3. Agrega seguridad: Incluye en los prompts: hashing con bcrypt, JWT tokens, validación de email, rate limiting.
  4. Establece convenciones: Define estructura de carpetas, nombres de funciones, y formato de respuestas JSON.
  5. Implementa y prueba: Usa tu prompt para generar el código, luego crea un test básico que verifique cada endpoint.

Entrega esperada

  • Colección de prompts optimizados para cada endpoint
  • Código generado funcional
  • Documentación breve de cómo usar los prompts
Pistas
  • Comienza con un prompt maestro que establezca todo el contexto del proyecto
  • Para cada endpoint, crea un prompt específico que herede del contexto general
  • Incluye ejemplos de request/response en los prompts complejos

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.

Sigue con Prompt Engineering Avanzado para APIs de GPT y Claude: Desarrollo de Sistemas Inteligentes

Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.

Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.