Claude Platform Docs
MensajesPensamiento preservado

Verificaciones de prefijo en bloques de pensamiento

Qué compara la verificación de prefijo, qué modelos la ejecutan, qué sucede cuando una solicitud no la supera y cómo manejar el error 400 y el caso sin error.

Cada solicitud que devuelve “thinking blocks” (bloques de pensamiento) a un modelo con “preserved thinking” (pensamiento preservado) pasa por una “prefix check” (verificación de prefijo). Una verificación de prefijo falla si system, tools o un mensaje anterior cambiaron después de que Claude produjera un bloque. También falla si un bloque de pensamiento situado entre otros se omitió o se movió.

No superar la verificación de prefijo puede o no dar como resultado un error 400, según el modelo, así que maneja ambos casos.

A quién afecta la verificación de prefijo

No tienes nada que cambiar si se cumple una de estas condiciones:

Si tus solicitudes pasan por una biblioteca, un proxy o un gateway, compara lo que envía con lo que enviaste tú. Si ejecutas uno, consulta Bibliotecas, proxies y gateways para saber qué debe dejar pasar.

Qué debe mantenerse igual y por qué

Haz que tu integración sea de solo anexar. Tres hábitos lo logran:

  1. Devuelve cada turno del asistente exactamente como lo devolvió la API, incluidos los bloques de pensamiento cuyo texto está vacío.
  2. Construye system y tools una vez por cada conversación, y envía esa copia cada vez.
  3. Coloca cada actualización en un mensaje nuevo al final, y déjala ahí.

El razonamiento de cada bloque de pensamiento trata exactamente sobre lo que vino antes de él: system, tools y cada mensaje anterior. Ese contenido es el prefijo del bloque, y es lo que compara la verificación de prefijo.

La verificación de prefijo es similar al “prompt caching” (almacenamiento en caché de prompts), excepto que un cambio invalida el pensamiento posterior a él en lugar de solo perder la caché.

Toma como ejemplo una aplicación que pone la fecha de hoy en su indicación del sistema. A medianoche la fecha cambia, y también el prefijo del pensamiento que ya está en la conversación. Ese pensamiento se vuelve inválido, y la siguiente solicitud puede fallar. Una aplicación de solo anexar mantiene la indicación del sistema tal como estaba, e indica la nueva fecha en un mensaje al final.

Agrega una actualización al final
systemtools
Cambia el mensaje del turno ⁠2
systemtools
Cambia system o tools
systemtools
tu mensaje
pensamiento, válido
cambiado o agregado
pensamiento, inválido

Un cambio invalida solo el pensamiento que ya le sigue. El pensamiento anterior a él y el pensamiento que Claude produce después siguen siendo válidos.

Si tu código cambia la indicación del sistema, las herramientas o el historial

Si tu código…Qué hacer
Reconstruye la indicación del sistema con la fecha, un modo o archivos de instruccionesDeja de cambiar system. Anexa tus propias instrucciones como un mensaje del sistema, una entrada role: "system" en messages, e indica los nuevos valores en el turno más reciente. Para texto que otras personas pueden editar, consulta en su lugar Texto que otras personas pueden editar.
Agrega, elimina o reformula una herramienta, o gana herramientas cuando se conecta un servidor MCPDeja de cambiar tools, y agrega o elimina herramientas en un mensaje del sistema.
Recorta, contrae o resume turnos antiguos, y mantiene sin cambios los más recientesDeja que la API escriba el resumen, o elimina el pensamiento de los turnos conservados.

Otras causas, como omitir bloques de pensamiento cuyo texto está vacío o reconstruir una conversación guardada, tienen sus propias soluciones: consulta Cambia herramientas o instrucciones sin fallar la verificación de prefijo. Para encontrar la tuya, haz que un agente revise tu código.

Qué hace cada modelo cuando la verificación de prefijo falla

En la Claude API y en algunas plataformas en la nube, el resultado de no superar la verificación de prefijo con prefix_mismatch_behavior sin establecer depende del modelo:

