Concepto clave
La integración de sistemas de prompting en aplicaciones full stack es como diseñar la arquitectura de comunicación entre un equipo humano especializado. Imagina que tienes un equipo de expertos: algunos son creativos (como GPT), otros son analíticos (como Claude), y tú eres el director que coordina sus respuestas para construir una aplicación completa. En lugar de hacer preguntas aisladas, creas un sistema de prompts que guía a las APIs a través de flujos predefinidos, manteniendo contexto, manejando errores y combinando sus fortalezas.
Este enfoque transforma las APIs de lenguaje en componentes confiables de tu aplicación, similares a microservicios que procesan lenguaje natural. La clave está en diseñar prompts que sean determinísticos en comportamiento aunque las respuestas varíen, estableciendo reglas claras de formato, validación y fallback. Piensa en ello como crear un protocolo de comunicación donde cada prompt sabe exactamente qué información necesita, cómo procesarla y qué hacer si algo sale mal.
Cómo funciona en la práctica
Vamos a construir un sistema de recomendación de contenido que usa GPT para generar ideas creativas y Claude para analizar viabilidad. El flujo es: 1) El usuario ingresa un tema, 2) GPT genera 5 ideas de contenido, 3) Claude evalúa cada idea según criterios de negocio, 4) Se presenta la mejor opción con justificación.
Paso a paso: Primero, diseñamos el prompt para GPT con estructura clara: "Actúa como un estratega de contenido. Dado el tema [X], genera exactamente 5 ideas de blog post. Formato: lista numerada con título y descripción de 1 línea." Luego, para Claude: "Evalúa estas ideas según: relevancia (1-5), potencial de tráfico (1-5), facilidad de producción (1-5). Devuelve JSON con scores y recomendación." Finalmente, nuestro backend orquesta este flujo, manejando timeouts y parseando respuestas.
Código en acción
Aquí está el núcleo del sistema en Node.js/Express. Primero, el enfoque básico (antes):
// Enfoque básico - prompts desorganizados
async function getContentIdeas(topic) {
const gptPrompt = `Genera ideas sobre ${topic}`;
const ideas = await callGPT(gptPrompt);
// Problema: respuesta impredecible
return ideas;
}Ahora, el sistema integrado (después):
// Sistema integrado con prompts estructurados
class ContentRecommender {
constructor() {
this.gptPromptTemplate = `Actúa como estratega de contenido profesional.
Tema: {{topic}}
Instrucciones:
1. Genera EXACTAMENTE 5 ideas de blog post.
2. Formato: lista numerada.
3. Cada idea: título + descripción (1 línea).
4. Enfócate en valor práctico.
Ideas:`;
this.claudePromptTemplate = `Analiza estas ideas de contenido:
{{ideas}}
Evaluación:
1. Relevancia (1-5): ¿Resuelve problema real?
2. Tráfico potencial (1-5): ¿Atrae audiencia?
3. Producción (1-5): ¿Factible en 2 semanas?
Devuelve JSON:
{
"scores": [
{"idea": 1, "relevancia": 5, "trafico": 4, "produccion": 3, "total": 12},
...
],
"recomendacion": "Idea #X"
}`;
}
async recommend(topic) {
// Paso 1: Generar ideas con GPT
const gptPrompt = this.gptPromptTemplate.replace('{{topic}}', topic);
const ideas = await this.callAPI('gpt-4', gptPrompt, {max_tokens: 300});
// Paso 2: Validar formato
if (!this.validateIdeasFormat(ideas)) {
throw new Error('Formato de ideas inválido');
}
// Paso 3: Evaluar con Claude
const claudePrompt = this.claudePromptTemplate.replace('{{ideas}}', ideas);
const evaluation = await this.callAPI('claude-3', claudePrompt, {max_tokens: 500});
// Paso 4: Parsear y retornar
return this.parseEvaluation(evaluation);
}
validateIdeasFormat(text) {
// Verifica que sea lista numerada
return /^\d+\.\s+.+$/m.test(text);
}
}Errores comunes
1. Prompts monolíticos: Crear un mega-prompt que hace todo. Error: difícil de debuggear y mantener. Solución: Dividir en prompts especializados, como en nuestro ejemplo con GPT para creatividad y Claude para análisis.
2. Falta de validación: Asumir que la API siempre responde en el formato esperado. Error: la aplicación se rompe con respuestas inesperadas. Solución: Incluir validaciones como validateIdeasFormat() y manejo de errores.
3. Contexto perdido: No pasar información suficiente entre prompts. Error: Claude evalúa sin entender el contexto original. Solución: Diseñar templates que incluyan variables claras como {{topic}} y {{ideas}}.
4. Timeouts no manejados: Asumir respuestas instantáneas. Error: la aplicación se congela. Solución: Implementar timeouts y retries con exponential backoff.
5. Prompt drift: Cambiar prompts sin actualizar código de parseo. Error: inconsistencia entre generación y procesamiento. Solución: Versionar prompts y tests de integración.
Checklist de dominio
- ✓ Diseñé al menos 2 prompts especializados que trabajan en conjunto
- ✓ Implementé validación de formato para respuestas de API
- ✓ Manejo timeouts y errores de red en llamadas a API
- ✓ Uso templates con variables para mantener contexto
- ✓ Documento el flujo completo de prompts para el equipo
- ✓ Creo tests que verifican el formato de respuestas
- ✓ Monitorizo costos y latencia de cada prompt en producción
Sistema de onboarding con GPT y Claude
Objetivo
Construye un sistema de onboarding que use GPT para generar contenido personalizado y Claude para validar consistencia.
Pasos
- Configuración inicial: Crea un proyecto Node.js con Express. Instala axios para llamadas HTTP.
- Diseño de prompts: Define 2 prompts:
- Prompt GPT: Genera email de bienvenida personalizado basado en perfil de usuario (nombre, industria, intereses).
- Prompt Claude: Valida que el email cumple con guías de tono (profesional pero cálido) y no tiene información contradictoria.
- Implementación: Crea endpoint POST /onboarding que:
- Acepta JSON con perfil de usuario
- Llama a GPT con prompt estructurado
- Valida que el email tenga saludo, cuerpo y despedida
- Envía email a Claude para validación
- Retorna email validado o error
- Manejo de errores: Implementa:
- Timeout de 10 segundos por API
- Reintento 1 vez si falla
- Validación de formato de respuesta
- Testing: Crea test con 3 perfiles diferentes y verifica que los emails sean únicos y válidos.
Entregables
- Código completo en GitHub
- Documentación de prompts usados
- Ejemplo de 3 respuestas generadas
- Usa variables en templates como {{nombre}} y {{industria}} para personalización
- Implementa una función validateEmailStructure() que verifique saludo y despedida
- Para Claude, pide específicamente "Devuelve 'VALIDO' o 'INVALIDO: razón'" para parseo fácil
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.