Menu

Temperatura en LLM: qué hace y cómo ajustarla

La temperatura controla cuánta aleatoriedad usa un modelo de lenguaje al elegir cada palabra siguiente. Mira cómo cambia las probabilidades de cada palabra, cuándo ponerla baja o alta y en qué se diferencia de top_p.

Puedes editar cada prompt de esta página y abrirlo después en ChatGPT, Claude u otra app de IA.

La temperatura es un número que controla cuánta aleatoriedad usa un modelo de lenguaje al elegir su siguiente palabra. Con una temperatura baja, el modelo toma la palabra más probable casi siempre, así que las respuestas son precisas y repetibles. Con una temperatura alta, las probabilidades se reparten, así que las respuestas varían más y a veces se van por las ramas. La temperatura cambia cómo elige el modelo entre las palabras que ya considera; no cambia lo que el modelo sabe.

Cómo elige un modelo la siguiente palabra

Un modelo escribe un token a la vez, y un token es una palabra o un trozo de palabra (consulta tokens y ventana de contexto). En cada paso le da una puntuación, llamada logit, a cada token de su vocabulario. Una función llamada softmax convierte esas puntuaciones en probabilidades: cada puntuación se eleva exponencialmente y luego se divide entre la suma de todas, así que las puntuaciones más altas reciben porciones más grandes y todas las porciones suman 1. Después, el modelo saca un token al azar según esas porciones.

La temperatura entra justo antes de softmax. Cada puntuación se divide entre la temperatura T:

probability(word) = exp(score / T) / sum of exp(score / T) over all candidates

Con T menor que 1, las distancias entre puntuaciones crecen, así que el líder se aleja todavía más. Con T mayor que 1, las distancias se reducen, así que las opciones rezagadas se acercan. Con T = 1 obtienes las probabilidades propias del modelo. Con T = 0 la división no está definida, así que las API lo interpretan como "tomar siempre el token más probable", lo que se llama decodificación voraz (greedy decoding).

Pruébalo: el control de temperatura

La demo de abajo continúa la frase "Mi lenguaje de programación favorito es" con seis palabras candidatas. Las puntuaciones son ilustrativas, elegidas para esta demo; un modelo real puntúa un vocabulario de decenas de miles de tokens o más, y el nombre de un lenguaje puede dividirse en varios tokens. Las matemáticas sí son las reales: las barras son el softmax de estas puntuaciones a la temperatura que elijas, y el botón de muestreo saca diez palabras de ellas.

Mi lenguaje de programación favorito es …
Next word probabilities
Python46%
JavaScript28%
Rust14%
C7.6%
Haskell3.4%
COBOL0.8%
Samples
Press Sample to let the model pick a word ten times.

Con 1.0, Python recibe cerca del 46% y COBOL menos del 1%. Baja a 0.5 y Python sube a cerca del 67%, mientras COBOL casi desaparece. Sube a 2.0 y Python cae a cerca del 32%, mientras COBOL llega a cerca del 4%, así que más o menos una de cada tres rondas de diez muestras lo incluirá al menos una vez. Fíjate en lo que nunca pasa: el orden de las palabras es el mismo con cualquier ajuste. La temperatura no puede hacer que COBOL sea más probable que Python; solo amplía o reduce las distancias.

Una respuesta real son cientos de estas elecciones seguidas, y cada elección pasa a formar parte del contexto de la siguiente. Una palabra inusual al principio cambia todo lo que viene después, y por eso una respuesta con temperatura alta se desvía mucho más de lo que sugiere una sola palabra en esta demo.

Cuándo usar una temperatura baja o alta

TareaPunto de partidaPor qué
Código, corrección de errores, SQLBaja, de 0 a 0.3Suele haber una continuación mejor, y quieres el mismo resultado en cada ejecución
Extracción, clasificación, JSON0Cualquier variación es ruido, y un programa tiene que leer la salida
Explicaciones, preguntas cotidianasEl valor por defecto del proveedorLos valores por defecto están pensados para uso general
Lluvia de ideas, nombres, ideas para historiasPor defecto o algo más altaQuieres opciones que se diferencien entre sí

Dos advertencias. Primero, una temperatura baja no hace que una respuesta sea verdadera. Si la respuesta más probable del modelo es incorrecta, la temperatura 0 te da esa respuesta incorrecta siempre, solo que de forma consistente; consulta alucinaciones de la IA. Segundo, los valores muy altos (bastante por encima de 1, en las API cuya escala llega a 2) suelen producir texto que pierde el hilo o deja de tener sentido, porque los tokens improbables se eligen cada vez más a menudo.

A veces la aleatoriedad es justo lo que buscas. La autoconsistencia ejecuta a propósito la misma pregunta de razonamiento varias veces con una temperatura mayor que cero y se queda con la respuesta en la que coinciden la mayoría de las ejecuciones.

Temperatura, top_p y top_k

Otros dos ajustes también controlan el muestreo, y las API suelen ofrecerlos junto a la temperatura.

