Ir al contenido
Mastering Claude

Inicio / La API de Claude para quienes construyen

La API de Claude para quienes construyen7 minApplication

Roles que se sostienen, no un prerrellenado que rompe

El prerrellenado del turno assistant, una práctica que empezaba la respuesta de Claude en lugar del modelo, ahora es rechazado con un error 400 en los modelos actuales; una instrucción system estable o una salida forzada lo sustituyen.

Completar uno mismo el inicio de la respuesta de Claude, una práctica llamada prerrellenado del turno assistant, ya no funciona en los modelos actuales. Técnicamente, esta práctica añadía al array messages un último mensaje de rol assistant, un contenido parcial sin terminar, a la espera de que Claude continuara ese texto iniciado. El servidor ahora devuelve un error HTTP 400 en cuanto recibe un mensaje así, incluso antes de que empiece la generación.

Los modelos afectados por el rechazo

El rechazo afecta a Claude Opus 5, Claude Sonnet 5, Claude Fable 5.1, Claude Fable 5, así como a las generaciones Claude Opus 4.6, Claude Opus 4.7, Claude Opus 4.8 y Claude Sonnet 4.6. La guía oficial de migración es explícita en este punto: el prerrellenado de mensajes assistant devuelve un error 400 en Claude Opus 4.7 y los modelos siguientes, Claude Opus 5 incluido, y recomienda usar en su lugar salidas estructuradas, una instrucción system, o el campo output_config.format. El rechazo se produce al enviar la petición, lo que evita pagar por una generación que de todos modos no habría tenido lugar.

// Ancienne pratique, refusée par une erreur 400 sur les modèles courants
{
  "model": "claude-sonnet-5",
  "max_tokens": 200,
  "messages": [
    { "role": "user", "content": "Réponds en JSON strict." },
    { "role": "assistant", "content": "{" }
  ]
}

Qué sustituye al prerrellenado

Una instrucción system estable produce el mismo resultado sin tocar el array messages. Se escribe una vez, fuera de ese array, y se aplica a toda la petición en lugar de a un único turno iniciado a mano.

// Instruction system stable, sans pré remplissage
{
  "model": "claude-sonnet-5",
  "system": "Réponds toujours en JSON strict, sans texte autour de l'objet.",
  "max_tokens": 200,
  "messages": [
    { "role": "user", "content": "Donne le statut du service." }
  ]
}

El campo output_config.format, la otra vía documentada, restringe directamente la forma de la salida en lugar de sugerirla mediante una instrucción textual; su detalle rebasa el alcance de esta lección. Solo queda una excepción, documentada por separado: la reclamación de un crédito de compensación sobre un rechazo acepta un mensaje assistant de eco, un caso particular de la gestión de los rechazos, no una reapertura general del prerrellenado. El array messages conserva además su propia regla, descrita en la estructura de la petición base: cada turno alterna en él su rol.

Figure 1

Tres formas de fijar el formato de una respuesta

Técnica para orientar el formato de la respuestaRechazada con un error 400 en los modelos actualesDocumentada como sustituto oficial
Prerrellenado del turno assistantNo
Instrucción system estableNo
Campo output_config.formatNo
La tabla cruza tres técnicas con dos criterios verificados en la guía de migración: el rechazo mediante un error 400 en los modelos actuales, y el estatus de sustituto documentado oficialmente.
Calíbralo tú mismo

Un desarrollador añade un mensaje de rol assistant que contiene una llave de apertura, a continuación de un mensaje de usuario, en el array messages de una petición dirigida a Claude Sonnet 5. El servidor devuelve un código de error 400 antes de que empiece la generación.

Escribe en una frase lo que esta situación establece, y en una frase lo que no establece.

Lo que hay que recordar
  • El prerrellenado del turno assistant devuelve un error HTTP 400 en cuanto el último mensaje del rol assistant contiene un contenido parcial destinado a orientar lo que sigue.
  • El rechazo afecta a Claude Opus 5, Claude Sonnet 5, Claude Fable 5.1, Claude Fable 5, y a las generaciones Claude Opus 4.6 a 4.8 así como a Claude Sonnet 4.6.
  • La guía oficial de migración nombra tres sustitutos: las salidas estructuradas, una instrucción system, o el campo output_config.format.
  • Una instrucción system se escribe una vez fuera del array messages y se aplica a toda la petición, sin depender de un turno assistant iniciado a mano.
  • Solo queda una excepción documentada, fuera del alcance de esta práctica: la reclamación de un crédito de compensación sobre un rechazo acepta un mensaje assistant de eco.
Hazlo ahora

Abre el código de tu proyecto y busca cualquier línea que añada un mensaje de rol assistant parcial al final del array messages antes del envío. Traslada la instrucción que llevaba a un campo system separado, y luego relee el resultado sin enviarlo.

Verificar en la fuente

Cada afirmación datable de esta lección remite aquí al texto público que la respalda. Una fuente que no se abre no prueba nada.