Modelo con pensamiento preservadoResultado
Claude Fable 5.2Error 400
Claude Mythos 5.2Error 400
Claude Mythos 5.1Error 400
Claude Fable 5.1Posible error 400
Claude Opus 5.5Posible error 400
Claude Sonnet 5.5Posible error 400
Claude Haiku 5.5Posible error 400

Donde la tabla dice “Posible error 400”, hay dos casos: una solicitud que no supera la verificación de prefijo podría recibir un error 400 o ningún error. Cuando no se devuelve ningún error, los bloques que no superan la verificación de prefijo llegan al modelo. Claude los lee como cualquier otra entrada, se te factura por ellos, y Claude trabaja a partir de un razonamiento sobre contenido que ha cambiado desde entonces.

En esos modelos, puedes comprobar qué caso obtiene una solicitud, pero maneja ambos casos.

Los elementos de Message Batches que dejan prefix_mismatch_behavior sin establecer no reciben ningún error, y la API puede omitir los bloques que no superan la verificación de prefijo.

Maneja ambos casos

Para obtener un único resultado en cada solicitud, haz que tu integración sea de solo anexar o establece prefix_mismatch_behavior. De lo contrario, tu código debe manejar ambos comportamientos.

Después de un error 400, envía "drop_block" en las solicitudes posteriores de esa conversación para recuperarte. Tiene un costo: consulta Lo que cuesta omitir el pensamiento. No lo envíes en todas tus conversaciones para ocultar errores.

Detalles técnicos

Cómo funciona la verificación de prefijo

Los modelos con pensamiento preservado registran una huella del prefijo de cada bloque de pensamiento en su signature. La referencia de la API llama a la verificación de prefijo la verificación de conversación, y el error 400 indica que un bloque que no supera la verificación de prefijo is bound to a different conversation.

Qué modelos ejecutan la verificación de prefijo

La verificación de prefijo se ejecuta en la Claude API y en algunas plataformas en la nube. Verifica los bloques de pensamiento que produjo un modelo con pensamiento preservado, en solicitudes a uno de esos modelos. En la Claude API, otros modelos, como Claude Opus 5, no la ejecutan, y no cubre sus bloques.

Qué cuenta como un cambio

  • Cada bloque se verifica contra su propio registro. La API compara lo que hay antes de un bloque en esta solicitud con lo que su firma registró cuando Claude lo produjo. Tu última solicitud no interviene. La verificación de prefijo solo observa el contenido, no las sesiones, los ID ni los usuarios. El mismo contenido en una nueva solicitud o en una bifurcación supera la verificación de prefijo.
  • La verificación de prefijo compara lo que enviaste, no lo que leyó Claude. La compactación en un umbral de tokens y la edición de contexto solo cambian lo que lee Claude, así que nunca cuentan. Después de un bloque de compactación por umbral, la API compara solo los mensajes a partir de ese bloque, además de system y tools. La compactación bajo demanda tiene sus propias condiciones: consulta Condiciones para que el pensamiento conservado siga siendo válido. Para un archivo enviado por URL y, en la Claude API, una lista de herramientas MCP, la API compara en su lugar lo que obtuvo.
  • El pensamiento que envías debe ser una secuencia ininterrumpida. Los bloques de pensamiento no se comparan como contenido. Pero cada uno que envías, aparte del primero, debe tener el mismo bloque de pensamiento anterior que cuando Claude lo produjo. Así que puedes omitir el más antiguo, el más reciente o todos ellos, pero no uno intermedio.

Un cambio puede ser tan pequeño como una palabra de la descripción de una herramienta. Cambiar, insertar, mover o eliminar un mensaje anterior cuenta, sea cual sea su rol. También cuenta cambiar el texto que precede a un bloque de pensamiento en su propio mensaje.

Qué no cuenta

Esto no cuentaPorque
model, effort, max_tokens, tool_choice, metadata, thinking.display y otros parámetrosSolo se comparan system, tools y los mensajes
El formato JSON o el orden de las clavesLa API compara el JSON analizado, no su texto
Los marcadores cache_controlIndican dónde almacenar en caché, y no son contenido que lea Claude
Una herramienta con defer_loading: true a la que nada ha hecho referenciaNo está en el contexto de Claude hasta que algo hace referencia a ella

Establece prefix_mismatch_behavior

