Ejecutas el mismo prompt dos veces contra Claude y obtienes respuestas completamente diferentes. Misma entrada, salida impredecible. El problema no es tu prompt, son los parámetros de muestreo que no has tocado.
Temperatura, top-p y top-k son perillas que controlan cuán creativo o determinista se comporta tu modelo. Si las configuras mal, estarás persiguiendo fantasmas con revisiones de prompts. Si las configuras bien, podrás ejecutar sistemas de producción que no te sorprendan.
¿Qué Hacen Realmente Estos Parámetros?
Cuando un LLM genera texto, no solo elige la mejor palabra siguiente. Asigna una probabilidad a cada palabra de su vocabulario y luego muestrea una. Temperatura y top-p cambian qué probabilidades considera y cómo las muestrea.
Temperatura escala la distribución de probabilidad antes de muestrear. Menor = más confianza en los tokens de alta probabilidad. Mayor = más entropía, más aleatoriedad.
- Temperatura 0.0: decodificación codiciosa. Siempre elige el token de mayor probabilidad. Determinista, pero puede quedarse atascado en bucles.
- Temperatura 0.3–0.7: punto óptimo para extracción estructurada, razonamiento y cualquier cosa donde la consistencia importe.
- Temperatura 1.0: predeterminado. Distribución de probabilidad natural directa del modelo.
- Temperatura 1.5–2.0: caos creativo. Bueno para brainstorming, variación de contenido, juegos de rol. Espera inconsistencia.
Top-P (muestreo de núcleo) dice: «solo muestrea de los tokens que componen el P% superior de la masa de probabilidad». Si top-p es 0.9, el modelo ignora los tokens del 10% inferior de probabilidad, sin importar cuán baja sea la temperatura.
Top-K es más simple: solo considera los K tokens de mayor probabilidad. Si top-k es 40, el modelo solo puede elegir entre los 40 tokens principales por probabilidad, punto. Menos común que top-p, pero algunas APIs (como Together.ai) lo usan por defecto.
El Problema Real: Parámetros Conflictivos
Temperatura 0.7 con top-p 0.99 es casi tan aleatorio como temperatura 1.0. Top-p 0.1 con temperatura 2.0 todavía está restringido. Estos parámetros interactúan; configurar uno sin considerar los otros es cómo terminas ajustando a ciegas.
La tensión clave: una temperatura baja por sí sola puede desencadenar repetición. Cuando el modelo confía en una frase, temperatura 0 significa que repite esa frase para siempre. Top-p proporciona una barrera de seguridad: corta la cola de la distribución, evitando la sobre-confianza en un solo token.
Por eso, el enfoque recomendado para sistemas de producción es:
- Establece la temperatura entre 0.3 y 0.7 (rara vez bajes de ahí a menos que te conformes con la repetición).
- Establece top-p entre 0.8 y 0.95 (más amplio = más natural, más estrecho = más restringido).
- Deja top-k en paz a menos que tengas una razón específica para usarlo.
¿Cuándo Usar Qué?
El marco es más simple de lo que parece una vez que dejas de pensar en «aleatoriedad» y empiezas a pensar en casos de uso.
Extracción estructurada (JSON, clasificación, salida numérica): Temperatura 0.3, top-p 0.9. Quieres un análisis consistente. Sin ambigüedades.
Resumen y parafraseo: Temperatura 0.5, top-p 0.9. Ligeramente más variación que la extracción, pero aún confiable. El modelo no debería alucinar hechos diferentes.
Escritura abierta (publicaciones de blog, correos electrónicos, contenido): Temperatura 0.7, top-p 0.95. Variación natural sin divagaciones aleatorias. La salida se mantiene coherente.
Brainstorming y tareas creativas: Temperatura 1.2, top-p 0.95. Una temperatura más alta obliga al modelo a considerar ideas de menor probabilidad. Top-p evita que caiga en el sinsentido total.
La Realidad de Producción: Prueba Tu Propia Pila
Diferentes modelos responden de manera diferente a la misma configuración. GPT-4o a temperatura 0.5 no es lo mismo que Claude Sonnet 4 a temperatura 0.5. Los modelos de OpenAI tienden a ser más sensibles a la temperatura que los modelos de Anthropic; un cambio de 0.2 importa más.
Esto es lo que hago para sistemas de producción:
# Entorno de prueba: misma entrada, mismos parámetros, 10 ejecuciones
import anthropic
client = anthropic.Anthropic()
input_prompt =