Volver al blog

Solución de problemasGuía

Error 400 de la API de Claude con temperature, top_p, top_k: cómo solucionarlo

¿Tu solicitud de Claude empezó a devolver 400 en la versión de API 2026-10-21? Elimina temperature, top_p y top_k, o fija la versión anterior. Pasos dentro.

Por CheapTokens TeamPublicado el 4 min de lectura

Tarjeta estilo terminal: error 400 para temperature, top_p y top_k en la API de Claude
En esta página
  1. Cómo se ve la solicitud que falla
  2. La solución: eliminar los tres parámetros
  3. ¿Cambiarán las respuestas después de eliminarlos?
  4. Lista de verificación rápida cuando ves el 400
  5. Una sola ruta de código para Claude y las API estilo OpenAI

Tu solicitud de Claude funcionaba ayer, la moviste a la versión de API 2026-10-21 (la cabecera anthropic-version, o una versión del SDK creada para ella), y ahora devuelve un 400. Mira el cuerpo de la solicitud: si tiene temperature, top_p o top_k, esa es la causa. Elimina esos tres campos y la solicitud pasa.

Según la guía de migración de Anthropic para la versión 2026-10-21 (https://platform.claude.com/docs/en/api/migration-2026-10-21, consultada el 24 de octubre de 2026), una solicitud de Messages o Message Batches que envíe cualquiera de los tres devuelve un error 400. Ocurre incluso si el valor es el predeterminado del parámetro. Busca el estado 400 y esos nombres de campo en tu solicitud.

Cómo se ve la solicitud que falla#

Supongamos que tienes un script pequeño que le pide a Claude que resuma un ticket y mantiene la respuesta estable con una temperatura baja:

python
import anthropic

client = anthropic.Anthropic()

reply = client.messages.create(
    model="<your Claude model>",
    max_tokens=500,
    temperature=0.2,  # <- this line now causes the 400
    messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)

Lo mismo ocurre con HTTP simple. Si estableces la cabecera de versión tú mismo, esta es la línea que te mueve al nuevo comportamiento:

bash
curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2026-10-21" \
  -H "content-type: application/json" \
  -d '{"model": "<your Claude model>", "max_tokens": 500, "top_p": 0.9,
       "messages": [{"role": "user", "content": "Hello"}]}'

La solución: eliminar los tres parámetros#

Elimina temperature, top_p y top_k de todas las solicitudes de Messages y Message Batches. Sin ellos, el modelo muestrea con sus valores predeterminados (temperatura 1.0), exactamente como lo hacía una solicitud 2023-06-01 que los omite.

python
reply = client.messages.create(
    model="<your Claude model>",
    max_tokens=500,
    messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)
Antes y después: la solicitud con temperature devuelve 400, la misma solicitud sin ella pasa
La misma solicitud antes y después de eliminar temperature

Las últimas versiones principales del SDK y la CLI ant (2.0.0) ya no tienen estos parámetros en absoluto, así que después de actualizar tienes que eliminarlos de tu código. Un 400 proviene de solicitudes que salen con anthropic-version: 2026-10-21 y aún llevan uno de los tres campos. Los adaptadores .NET IChatClient toman una ruta más suave: ahora ignoran ChatOptions.Temperature, TopK y TopP. Los números exactos de versión del SDK por lenguaje están en las pestañas de pasos de actualización de la guía.

Si llamas a la API sin un SDK, la versión es la cabecera anthropic-version, y 2026-10-21 es el valor que activa la nueva regla.

¿Cambiarán las respuestas después de eliminarlos?#

Depende del modelo, y la guía es específica aquí.

  • Claude 4.7 y posteriores ya aceptan solo valores de muestreo predeterminados. Nada cambia para ti: muestreaban con los valores predeterminados antes y siguen haciéndolo.
  • Modelos que aceptan otros valores, como Claude Sonnet 4.6: si bajaste temperature para obtener una salida más consistente, ese efecto desaparece, y ninguna otra configuración lo reemplaza.

Si una solicitud en particular realmente depende de un valor no predeterminado, tienes dos opciones de la guía: dejar de enviar el parámetro y aceptar el muestreo predeterminado, o mantener esa solicitud en anthropic-version: 2023-06-01.

Si tus respuestas deben ser estrictamente consistentes, pon la consistencia en el prompt: un formato de salida fijo, un ejemplo corto de la respuesta que quieres, y una verificación en tu código que rechace cualquier cosa fuera de formato. Es más trabajo que un solo número, pero no depende de una perilla de muestreo.

Lista de verificación rápida cuando ves el 400#

  1. Busca en el proyecto temperature, top_p, top_k, incluidos los wrappers y los archivos de configuración compartidos.
  2. Revisa los trabajos por lotes: la regla se aplica a cada solicitud dentro de un Message Batch creado con 2026-10-21, así que mira los params de cada solicitud del lote.
  3. Revisa qué cambió: versión principal del SDK, versión de la CLI, o la cabecera anthropic-version.
  4. Elimina los campos, o fija esa solicitud en 2023-06-01 si necesita un valor no predeterminado.
  5. Ejecuta una solicitud antes de relanzar un lote grande.

Una sola ruta de código para Claude y las API estilo OpenAI#

Una configuración común: un único helper que construye la solicitud y la envía ya sea a Anthropic Messages o a un endpoint Chat Completions estilo OpenAI. La solución más simple es dividir los parámetros. Mantén temperature solo en la rama estilo OpenAI, y no lo agregues a la rama Messages.

En el formato Chat Completions la configuración es un campo normal de la solicitud. En CheapTokens funciona a través de la dirección compatible con OpenAI https://api.cheaptokens.dev/v1. Aquí hay una solicitud a DeepSeek-V4-Flash (contexto de 380K, hasta 32,768 tokens de salida por respuesta), con el id completo del modelo de los documentos de CheapTokens:

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-ai/DeepSeek-V4-Flash-0731",
    "temperature": 0.2,
    "max_tokens": 300,
    "messages": [{"role": "user", "content": "Summarise this ticket in two lines: ..."}]
  }'

Una solicitud así, con 1,000 tokens de entrada y 300 tokens de salida, cuesta $0.000045 al precio actual. DeepSeek-V4-Flash tiene un precio a cualquier hora del día, sin horas pico, y un solo saldo cubre todos los modelos. Para la misma ruta de código con una ventana de contexto de 390K también está GLM-5.3-Flash (zai-org/GLM-5.3-Flash, hasta 8,192 tokens de salida). Los precios actuales de todos los modelos están en la página de precios.

Para ver cómo se comporta la configuración, lee System prompt y temperature: qué hacen y cómo configurarlos. Para llamar a Messages en formato Claude desde Python, consulta Anthropic Python SDK con CheapTokens. La dirección base y la configuración de la clave están en los documentos de CheapTokens.