CULTIVA IA IA · Ingeniería & MLOps v1.0.0

Ingeniería de Prompts — Repertorio de Referencia

Técnicas, plantillas de código y directrices para pipelines LLM en producción. Adaptado a los casos de uso reales de los clientes de CULTIVA IA.

7 técnicas cubiertas
6 casos de uso reales
Claude · GPT-4o · Gemini
Python · Nivel intermedio
💡
Regla de oro: Empieza con zero-shot. Si la tasa de error supera el 10%, añade ejemplos (few-shot). Si el razonamiento multi-paso falla, añade CoT. La complejidad extra siempre tiene coste en latencia y tokens.

Técnicas de Prompt Engineering

Plantillas listas para producción, con casos de uso reales de clientes CULTIVA IA

Zero-Shot Prompting
Cliente: Cafetería La Manzana — Análisis de reseñas
Zero-Shot

Sin ejemplos. El modelo clasifica directamente apoyándose en su preentrenamiento. Óptimo para tareas claras donde el formato de salida es simple y el dominio es común.

python copiar
prompt = """Clasifica el sentimiento de la siguiente reseña de Google como POSITIVO, NEGATIVO o NEUTRO. <resena> La tortilla estaba buenísima pero tardaron mucho en traer la cuenta. Ambiente agradable. </resena> Sentimiento:"""
Few-Shot Prompting
Cliente: Cafetería La Manzana — Clasificación con contexto
Few-Shot

Incluye 3–5 ejemplos representativos antes del input real. Mejora la consistencia del formato y calibra el modelo al dominio específico.

python copiar
prompt = """Clasifica sentimiento de reseñas. Ejemplos: Reseña: "Café de especialidad increíble, el barista me explicó el origen del grano." → POSITIVO Reseña: "Esperé 20 min y el croissant llegó frío. No volveré." → NEGATIVO Reseña: "Precio normal para la zona, nada especial." → NEUTRO Reseña: "Me encantó el ambiente pero el wifi no funcionaba." Sentimiento:"""
Chain-of-Thought (CoT)
Cliente: Molina & Asociados — Análisis contractual
CoT

El modelo razona paso a paso antes de dar la respuesta final. Imprescindible para análisis legal, financiero o lógico multi-paso donde importa el proceso, no solo el resultado.

python copiar
prompt = """Analiza si la siguiente cláusula de contrato es válida bajo el Código Civil español (art. 1256). Cláusula: "El precio del servicio podrá ser modificado unilateralmente por el proveedor sin previo aviso al cliente." Piensa paso a paso: 1. ¿Qué establece el art. 1256? 2. ¿Qué permite y qué prohíbe? 3. ¿La cláusula cumple o vulnera el artículo? 4. Conclusión y riesgo legal estimado (alto/medio/bajo)."""
ReAct (Reason + Act)
Cliente: Clínica Dental Aínsa — Agente de citas
ReAct

El agente alterna razonamiento (Thought) con llamadas a herramientas (Action) y observación de resultados (Observation). Base de todos los agentes con herramientas.

python copiar
system = """Eres el asistente de la Clínica Dental Aínsa. Resuelve usando Pensamiento, Acción y Observación. Herramientas: buscar_cita(fecha), crear_cita(paciente, fecha, hora, tratamiento), enviar_confirmacion(id_cita) Formato: Pensamiento: [razonamiento] Acción: herramienta(parametros) Observación: [resultado] ... (repite) Pensamiento: Tengo la respuesta final. Acción: done([respuesta al paciente])""" user = "Quiero una limpieza dental para el viernes por la tarde, me llamo Sara López."
XML Tags (Claude-optimized)
Cliente: Distribuidora Fresquet — Extracción de albaranes
XML

Claude interpreta XML de forma nativa. Separar task, format y document con etiquetas reduce ambigüedad y mejora la precisión en extracciones estructuradas.

python copiar
prompt = """<task> Extrae los artículos, cantidades y precios del siguiente albarán de Fresquet Distribución. </task> <format> JSON array: [{"articulo": "...", "cantidad": N, "precio_unitario": 0.00, "total": 0.00}] Si un campo no aparece, usa null. </format> <albaran> {texto_del_albaran} </albaran> JSON:"""
Meta-Prompting
Cliente: BeautyNow — Optimización de catálogo
Meta

Usa el LLM para generar o mejorar prompts de otros LLMs. Ideal cuando el prompt necesita adaptarse a contextos variables sin intervención manual continua.

python copiar
meta_prompt = """Eres un experto en prompt engineering para ecommerce de cosmética. Crea un prompt optimizado para el siguiente caso. Tarea: {tarea} Modelo objetivo: {modelo} Formato de salida: {formato_salida} Tono de marca: {tono} Genera un prompt que: 1. Especifique claramente la tarea 2. Incluya el tono de marca BeautyNow 3. Defina el formato de salida con ejemplo 4. Maneje el caso de producto sin descripción Prompt optimizado:"""
Self-Consistency
Cliente: Supermercados GreenBox — Forecasting demanda
Self-Cons.

