Empezar aquí
Guía 06 · guía de modelos

Parámetros: max_tokens, temperatura y compañía

Qué hace cada parámetro de generación (max_tokens, temperature, top_p, stop_sequences, effort), valores de partida razonables y los errores más comunes.

Publicado 4 min de lectura

Principio: los parámetros afinan el comportamiento, pero no arreglan un mal prompt; toca pocos, por un motivo concreto y midiendo el efecto.

Por qué funciona

Los parámetros controlan cómo se genera la respuesta: cuánto puede durar, cuánta variedad hay al elegir cada token, cuándo parar y cuánto razonar. Los valores por defecto están pensados para funcionar bien en la mayoría de los casos. Cambiarlos sin motivo suele empeorar las cosas o no cambiar nada. Cambiarlos con un objetivo concreto (más repetibilidad, cortar en un punto, controlar el gasto) sí ayuda.

Referencia rápida

ParámetroQué controlaValor de partidaCuándo tocarlo
max_tokensMáximo de tokens de salida, razonamiento incluido. Obligatorio.El doble de lo que esperas que ocupe una respuesta larga.Siempre: ajústalo a tu tarea.
temperatureAleatoriedad al elegir cada token.El valor por defecto.Bájalo para tareas que necesitan respuestas repetibles.
top_pElige solo entre los tokens que suman esa probabilidad.El valor por defecto.Rara vez. Si lo tocas, deja temperature por defecto.
stop_sequencesCadenas que detienen la generación.Ninguna.Para cortar en una etiqueta de cierre o un separador.
thinkingActiva el razonamiento adaptativo.Desactivado en tareas simples.Tareas con varios pasos de análisis.
output_config.effortCuánto se esfuerza el modelo.medium si usas razonamiento.Sube en tareas difíciles; baja para ahorrar.

max_tokens

max_tokens es un límite duro. Si el modelo lo alcanza, la respuesta se corta donde esté y stop_reason vale max_tokens. No es un objetivo de longitud: el modelo no intenta llenarlo ni ajustarse a él. Para controlar la longitud, pídela en el prompt («máximo 100 palabras») y usa max_tokens como red de seguridad.

import anthropic

MODEL = "claude-sonnet-5-5"
client = anthropic.Anthropic()

resp = client.messages.create(
    model=MODEL, max_tokens=300,
    messages=[{"role": "user", "content": "Resume el texto en tres frases: …"}],
)
if resp.stop_reason == "max_tokens":
    # la respuesta está incompleta: no la muestres como si estuviera bien
    raise RuntimeError("Respuesta cortada; sube max_tokens o pide algo más corto")

Con razonamiento activado, los tokens de pensamiento también cuentan. Deja margen de sobra o el razonamiento se comerá el espacio de la respuesta.

- max_tokens=500, thinking={"type": "adaptive"}, output_config={"effort": "high"}
+ max_tokens=16000, thinking={"type": "adaptive"}, output_config={"effort": "high"}

temperature y top_p

La temperatura regula cuánto se aleja el modelo del token más probable. Más baja, respuestas más parecidas entre ejecuciones; más alta, más variedad. top_p recorta la lista de candidatos a los más probables que sumen esa probabilidad.

Tres cosas que conviene saber:

  • Temperatura baja no garantiza respuestas idénticas. Reduce la variación, pero dos llamadas iguales pueden diferir. Si necesitas determinismo, cachea respuestas o valida en código.
  • Toca uno, no los dos. Ajustar temperature y top_p a la vez hace difícil saber qué produjo el efecto, y algunos modelos no aceptan ambos en la misma petición.
  • Con razonamiento activado hay restricciones en los parámetros de muestreo. Consulta en la documentación oficial cuáles admite cada modelo.
temperature=0.0 para «que no alucine».
temperature por defecto. Para reducir invenciones: contexto con las fuentes,
instrucción de responder solo con ellas y de decir «no lo sé» si no está.

La temperatura no tiene relación directa con la veracidad. Un modelo con temperatura baja puede inventar algo con mucha consistencia. Contra las alucinaciones funciona el grounding, no el muestreo.

stop_sequences

Detienen la generación cuando aparece una cadena. La respuesta trae stop_reason igual a stop_sequence y en resp.stop_sequence cuál se encontró. La cadena de parada no se incluye en el texto.

# mismos client y MODEL que en el ejemplo anterior
resp = client.messages.create(
    model=MODEL, max_tokens=500,
    stop_sequences=["</respuesta>"],
    messages=[{"role": "user", "content": "Responde dentro de <respuesta></respuesta>: ¿qué es un token?"}],
)
if resp.stop_reason == "stop_sequence":
    texto = resp.content[0].text.split("<respuesta>")[-1].strip()

Útil para cortar en cuanto termina la parte que te interesa y no pagar tokens de más. Si lo que quieres es JSON, mejor usa salidas estructuradas.

effort

El esfuerzo (output_config={"effort": ...}) orienta cuánto trabajo pone el modelo, sobre todo en razonamiento: low, medium, high, xhigh o max, según lo que admita cada modelo. Es orientativo: no limita los tokens como max_tokens, pero cambia mucho el gasto típico. Ver Dejar pensar al modelo.

Errores frecuentes

ErrorConsecuenciaArreglo
max_tokens justo para la respuesta mediaLas respuestas largas salen cortadasMargen amplio y comprobar stop_reason
Usar max_tokens para controlar la longitudTexto cortado a mitad de frasePedir la longitud en el prompt
Temperatura 0 «contra alucinaciones»Falsa seguridadGrounding y abstención
Cambiar varios parámetros a la vezNo sabes qué ayudóUno cada vez, medido con evals
Effort max por defectoCoste y latencia altos sin mejoraEmpezar en medium y ajustar

Cuándo no aplica

En prototipos y la mayoría de tareas, deja todo por defecto salvo max_tokens. Invierte primero en el prompt y en el contexto: suelen tener mucho más efecto que cualquier parámetro.

Para seguir