El encabezado beta thinking-binding-controls-2026-08-01 agrega la configuración thinking.block_binding.prefix_mismatch_behavior y el array input_transformations de la respuesta.

ValorSi un bloque no supera la verificación de prefijo
"error"La API rechaza la solicitud con un error 400 que nombra el primer bloque inválido
"drop_block"La API omite los bloques inválidos, y la solicitud tiene éxito. No se te factura por esos bloques, pero omitirlos puede costar más
Sin establecer, o nullDepende del modelo

Los bloques que no superan la verificación de prefijo siguen siendo inválidos en cada solicitud posterior que los envíe, mientras el cambio siga vigente. La configuración actúa solo sobre la solicitud que la lleva. Con el pensamiento desactivado ("disabled" o "between_tools"), enviarla produce un error 400 en todos los modelos.

La siguiente solicitud establece prefix_mismatch_behavior en "drop_block". En un primer turno no hay pensamiento que devolver, así que input_transformations se devuelve vacío:

client = anthropic.Anthropic()

response = client.beta.messages.create(
    model="claude-opus-5-5",
    max_tokens=16000,
    thinking={
        "type": "adaptive",
        "block_binding": {"prefix_mismatch_behavior": "drop_block"},
    },
    messages=[
        {
            "role": "user",
            "content": "What is the greatest common divisor of 1071 and 462?",
        }
    ],
    betas=["thinking-binding-controls-2026-08-01"],
)

for block in response.content:
    if block.type == "text":
        print(block.text)

print(f"Input transformations: {len(response.input_transformations or [])}")

Vigila el tráfico de producción

Con prefix_mismatch_behavior sin establecer, una solicitud que no supera la verificación de prefijo podría no recibir ningún error en algunos modelos. Los bloques de pensamiento que no la superaron llegan entonces al modelo. Para encontrar esos bloques en el tráfico de producción, envía el encabezado beta thinking-binding-controls-2026-08-01, deja la configuración sin establecer y registra el array input_transformations de cada respuesta. El encabezado agrega ese array y no cambia lo que recibe el modelo.

Cada uno de esos bloques obtiene su propia entrada thinking_mismatch_allowed en ese array. Una entrada tiene este aspecto:

{
  "input_transformations": [
    {
      "type": "thinking_mismatch_allowed",
      "path": "messages.1.content.0",
      "reason": "prefix_binding_mismatch"
    }
  ]
}

Para encontrar el cambio, consulta Encuentra lo que cambió tu código.

Comprueba qué caso obtienes

En algunos modelos, una solicitud que no supera la verificación de prefijo podría recibir el error 400 o ningún error. Esta prueba muestra cuál recibe una solicitud:

  1. Toma una conversación que contenga un bloque de pensamiento de uno de esos modelos. Cambia o agrega la indicación del sistema (system). El bloque entonces no supera la verificación de prefijo, porque la indicación del sistema cambió después de que Claude produjera el bloque.
  2. Envíala al mismo modelo con el encabezado beta thinking-binding-controls-2026-08-01, y deja prefix_mismatch_behavior sin establecer.

La respuesta es una de estas:

  • Un error 400 que dice bound to a different conversation: La solicitud recibió el error 400.
  • Una respuesta 200 cuyo array input_transformations tiene entradas thinking_mismatch_allowed: La solicitud no recibió ningún error. Cada entrada nombra un bloque de pensamiento que no superó la verificación de prefijo y llegó a Claude.
  • Una respuesta 200 cuyo array input_transformations está vacío: Ningún bloque falló la verificación de prefijo, así que la prueba no muestra nada. Comprueba que la conversación contenga un bloque de pensamiento de ese modelo.

El resultado describe esa única solicitud y no garantiza nada sobre las siguientes, así que escribe tu código para manejar ambos casos.

Próximos pasos

Qué enviar en lugar de cada cambio que tu código hace en una conversación.

Recupera una conversación que falla, encuentra lo que cambia tu código y comprueba que ya no ocurre.

Qué es el pensamiento preservado, a qué está vinculado un bloque de pensamiento y cómo cambiar de modelo o de cuenta.

¿Te resultó útil esta página?