El mes pasado pasé tres semanas reescribiendo el mismo prompt seis veces. La primera versión funcionó perfectamente en Claude. La cambié a GPT-4o y obtuve resultados mediocres. La cambié a Gemini 2.0 y alucinó números de teléfono. Mismas instrucciones. Tres resultados diferentes.
El problema no eran los prompts, sino que estaba escribiendo para el modelo, no para la tarea. Cada LLM tiene datos de entrenamiento diferentes, patrones de razonamiento distintos y comportamientos predeterminados muy variados. Una vez que dejé de pensar en «un buen prompt» y empecé a pensar en «un prompt que funcione para este modelo específico y esta tarea específica», las cosas cambiaron.
No se trata de aprender tres lenguajes de prompt diferentes. Se trata de entender dónde divergen estos modelos, qué técnicas funcionan universalmente y exactamente qué ajustes marcan la diferencia en cada uno.
Por qué el Mismo Prompt Falla en Diferentes Modelos
Claude (especialmente Claude Sonnet 3.5 y 4), GPT-4o y Gemini 2.0 fueron entrenados con datos diferentes, optimizados para objetivos distintos y construidos con elecciones arquitectónicas diferentes. Eso importa para el prompting de maneras específicas y medibles.
Claude fue entrenado con Constitutional AI, un método que enfatiza la reflexión y el razonamiento explícito. Notarás que tiende a mostrar su trabajo, incluso cuando no se lo pides. También es más resistente a jailbreaks y a la explotación de casos límite, lo que significa que a veces rechaza solicitudes razonables si se formulan de maneras que activan su entrenamiento de seguridad.
GPT-4o fue entrenado para ser extremadamente de propósito general y confiado. Sobresale siguiendo instrucciones complejas y de varios pasos. También es más propenso a alucinaciones en escenarios donde carece de datos de entrenamiento; inventará información plausible en lugar de decir «no sé». La eficiencia de tokens es mejor que la de Claude en muchas tareas.
Gemini 2.0 (lanzado en diciembre de 2024) tiene capacidades multimodales integradas desde el principio y fue entrenado con datos más recientes que Claude y GPT-4o. Es agresivo con la ventana de contexto (soporta hasta 2 millones de tokens en algunas configuraciones), pero a veces rinde menos en tareas de razonamiento intensivo en comparación con Claude Sonnet 3.5.
Estos no son fallos de diseño. Son compromisos. Y requieren estrategias de prompt diferentes.
Técnicas Universales que Funcionan en los Tres
No todo necesita ser específico del modelo. Algunos patrones funcionan en Claude, GPT y Gemini; solo requieren la configuración adecuada.
Salida Estructurada con Delimitadores Claros
Cada LLM responde mejor cuando defines el formato exacto que deseas. No «resume esto», sino «devuelve un objeto JSON con las claves: resumen (cadena), confianza (0-1), contexto_faltante (array)».
Así es como se ve esto en la práctica:
## Prompt malo (demasiado abierto)
Resume este artículo de investigación sobre alucinaciones de LLM.
## Prompt mejorado (salida estructurada)
Lee el siguiente artículo de investigación. Devuelve tu respuesta como JSON válido con estas claves exactas:
{
"title": "título exacto del artículo",
"core_finding": "1-2 oraciones describiendo el resultado principal",
"methodology": "cómo midieron las alucinaciones",
"confidence": "0.0 a 1.0 - tu confianza en este resumen",
"cited_benchmarks": ["lista de benchmarks específicos mencionados"]
}
Artículo:
[contenido del artículo]
Por qué esto funciona en todas partes: la salida estructurada reduce la ambigüedad. Claude honrará el formato JSON porque está entrenado para ello. GPT-4o también lo hará; está optimizado para el consumo de API. Gemini también lo hará, aunque puede que necesites añadir «Devuelve JSON válido y analizable» si empieza a envolver el JSON en bloques de código markdown.
Esto por sí solo reduce los errores de análisis y las sorpresas de comportamiento específicas del modelo en aproximadamente un 60% según mi experiencia construyendo pipelines de AlgoVesta.
Definición de Rol y Tono
La definición explícita de rol funciona en los tres modelos, pero la configuración difiere ligeramente en el tono.
Claude responde bien a la formulación colaborativa: «Eres un experto en [dominio]. Ayúdame a pensar en [problema]». Se apropia del rol y tiende a añadir matices y advertencias sin que se lo pidan.
GPT-4o responde mejor a la formulación directiva: «Eres un [rol]. Tu tarea: [acción específica]». Lo interpreta como una descripción clara del trabajo y lo ejecuta con menos pensamiento tangencial.
Gemini se sitúa en el medio; responde a ambos estilos, pero funciona mejor cuando eres explícito sobre las restricciones: «Eres un [rol]. Responde solo con [tipo de salida]. No [comportamiento a evitar]».
Los tres se benefician de instrucciones explícitas de tono:
## Los tres modelos, estructura similar
Eres un escritor de documentación técnica para desarrolladores con experiencia intermedia en Python.
Tono: Directo y enfocado en el código. Evita el lenguaje de marketing. Asume que el lector se saltará a los ejemplos de código.
Tarea: Explica [concepto técnico] de una manera que tenga sentido para alguien que entiende [prerrequisito] pero no [este nuevo concepto].
Proporciona: explicación (máximo 3-4 oraciones) + ejemplo de código funcional + un error común a evitar
La diferencia es sutil pero importa a gran escala: la formulación directiva impulsa a GPT-4o a ser más eficiente. La formulación colaborativa hace que Claude sea más reflexivo.
Técnicas Específicas del Modelo y Cuándo Funcionan
Claude: Razonamiento Explícito y Cadena de Pensamiento Extendida
El entrenamiento de Constitutional AI de Claude lo hace excepcional mostrando razonamiento. Naturalmente realiza pensamiento en cadena sin que se lo pidan, y maneja el «no estoy seguro» mejor que los otros dos.
Aprovecha esto con prompts que invitan a la reflexión:
## Prompt optimizado para Claude (razonamiento explícito)
Analiza este ticket de soporte al cliente para determinar el sentimiento y la urgencia.
Antes de responder, piensa en:
1. ¿Qué palabras o frases específicas indican el estado emocional?
2. ¿Hay un plazo explícito o presión de tiempo?
3. ¿Qué NO se dice? ¿Qué se implica?
4. ¿Qué tan seguro estoy de esta evaluación?
Luego devuelve JSON:
{
"sentiment": "positivo|neutral|negativo|mixto",
"urgency_level": 1-5,
"reasoning": "explica tu evaluación",
"confidence": 0.0-1.0,
"red_flags": ["lista de elementos preocupantes"]
}
Ticket:
[mensaje del cliente]
Claude sobresale aquí porque le pides que se detenga y piense. Esto no es cierto para todas las tareas; a veces el pensamiento de Claude es excesivo. Pero para decisiones, clasificación con matices y cualquier cosa que requiera «explica tu razonamiento», este patrón reduce las tasas de error mediblemente.
Cuándo NO usar esto: para tareas simples y fácticas («extrae la fecha de este correo electrónico»), el razonamiento extendido añade latencia sin mejorar la precisión. Claude se vuelve más rápido y preciso si eliminas la solicitud de razonamiento.
GPT-4o: Ejemplos Pocos Disparos e Instrucciones Paso a Paso
GPT-4o fue entrenado para seguir instrucciones secuenciales complejas. Responde excepcionalmente bien al aprendizaje de pocos disparos (few-shot learning), mostrándole 2-3 ejemplos de entrada y salida deseada, y dividiendo las tareas en pasos numerados.
## Prompt optimizado para GPT-4o (pocos disparos + secuenciación)
Extrae datos estructurados de comentarios de clientes no estructurados. Devuelve JSON.
Ejemplos:
Entrada: "La aplicación se bloquea cada vez que intento subir una foto. Esto es ridículo."
Salida: {"issue_type": "bug", "severity": "high", "affected_feature": "photo upload", "sentiment": "frustrated"}
Entrada: "Acabo de empezar a usar esto. Bastante bien hasta ahora, aunque un poco caro."
Salida: {"issue_type": "feedback", "severity": "low", "affected_feature": "pricing", "sentiment": "cautiously positive"}
Entrada: "El modo oscuro funciona genial. Exactamente lo que necesitaba."
Salida: {"issue_type": "praise", "severity": "low", "affected_feature": "dark mode", "sentiment": "positive"}
Ahora procesa este comentario:
1. Identifica el problema o tema principal
2. Asigna un tipo: bug, solicitud de función, feedback o elogio
3. Califica la gravedad (1-5, donde 5 = rompe la funcionalidad principal)
4. Extrae la característica a la que se relaciona
5. Clasifica el sentimiento
6. Devuelve como JSON
Comentario:
[mensaje del cliente]
Esto funciona porque GPT-4o trata los ejemplos como una señal de aprendizaje y los pasos numerados como una ruta de ejecución clara. Añade 2-3 ejemplos y esencialmente le has mostrado el patrón. Se generalizará bien a variaciones.
Modo de fallo: Si le das a GPT-4o demasiados ejemplos contradictorios o instrucciones ambiguas, tiende hacia el caso más común en tus ejemplos en lugar de razonar a través de casos límite. Claude señalaría la ambigüedad. GPT-4o rellena los huecos.
Gemini 2.0: Contexto Largo y Especificación Agresiva
La verdadera ventaja de Gemini es la ventana de contexto, hasta 2 millones de tokens. También es fuerte en tareas multimodales (texto + imagen + video + audio en un solo prompt). El compromiso: a veces tiene dificultades con el razonamiento abstracto en documentos largos y se beneficia de la sobre-especificación.
## Prompt optimizado para Gemini (restricciones explícitas)
Estás analizando un documento de especificación técnica de 150 páginas.
RESTRICCIÓN: No sintetices ni infieras información que no esté explícitamente indicada. Si el documento no menciona algo, di "no especificado" en lugar de adivinar.
RESTRICCIÓN: Cita pasajes exactos al respaldar afirmaciones. No parafrasees.
Tarea:
1. Extrae todos los requisitos del sistema (hardware, software, dependencias)
2. Enumera todas las suposiciones que la especificación hace sobre el entorno del usuario
3. Identifica cualquier contradicción entre secciones
4. Devuelve como JSON
Formato de respuesta:
{
"requirements": [{"type": "string", "value": "string", "source_section": "string"}],
"assumptions": [{"assumption": "string", "mentioned_in": "string"}],
"contradictions": [{"claim_a": "string", "claim_b": "string", "sections": ["string", "string"]}]
}
Especificación:
[texto completo del documento]
Gemini necesita que seas agresivo estableciendo límites. La razón: está menos entrenado en respuestas de «no sé» y más entrenado en generar texto plausible. Restricciones explícitas como «no infieras» y «cita exactamente» lo impulsan hacia la precisión.
Donde Gemini brilla: resumen de múltiples documentos, cotejo de fuentes a través de contextos muy largos, extracción de patrones de cientos de páginas. Donde tiene dificultades: razonamiento creativo abierto, juicios sin criterios claros.
Creando un Prompt que Funciona en los Tres
Una vez que entiendes las diferencias, puedes escribir prompts que funcionen bien en los tres modelos. La estrategia: optimiza para el modelo más restrictivo (el entrenamiento de seguridad de Claude), luego añade mejoras específicas del modelo.
Aquí tienes un ejemplo de producción de AlgoVesta: un prompt que clasifica señales de trading de múltiples fuentes de datos:
## Prompt base (funciona en los tres)
Eres un analista financiero evaluando señales de trading.
Analiza las señales a continuación. Devuelve JSON con clasificación, confianza y razonamiento.
Restricciones:
- Utiliza solo la información proporcionada en las señales. No añadas conocimiento externo.
- Si las señales se contradicen, identifica la contradicción y declara tu intervalo de confianza.
- Califica tu certeza: 0.0 (pura suposición) a 1.0 (seguro).
Señales a analizar:
[datos de la señal]
Devuelve:
{
"primary_signal": "alcista|bajista|neutral",
"confidence": 0.0-1.0,
"contradictions": ["lista si las hay"],
"reasoning": "por qué lo clasificaste de esta manera"
}
Este prompt base funciona en los tres. Así es como puedes ajustarlo:
Para Claude: Añade «Piensa en tu razonamiento paso a paso antes de responder.» Claude será naturalmente más minucioso. Reformula las restricciones como preguntas: «¿Dónde se contradicen las señales? ¿Qué falta?»
Para GPT-4o: Añade 2-3 ejemplos de señales con sus clasificaciones esperadas. Añade pasos numerados: «1. Extrae señales alcistas. 2. Extrae señales bajistas. 3. Compara los niveles de confianza. 4. Devuelve JSON.» GPT-4o seguirá la secuencia exactamente.
Para Gemini: Añade declaraciones explícitas de «No»: «No referencies conocimiento externo del mercado. No infieras contexto no proporcionado.» Añade especificaciones de longitud de salida: «El razonamiento debe ser de 1-2 oraciones.» Haz las restricciones a prueba de balas.
Pruebas A/B de Prompts entre Modelos
En producción, necesitas saber qué prompt funciona mejor para qué modelo. Esto requiere pruebas sistemáticas.
Paso 1: Define tu métrica. «Mejor» significa cosas diferentes para diferentes tareas. Para clasificación, es precisión. Para resumen, es cobertura + concisión. Para tareas creativas, es novedad + relevancia.
Paso 2: Crea casos de prueba. Mínimo 20 ejemplos. Deben representar casos límite y casos comunes. Un conjunto de datos equilibrado detecta fallos de prompt que pasarías por alto con solo ejemplos fáciles.
Paso 3: Ejecuta todas las variantes de prompt en todos los casos de prueba con todos los modelos. Esto es tedioso. Automatízalo con un script simple de Python que itere a través de modelos y variantes, y luego registre los resultados en una hoja de cálculo.
## Ejemplo de sistema de pruebas (Python)
import anthropic
import openai
from google import genai
import json
import csv
test_cases = [
{"input": "ejemplo 1", "expected": "salida esperada 1"},
{"input": "ejemplo 2", "expected": "salida esperada 2"},
# ... 18 casos de prueba más
]
prompt_variants = {
"base": "tu prompt base",
"with_reasoning": "base + instrucción de razonamiento",
"few_shot": "base + 2-3 ejemplos",
}
models = {
"claude": "claude-3-5-sonnet-20241022",
"gpt4o": "gpt-4o-2024-11-20",
"gemini": "gemini-2.0-flash",
}
results = []
for model_name, model_id in models.items():
for variant_name, prompt_template in prompt_variants.items():
for test_case in test_cases:
# Llama al modelo con esta variante específica
if model_name == "claude":
client = anthropic.Anthropic()
response = client.messages.create(
model=model_id,
max_tokens=1024,
messages=[{"role": "user", "content": prompt_template + "\n\n" + test_case["input"]}]
)
output = response.content[0].text
# ... similar para GPT y Gemini
# Puntuación de la salida (tú la defines)
score = evaluate_output(output, test_case["expected"])
results.append({
"model": model_name,
"variant": variant_name,
"test_id": test_case.get("id"),
"score": score
})
# Escribir resultados en CSV
with open("results.csv", "w") as f:
writer = csv.DictWriter(f, fieldnames=["model", "variant", "test_id", "score"])
writer.writeheader()
writer.writerows(results)
# Agregación por modelo + variante
agg = {}
for r in results:
key = (r["model"], r["variant"])
if key not in agg:
agg[key] = []
agg[key].append(r["score"])
for (model, variant), scores in agg.items():
avg_score = sum(scores) / len(scores)
print(f"{model} + {variant}: {avg_score:.2f}")
Esto lleva 2-3 horas de configuración, pero ahorra semanas de adivinanzas. Una vez que tengas los resultados, puedes elegir la combinación óptima de prompt-modelo para tu caso de uso, o usar un enfoque de conjunto (enrutar algunas solicitudes a Claude, otras a GPT-4o según las características de entrada).
Fallos Comunes y Cómo Evitarlos
Estos patrones fallan consistentemente en los tres modelos si no se manejan correctamente:
Alucinaciones en tareas fácticas: Los tres modelos inventarán información plausible cuando carezcan de datos de entrenamiento. Solución: prohibir explícitamente la inferencia. «Solo usa la información proporcionada. Si no se menciona, di ‘no proporcionado’ en lugar de adivinar.» Esto funciona en todas partes.
Manipulación de instrucciones del prompt: Un modelo seguirá la última instrucción que parezca de mayor prioridad. Si dices «sé conciso» y «explica detalladamente», elige una. Solución: sé explícito sobre los compromisos. «Prioriza la precisión sobre la brevedad. Una respuesta más larga pero correcta es mejor que una corta pero incompleta.»
Deriva del formato: El modelo empieza a seguir tu formato perfectamente, y luego lo abandona a mitad de camino. Solución: repite la instrucción de formato al final del prompt. «Devuelve todas las respuestas como JSON. No añadas formato markdown.»
Sobrecarga de la ventana de contexto: Proporcionas 100k tokens y el modelo tiene problemas con el razonamiento. El problema no es el tamaño, sino que contextos muy largos degradan la atención. Solución: resume o filtra el contexto antes de enviarlo. Específicamente para Gemini, divide las tareas de múltiples documentos en fragmentos más pequeños, aunque pueda manejar 2M de tokens.
Cuándo Enrutar a Modelos Específicos
No necesitas hacer ingeniería de prompts por igual para los tres. A veces un modelo es el claro ganador. Saber cuándo te ahorra tiempo y tokens.
| Tipo de Tarea | Mejor Modelo | Por qué | Ajuste del Prompt |
|---|---|---|---|
| Clasificación con matices (¿es esto feedback positivo o mixto?) | Claude | Constitutional AI lo hace mejor en juicios. Menos propenso a simplificar en exceso. | Pide razonamiento. Invita a la reflexión. |
| Extracción de varios pasos (extraer todos los correos, fechas y prioridades) | GPT-4o | Sobresale siguiendo instrucciones numeradas y secuenciales. | Usa ejemplos de pocos disparos + numeración paso a paso. |
| Resumen de documentos largos (más de 100 páginas) | Gemini 2.0 | Ventana de contexto + menor tasa de alucinación en extracción fáctica en documentos largos. | Sé explícito sobre las restricciones. Sin inferencias. |
| Generación de contenido creativo | GPT-4o o Claude (empate) | Ambos sobresalen. GPT-4o es más rápido. Claude es más reflexivo. | Para GPT: ejemplos de pocos disparos. Para Claude: pide alternativas y razonamiento. |
| Generación de código | Claude | Produce código más limpio y mantenible. Mejor explicando compromisos. | Pide comentarios + explicación. Solicita manejo de errores explícitamente. |
| Análisis de imagen + texto | Gemini 2.0 | Construido para multimodal desde el principio. Otros modelos pueden hacerlo, pero menos naturalmente. | Describe el contexto de la imagen explícitamente. Sé específico sobre qué extraer. |
Tu Acción Esta Semana
Elige una tarea para la que estés usando actualmente un LLM. Reescribe tu prompt usando el formato de salida estructurada (JSON con claves explícitas), añade definición de rol y pruébalo en los tres modelos con 10 ejemplos reales de tus datos.
Registra los resultados. ¿Qué modelo funciona mejor? ¿Qué variante de prompt funcionó mejor? Dedica 90 minutos a esto, no más. Tendrás una decisión basada en datos sobre qué modelo usar y exactamente cómo solicitarlo. Eso es mejor que adivinar.