La ingeniería de prompts da forma al comportamiento de los LLM a través de instrucciones, ejemplos y estructura. Los buenos prompts reducen las alucinaciones, imponen el formato de salida y mejoran la precisión de las tareas sin reentrenar el modelo.
Tarjeta de referencia rápida - lista para copiar y pegar.
SYSTEM = """Eres un revisor de código Python.- Marca errores, problemas de seguridad y problemas de estilo.- Responde en puntos.- Si el código está bien, di "LGTM"."""messages = [ {"role": "system", "content": SYSTEM}, {"role": "user", "content": f"Revisa este código:\n```python\n{code}\n```"},]
Cuándo usar esto:
Definir un comportamiento consistente en las características de la aplicación.
Enseñar el formato de salida con ejemplos few-shot.
Mejorar el razonamiento con prompts de cadena de pensamiento.
Reducir las alucinaciones con instrucciones de anclaje (grounding).
"""prompt_engineering.py - prompts de sistema, few-shot, cadena de pensamiento y estructurados."""from __future__ import annotationsfrom openai import OpenAIclient = OpenAI()# Cadena de pensamiento para razonamientocot_messages = [ {"role": "system", "content": "Resuelve problemas matemáticos paso a paso. Muestra tu trabajo y luego da la respuesta final en la última línea como RESPUESTA: <número>."}, {"role": "user", "content": "¿Una tienda tiene 24 manzanas. Venden 3/8 de ellas. ¿Cuántas quedan?"},]cot = client.chat.completions.create(model="gpt-4o-mini", messages=cot_messages, temperature=0)print(cot.choices[0].message.content)# Clasificación few-shotfew_shot = [ {"role": "system", "content": "Clasifica los tickets de soporte como facturación, técnico o cuenta. Responde con una sola palabra."}, {"role": "user", "content": "Me cobraron dos veces este mes"}, {"role": "assistant", "content": "facturación"}, {"role": "user", "content": "La API devuelve errores 500 en POST /users"}, {"role": "assistant", "content": "técnico"}, {"role": "user", "content": "Necesito cambiar mi dirección de correo electrónico"},]result = client.chat.completions.create(model="gpt-4o-mini", messages=few_shot, temperature=0)print("clasificación:", result.choices[0].message.content)# QA Anclado - usa solo el contexto proporcionadocontext = "Nuestro límite de tasa de API es de 1000 solicitudes/minuto para planes Pro y 100/minuto para planes Gratuitos."grounded = client.chat.completions.create( model="gpt-4o-mini", messages=[ {"role": "system", "content": "Responde ÚNICAMENTE usando el contexto proporcionado. Si la respuesta no está en el contexto, di 'No tengo esa información.'"}, {"role": "user", "content": f"Contexto:\n{context}\n\nPregunta: ¿Cuál es el límite de tasa del plan Pro?"}, ], temperature=0,)print(grounded.choices[0].message.content)
Lo que esto demuestra:
Cadena de pensamiento con formato de respuesta explícito.
Ejemplos few-shot que enseñan etiquetas de clasificación.
QA Anclado que restringe las respuestas al contexto proporcionado.
temperature=0 para clasificación y extracción deterministas.
Instrucciones vagas - "sé útil" produce resultados inconsistentes. Solución: rol, formato y restricciones específicos.
Demasiados ejemplos few-shot - desperdicia tokens sin mejorar la precisión. Solución: 2-5 ejemplos diversos; recorta si el rendimiento se estanca.
Sin especificación de formato de salida - el modelo devuelve prosa cuando necesitas JSON. Solución: formato explícito en el prompt del sistema o response_format.
Inyección de prompt desde la entrada del usuario - los usuarios anulan las instrucciones del sistema. Solución: separa claramente el sistema/usuario; valida los resultados; usa delimitadores.
No iterar - el primer prompt rara vez es óptimo. Solución: prueba en más de 20 ejemplos; mide la precisión antes de desplegar.
Mezclar instrucciones y datos - el modelo confunde qué seguir y qué procesar. Solución: usa delimitadores claros (---, etiquetas XML, secciones markdown).