Genera N respuestas independientes con temperatura >0 y selecciona la mayoritaria. Mejora la fiabilidad en tareas de razonamiento donde hay incertidumbre.

python copiar
import asyncio from collections import Counter async def predecir_demanda_greenbox(producto, n=7): """Predicción robusta por voto mayoritario.""" prompt = f"""Predice la demanda semanal de '{producto}' para GreenBox (200 tiendas, Levante español). Contexto: verano, +15% turismo costero. Responde SOLO con el número de unidades.""" tasks = [call_llm(prompt, temperature=0.7) for _ in range(n)] respuestas = await asyncio.gather(*tasks) valores = [int(r.strip()) for r in respuestas] return Counter(valores).most_common(1)[0][0]
🤖

Diferencias por Modelo

Optimizaciones específicas para cada proveedor LLM

C
Claude 3.5 Sonnet
Anthropic — Modelo principal CULTIVA
  • XML nativo: usa <task>, <context>, <format> siempre
  • Instrucciones explícitas: prefiere "haz X" a "podrías hacer X"
  • <thinking>: activa razonamiento extendido para CoT complejo
  • System prompt: persona/restricciones; user prompt: la tarea
  • "No hagas X": lo respeta de forma muy fiable
G
GPT-4o
OpenAI — Clientes con contrato previo
  • Markdown: responde bien a headers ## y listas en prompts
  • JSON nativo: usa response_format: {type: "json_object"}
  • Temperatura: 0 para tareas deterministas, 0.7 para creativas
  • JSON schema: muy fuerte si das un ejemplo explícito
  • Function calling: API más madura para agentes ReAct
G
Gemini 1.5 Pro
Google — Proyectos con facturas/imágenes
  • Multimodal: procesa imágenes y PDFs de facturas nativamente
  • Instrucciones claras: pasos numerados funcionan mejor
  • JSON forzado: responseMimeType: "application/json"
  • Contexto largo: hasta 1M tokens, ideal para corpus grandes
  • Concisión: prompts más cortos → menor latencia en este modelo
📊

Framework de Evaluación de Prompts

Resultados de las últimas pruebas en clientes CULTIVA IA

Test Suite — Análisis de Reseñas (La Manzana)
Benchmark: 120 reseñas reales etiquetadas manualmente · Ejecutado 2026-06-14
Zero-Shot
78%
93/120 correctas
Few-Shot (3 ejs)
89%
107/120 correctas
Few-Shot (5 ejs)
92%
110/120 correctas
Self-Consistency (7)
95%
114/120 · +3.1× coste
Zero-Shot
78%
Few-Shot (3)
89%
Few-Shot (5)
92%
Self-Consistency
95%
python — harness de evaluación reutilizable
from dataclasses import dataclass @dataclass class CasoTest: input: str esperado: str descripcion: str def evaluar_prompt(template: str, casos: list[CasoTest], llm) -> dict: resultados = [] for caso in casos: prompt = template.format(input=caso.input) salida = llm(prompt) ok = caso.esperado.lower() in salida.lower() resultados.append({"desc": caso.descripcion, "ok": ok}) acc = sum(r["ok"] for r in resultados) / len(resultados) print(f"Precisión: {acc:.0%} ({sum(r['ok'] for r in resultados)}/{len(resultados)})") return {"accuracy": acc, "resultados": resultados}
📋

Directrices de Producción

Reglas aplicadas en todos los proyectos CULTIVA IA

Regla Qué hacer Por qué
Empieza simple
Zero-shot primero. Añade complejidad solo si el error >10% Cada nivel extra añade latencia y coste de tokens
Formato explícito
Muestra un ejemplo JSON si quieres JSON; no asumas Elimina la ambigüedad y reduce post-procesado
System vs User
System: persona y restricciones. User: la tarea concreta Cada modelo interpreta este split de forma diferente
Versiona los prompts
Guarda prompts en git con semver (v1.2.0) y métricas Los modelos cambian; el historial evita regresiones
Prueba adversarialmente
Inputs vacíos, contradictorios, en idiomas inesperados Los casos extremos aparecen en producción, no en demos
Coste vs precisión
Self-consistency: solo si el margen de error es crítico 7x llamadas = 7x coste. Medir antes de decidir
Campo no encontrado
En extracción, especifica qué devolver si el campo falta (null, "N/A") Sin instrucción, el modelo inventa valores (alucinación)
No mezcles tareas
Un prompt = una tarea. No "extrae Y luego clasifica Y luego resume" La precisión baja cuando hay múltiples objetivos en conflicto