top_p (muestreo de núcleo) se queda solo con los tokens más probables cuyas probabilidades suman p, y luego muestrea entre ellos. Con los números de la demo a temperatura 1: Python, JavaScript y Rust suman cerca del 88%, y al añadir C se pasa del 90%. Así que con top_p = 0.9 el modelo solo muestrea entre esos cuatro; Haskell y COBOL no pueden aparecer nunca. A diferencia de la temperatura, top_p se adapta: cuando el modelo está seguro, entran pocos tokens, y cuando duda, entran muchos.

top_k se queda con un número fijo de los tokens más probables, por ejemplo los 40 primeros. Algunas API lo ofrecen y otras no.

Los proveedores suelen recomendar cambiar la temperatura o top_p, no los dos, porque los efectos se suman de formas difíciles de predecir.

Ajustar la temperatura en la API

Las apps de chat ocultan el ajuste, pero las API lo aceptan como parámetro. El rango depende del proveedor: la API Chat Completions de OpenAI acepta de 0 a 2, y la API Messages de Anthropic acepta de 0 a 1. Algunos modelos de razonamiento solo aceptan su valor por defecto.

from openai import OpenAI

client = OpenAI()
MODEL = "your-model-id"  # e.g. from your provider's model list

response = client.chat.completions.create(
    model=MODEL,
    messages=[{"role": "user", "content": "Write a SQL query that counts orders per customer."}],
    temperature=0.2,
)
print(response.choices[0].message.content)
import anthropic

client = anthropic.Anthropic()
MODEL = "your-model-id"  # e.g. from your provider's model list

message = client.messages.create(
    model=MODEL,
    max_tokens=500,
    temperature=0.2,
    messages=[{"role": "user", "content": "Write a SQL query that counts orders per customer."}],
)
print(message.content[0].text)

Por qué las apps de chat lo ocultan, y qué hacer en su lugar

Las apps de ChatGPT, Claude y Gemini eligen los ajustes de muestreo por ti y no muestran ningún control. Eso mantiene las apps sencillas, y en la mayoría de las peticiones, reformular el prompt cambia la respuesta mucho más que cualquier ajuste de muestreo.

Así que en una app de chat, el prompt es tu control. Pedir una respuesta te da algo cercano a la primera opción del modelo. Pedir muchas respuestas que se diferencien entre sí te da variedad con cualquier temperatura, porque ahora el modelo tiene un motivo para evitar su primera opción. Cambia de pestaña y cambia el producto para ver la diferencia.

Fill in
Sugiere un nombre para una app para seguir hábitos.
Try it
Example replyReplies vary between models and runs.

Rachapp. Es corto, fácil de recordar y remite a las rachas diarias que hacen que la gente vuelva.

El botón de regenerar de una app de chat genera una respuesta nueva a partir del mismo prompt, y es una forma rápida de ver cuánto varían las respuestas. Si varían más de lo que quieres, la solución suele ser un prompt más concreto: una tarea precisa reduce el abanico de buenas respuestas, y eso hace que las ejecuciones se parezcan más. La guía para escribir prompts explica qué añadir.

Preguntas frecuentes

¿Qué es la temperatura en un LLM?

La temperatura es un ajuste de muestreo que controla qué tan aleatoria es la elección de cada token siguiente. El modelo le da una puntuación a cada token posible, y esas puntuaciones se dividen entre la temperatura antes de convertirse en probabilidades. Los valores bajos dejan que domine la primera opción; los altos igualan las probabilidades, así que los tokens menos probables salen más a menudo.

¿Qué temperatura debo usar para programar?

Un valor bajo, entre 0 y 0.3, es un punto de partida habitual para código, extracción de datos y cualquier tarea con una sola respuesta correcta, porque quieres la continuación más probable y resultados repetibles. Súbelo cuando quieras variedad, por ejemplo para generar ideas de nombres o diseños alternativos. Algunos modelos de razonamiento solo aceptan su valor por defecto, así que revisa la documentación de tu proveedor.

¿Qué diferencia hay entre temperatura y top_p?

La temperatura cambia la forma de toda la distribución de probabilidades. top_p, también llamado muestreo de núcleo (nucleus sampling), la recorta: el modelo solo muestrea del grupo más pequeño de tokens cuyas probabilidades suman p, así que top_p = 0.9 elimina la larga cola de tokens improbables. Los proveedores suelen recomendar ajustar uno de los dos y dejar el otro en su valor por defecto.

¿La temperatura 0 hace que la salida sea determinista?

Casi, pero no del todo. Con 0 el modelo toma el token más probable en cada paso, así que las ejecuciones repetidas suelen ser idénticas o muy parecidas. Pequeñas diferencias numéricas en los servidores del proveedor todavía pueden cambiar un token de vez en cuando, y en cuanto un token cambia, el resto de la respuesta puede tomar otro camino.

¿Puedo cambiar la temperatura en ChatGPT o Claude?

En las apps de chat, no: eligen los ajustes de muestreo por ti y no muestran ningún control de temperatura. Puedes fijarla a través de las API y en herramientas para desarrolladores como el Playground de OpenAI, la Anthropic Console y Google AI Studio. En una app de chat, pide variedad o consistencia en el propio prompt.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR