Esta función es elegible para Zero Data Retention (ZDR). Cuando tu organización tiene un acuerdo de ZDR, los datos enviados a través de esta función no se almacenan después de que se devuelve la respuesta de la API.
El "extended thinking" (pensamiento extendido) le otorga a Claude capacidades de razonamiento mejoradas para tareas complejas, al tiempo que proporciona distintos niveles de transparencia sobre su proceso de pensamiento paso a paso antes de entregar su respuesta final.
En claude-fable-5 y claude-mythos-5, el pensamiento extendido siempre está habilitado y no se puede deshabilitar. El pensamiento extendido manual (thinking: {type: "enabled", budget_tokens: N}) no es compatible; usa pensamiento adaptativo en su lugar. El pensamiento adaptativo siempre está activado, y thinking: {type: "disabled"} devuelve un error.
Para Claude Opus 4.8 y Claude Opus 4.7, establece thinking: {type: "adaptive"} para habilitar el pensamiento adaptativo y usa el parámetro effort para controlar la profundidad del pensamiento. En ambos modelos, el pensamiento extendido manual (thinking: {type: "enabled", budget_tokens: N}) no es compatible y devuelve un error 400. Con el pensamiento adaptativo, el modelo decide cuándo y cuánto pensar en función de cada solicitud, por lo que activa el pensamiento solo cuando es necesario. Para Claude Opus 4.6 y Claude Sonnet 4.6, también se recomienda el pensamiento adaptativo; la configuración manual sigue siendo funcional en estos modelos, pero está obsoleta y se eliminará en una versión futura del modelo.
El pensamiento extendido manual (thinking: {type: "enabled", budget_tokens: N}) es compatible con todos los modelos actuales de Claude excepto Claude Fable 5, Claude Mythos 5, Claude Opus 4.8 y Claude Opus 4.7, donde no se acepta y devuelve un error 400. Algunos modelos tienen un comportamiento específico según el modo:
claude-fable-5) y Claude Mythos 5 (claude-mythos-5): el pensamiento extendido manual no es compatible y devuelve un error 400. El pensamiento adaptativo siempre está activado; usa el parámetro effort para controlar la profundidad del pensamiento.thinking: {type: "adaptive"}) con el parámetro effort en su lugar. El modelo determina si usar pensamiento extendido y en qué medida en función de cada solicitud.thinking: {type: "adaptive"}) con el parámetro effort en su lugar.thinking: {type: "enabled", budget_tokens: N} también se acepta. thinking: {type: "disabled"} no es compatible, y display tiene como valor predeterminado "omitted" en lugar de devolver contenido de pensamiento. Pasa display: "summarized" para recibir resúmenes.type: "enabled") está obsoleto pero sigue siendo funcional.type: "enabled") con modo intercalado está obsoleto pero sigue siendo funcional.El comportamiento del pensamiento difiere entre las versiones de los modelos de Claude. Consulta Diferencias en el pensamiento entre versiones de modelos para obtener más detalles.
Cuando el pensamiento extendido está activado, Claude crea bloques de contenido thinking donde genera su razonamiento interno. Claude incorpora las conclusiones de este razonamiento antes de elaborar una respuesta final.
La respuesta de la API incluye bloques de contenido thinking, seguidos de bloques de contenido text.
Aquí tienes un ejemplo del formato de respuesta predeterminado:
{
"content": [
{
"type": "thinking",
"thinking": "Let me analyze this step by step...",
"signature": "WaUjzkypQ2mUEVM36O2TxuC06KN8xyfbJwyem2dw3URve/op91XWHOEBLLqIOMfFG/UvLEczmEsUjavL...."
},
{
"type": "text",
"text": "Based on my analysis..."
}
]
}Para obtener más información sobre el formato de respuesta del pensamiento extendido, consulta la Referencia de la API de Messages.
Aquí tienes un ejemplo de cómo usar el pensamiento extendido en la API de Messages:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={"type": "enabled", "budget_tokens": 10000},
messages=[
{
"role": "user",
"content": "Are there an infinite number of prime numbers such that n mod 4 == 3?",
}
],
)
# La respuesta contiene bloques de pensamiento resumidos y bloques de texto
for block in response.content:
if block.type == "thinking":
print(f"\nThinking summary: {block.thinking}")
elif block.type == "text":
print(f"\nResponse: {block.text}")Para activar el pensamiento extendido, agrega un objeto thinking, con el parámetro type establecido en enabled y budget_tokens con un presupuesto de tokens especificado para el pensamiento extendido. Para Claude Opus 4.6 y Claude Sonnet 4.6, usa type: "adaptive" en su lugar. Consulta Pensamiento adaptativo para obtener más detalles. Aunque type: "enabled" con budget_tokens sigue siendo funcional en estos modelos, está obsoleto y se eliminará en una versión futura.
El parámetro budget_tokens determina el número máximo de tokens que Claude puede usar para su proceso de razonamiento interno. Este límite se aplica a los tokens de pensamiento completos, no a la salida resumida. Los presupuestos más grandes pueden mejorar la calidad de la respuesta al permitir un análisis más exhaustivo para problemas complejos, aunque es posible que Claude no use todo el presupuesto asignado, especialmente en rangos superiores a 32k.
budget_tokens está obsoleto en Claude Opus 4.6 y Claude Sonnet 4.6 y se eliminará en una versión futura del modelo. Usa pensamiento adaptativo con el parámetro effort para controlar la profundidad del pensamiento en su lugar.
Claude Mythos Preview, Claude Opus 4.8, Claude Opus 4.7 y Claude Opus 4.6 admiten hasta 128k tokens de salida. Claude Sonnet 4.6 y Claude Haiku 4.5 admiten hasta 64k. Consulta la descripción general de modelos para conocer los límites de los modelos heredados. En la API de Message Batches, el encabezado beta output-300k-2026-03-24 eleva el límite de salida a 300k para Claude Opus 4.8, Opus 4.7, Opus 4.6 y Sonnet 4.6.
budget_tokens debe establecerse en un valor menor que max_tokens. Sin embargo, cuando usas pensamiento intercalado con herramientas, puedes exceder este límite ya que el límite de tokens se convierte en toda tu ventana de contexto. Dado que budget_tokens debe ser menor que max_tokens, el pensamiento extendido no se puede combinar con max_tokens: 0 (precalentamiento de caché).
Con el pensamiento extendido habilitado, la API de Messages para los modelos Claude 4 devuelve un resumen del proceso de pensamiento completo de Claude. El pensamiento resumido proporciona todos los beneficios de inteligencia del pensamiento extendido, al tiempo que previene el uso indebido. Este es el comportamiento predeterminado en los modelos Claude 4 cuando el campo display en la configuración de pensamiento no está definido o está establecido en "summarized". En Claude Fable 5, Claude Mythos 5, Claude Opus 4.8, Claude Opus 4.7 y Claude Mythos Preview, display tiene como valor predeterminado "omitted", por lo que debes establecer display: "summarized" explícitamente para recibir el pensamiento resumido.
Estas son algunas consideraciones importantes sobre el pensamiento resumido:
En los casos excepcionales en que necesites acceso a la salida de pensamiento completa para los modelos Claude 4, contacta al equipo de ventas de Anthropic.
El campo display en la configuración de pensamiento controla cómo se devuelve el contenido de pensamiento en las respuestas de la API. Acepta dos valores:
"summarized": Los bloques de pensamiento contienen texto de pensamiento resumido. Consulta Pensamiento resumido para más detalles. Este es el valor predeterminado en Claude Opus 4.6, Claude Sonnet 4.6 y modelos anteriores de Claude 4."omitted": Los bloques de pensamiento se devuelven con un campo thinking vacío. El campo signature sigue conteniendo el pensamiento completo cifrado para mantener la continuidad en conversaciones de múltiples turnos (consulta Cifrado del pensamiento). Este es el valor predeterminado en Claude Fable 5, Claude Mythos 5, Claude Opus 4.8, Claude Opus 4.7 y Claude Mythos Preview.Configurar display: "omitted" es útil cuando tu aplicación no muestra el contenido de pensamiento a los usuarios. El beneficio principal es un tiempo más rápido hasta el primer token de texto al usar streaming: el servidor omite por completo el streaming de los tokens de pensamiento y entrega únicamente la firma, por lo que la respuesta de texto final comienza a transmitirse antes.
Estas son algunas consideraciones importantes sobre el pensamiento omitido:
signature para reconstruir el pensamiento original al construir el prompt (consulta Preservar los bloques de pensamiento). Cualquier texto que coloques en el campo thinking de un bloque omitido que se envía de vuelta será ignorado.display no es válido con thinking.type: "disabled" (no hay nada que mostrar).thinking.type: "adaptive" y el modelo omite el pensamiento para una solicitud simple, no se produce ningún bloque de pensamiento independientemente del valor de display.El campo signature es idéntico tanto si display es "summarized" como si es "omitted". Se admite cambiar los valores de display entre turnos de una conversación.
En Claude Mythos Preview, display tiene como valor predeterminado "omitted". Los ejemplos de esta sección pasan display explícitamente para que se apliquen a todos los modelos, pero en Mythos Preview puedes dejarlo sin establecer y obtener el mismo comportamiento. Para recibir pensamiento resumido en Mythos Preview, establece display: "summarized" explícitamente.
Los pipelines automatizados que nunca muestran contenido de pensamiento a los usuarios finales pueden evitar la sobrecarga de recibir tokens de pensamiento por la red. Las aplicaciones sensibles a la latencia obtienen la misma calidad de razonamiento sin esperar a que el texto de pensamiento se transmita antes de que comience la respuesta final.
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={
"type": "enabled",
"budget_tokens": 10000,
"display": "omitted",
},
messages=[
{"role": "user", "content": "What is 27 * 453?"},
],
)
for block in response.content:
if block.type == "thinking":
if block.thinking:
print(f"Thinking: {block.thinking}")
else:
print("Thinking: [omitted]")
elif block.type == "text":
print(f"Response: {block.text}")Cuando se establece display: "omitted", la respuesta contiene bloques thinking con un campo thinking vacío:
{
"content": [
{
"type": "thinking",
"thinking": "",
"signature": "EosnCkYICxIMMb3LzNrMu..."
},
{
"type": "text",
"text": "The answer is 12,231."
}
]
}Al hacer streaming con display: "omitted", no se emiten eventos thinking_delta; consulta Streaming de pensamiento a continuación para ver la secuencia de eventos.
Puedes hacer streaming de respuestas de pensamiento extendido usando server-sent events (SSE).
Cuando el streaming está habilitado para el pensamiento extendido, recibes contenido de pensamiento a través de eventos thinking_delta.
Cuando se establece display: "omitted", no se emiten eventos thinking_delta. Consulta Control de la visualización del pensamiento.
Para obtener más documentación sobre streaming a través de la API de Messages, consulta Streaming de mensajes.
Aquí se muestra cómo manejar el streaming con pensamiento:
client = anthropic.Anthropic()
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=16000,
thinking={"type": "enabled", "budget_tokens": 10000},
messages=[
{
"role": "user",
"content": "What is the greatest common divisor of 1071 and 462?",
}
],
) as stream:
thinking_started = False
response_started = False
for event in stream:
if event.type == "content_block_start":
print(f"\nStarting {event.content_block.type} block...")
# Restablecer indicadores para cada nuevo bloque
thinking_started = False
response_started = False
elif event.type == "content_block_delta":
if event.delta.type == "thinking_delta":
if not thinking_started:
print("Thinking: ", end="", flush=True)
thinking_started = True
print(event.delta.thinking, end="", flush=True)
elif event.delta.type == "text_delta":
if not response_started:
print("Response: ", end="", flush=True)
response_started = True
print(event.delta.text, end="", flush=True)
elif event.type == "content_block_stop":
print("\nBlock complete.")Ejemplo de salida de streaming:
event: message_start
data: {"type": "message_start", "message": {"id": "msg_01...", "type": "message", "role": "assistant", "content": [], "model": "claude-sonnet-4-6", "stop_reason": null, "stop_sequence": null}}
event: content_block_start
data: {"type": "content_block_start", "index": 0, "content_block": {"type": "thinking", "thinking": "", "signature": ""}}
event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "thinking_delta", "thinking": "I need to find the GCD of 1071 and 462 using the Euclidean algorithm.\n\n1071 = 2 × 462 + 147"}}
event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "thinking_delta", "thinking": "\n462 = 3 × 147 + 21\n147 = 7 × 21 + 0\n\nSo GCD(1071, 462) = 21"}}
// Additional thinking deltas...
event: content_block_delta
data: {"type": "content_block_delta", "index": 0, "delta": {"type": "signature_delta", "signature": "EqQBCgIYAhIM1gbcDa9GJwZA2b3hGgxBdjrkzLoky3dl1pkiMOYds..."}}
event: content_block_stop
data: {"type": "content_block_stop", "index": 0}
event: content_block_start
data: {"type": "content_block_start", "index": 1, "content_block": {"type": "text", "text": ""}}
event: content_block_delta
data: {"type": "content_block_delta", "index": 1, "delta": {"type": "text_delta", "text": "The greatest common divisor of 1071 and 462 is **21**."}}
// Additional text deltas...
event: content_block_stop
data: {"type": "content_block_stop", "index": 1}
event: message_delta
data: {"type": "message_delta", "delta": {"stop_reason": "end_turn", "stop_sequence": null}}
event: message_stop
data: {"type": "message_stop"}Cuando se establece display: "omitted", el bloque de pensamiento se abre, llega un único signature_delta y el bloque se cierra sin ningún evento thinking_delta. El streaming de texto comienza inmediatamente después:
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"thinking","thinking":"","signature":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"signature_delta","signature":"EosnCkYICxIMMb3LzNrMu..."}}
event: content_block_stop
data: {"type":"content_block_stop","index":0}
event: content_block_start
data: {"type":"content_block_start","index":1,"content_block":{"type":"text","text":""}}Al usar streaming con el pensamiento habilitado, es posible que notes que el texto a veces llega en fragmentos más grandes alternando con una entrega más pequeña, token por token. Este es un comportamiento esperado, especialmente para el contenido de pensamiento.
El sistema de streaming necesita procesar el contenido en lotes para un rendimiento óptimo, lo que puede resultar en este patrón de entrega "por fragmentos", con posibles retrasos entre eventos de streaming.
El pensamiento extendido se puede usar junto con el uso de herramientas, lo que permite a Claude razonar sobre la selección de herramientas y el procesamiento de resultados.
Al usar el pensamiento extendido con uso de herramientas, ten en cuenta las siguientes limitaciones:
Limitación de elección de herramienta: El uso de herramientas con pensamiento solo admite tool_choice: {"type": "auto"} (el valor predeterminado) o tool_choice: {"type": "none"}. Usar tool_choice: {"type": "any"} o tool_choice: {"type": "tool", "name": "..."} resultará en un error porque estas opciones fuerzan el uso de herramientas, lo cual es incompatible con el pensamiento extendido.
Preservación de bloques de pensamiento: Durante el uso de herramientas, debes pasar los bloques thinking de vuelta a la API para el último mensaje del asistente. Incluye el bloque completo sin modificar de vuelta a la API para mantener la continuidad del razonamiento.
No puedes alternar el pensamiento en medio de un turno del asistente, incluso durante bucles de uso de herramientas. Todo el turno del asistente debe operar en un único modo de pensamiento:
Desde la perspectiva del modelo, los bucles de uso de herramientas son parte del turno del asistente. Un turno del asistente no se completa hasta que Claude termina su respuesta completa, que puede incluir múltiples llamadas a herramientas y resultados.
Por ejemplo, esta secuencia es toda parte de un único turno del asistente:
User: "What's the weather in Paris?"
Assistant: [thinking] + [tool_use: get_weather]
User: [tool_result: "20°C, sunny"]
Assistant: [text: "The weather in Paris is 20°C and sunny"]Aunque hay múltiples mensajes de la API, el bucle de uso de herramientas es conceptualmente parte de una respuesta continua del asistente.
Cuando ocurre un conflicto de pensamiento a mitad de turno (como activar o desactivar el pensamiento durante un bucle de uso de herramientas), la API deshabilita automáticamente el pensamiento para esa solicitud. Para preservar la calidad del modelo y mantenerse dentro de la distribución, la API puede:
Esto significa que intentar alternar el pensamiento a mitad de turno no causará un error, pero el pensamiento se deshabilitará silenciosamente para esa solicitud. Para confirmar si el pensamiento estuvo activo, verifica la presencia de bloques thinking en la respuesta.
Práctica recomendada: Planifica tu estrategia de pensamiento al inicio de cada turno en lugar de intentar alternar a mitad de turno.
Ejemplo: Alternar el pensamiento después de completar un turno
User: "What's the weather?"
Assistant: [tool_use] (thinking disabled)
User: [tool_result]
Assistant: [text: "It's sunny"]
User: "What about tomorrow?"
Assistant: [thinking] + [text: "..."] (thinking enabled - new turn)Al completar el turno del asistente antes de alternar el pensamiento, te aseguras de que el pensamiento esté realmente habilitado para la nueva solicitud.
Alternar los modos de pensamiento también invalida el almacenamiento en caché de prompts para el historial de mensajes. Para obtener más detalles, consulta la sección Pensamiento extendido con almacenamiento en caché de prompts.
Durante el uso de herramientas, debes pasar los bloques thinking de vuelta a la API, y debes incluir el bloque completo sin modificar de vuelta a la API. Esto es fundamental para mantener el flujo de razonamiento del modelo y la integridad de la conversación.
Aunque puedes omitir los bloques thinking de turnos anteriores con rol assistant, siempre pasa de vuelta todos los bloques de pensamiento a la API para cualquier conversación de múltiples turnos. La API:
Qué bloques se conservan depende del modelo. Consulta Preservación de bloques de pensamiento por modelo para conocer los valores predeterminados por clase. Para anular el valor predeterminado, usa la estrategia de edición de contexto clear_thinking_20251015.
Al alternar los modos de pensamiento durante una conversación, recuerda que todo el turno del asistente (incluidos los bucles de uso de herramientas) debe operar en un único modo de pensamiento. Para obtener más detalles, consulta Alternar modos de pensamiento en conversaciones.
Cuando Claude invoca herramientas, está pausando la construcción de una respuesta para esperar información externa. Cuando se devuelven los resultados de las herramientas, Claude continúa construyendo esa respuesta existente. Esto hace necesario preservar los bloques de pensamiento durante el uso de herramientas, por un par de razones:
Continuidad del razonamiento: Los bloques de pensamiento capturan el razonamiento paso a paso de Claude que condujo a las solicitudes de herramientas. Cuando publicas los resultados de las herramientas, incluir el pensamiento original garantiza que Claude pueda continuar su razonamiento desde donde lo dejó.
Mantenimiento del contexto: Aunque los resultados de las herramientas aparecen como mensajes de usuario en la estructura de la API, son parte de un flujo de razonamiento continuo. Preservar los bloques de pensamiento mantiene este flujo conceptual a través de múltiples llamadas a la API. Para obtener más información sobre la gestión del contexto, consulta la guía sobre ventanas de contexto.
Importante: Al proporcionar bloques thinking, toda la secuencia de bloques thinking consecutivos debe coincidir con las salidas generadas por el modelo durante la solicitud original; no puedes reorganizar ni modificar la secuencia de estos bloques.
El pensamiento extendido con uso de herramientas en los modelos Claude 4 admite "interleaved thinking" (pensamiento intercalado), que permite a Claude pensar entre llamadas a herramientas y realizar un razonamiento más sofisticado después de recibir los resultados de las herramientas.
Con el pensamiento intercalado, Claude puede:
Compatibilidad de modelos:
interleaved-thinking-2025-05-14 está obsoleto en Opus 4.6 y se ignora de forma segura si se incluye.interleaved-thinking-2025-05-14 con pensamiento extendido manual (thinking: {type: "enabled"}) sigue siendo funcional pero está obsoleto.interleaved-thinking-2025-05-14 a tu solicitud de API para habilitar el pensamiento intercalado.Aquí hay algunas consideraciones importantes para el pensamiento intercalado:
budget_tokens puede exceder el parámetro max_tokens, ya que representa el presupuesto total de todos los bloques de pensamiento dentro de un turno del asistente.interleaved-thinking-2025-05-14 en solicitudes a cualquier modelo sin devolver un error. En modelos que no admiten pensamiento intercalado, el encabezado se ignora. En Claude Opus 4.8, Claude Opus 4.7 y Claude Opus 4.6, está obsoleto y se ignora de forma segura. En Claude Mythos Preview, no es necesario y se ignora de forma segura.interleaved-thinking-2025-05-14 a cualquier modelo que no sea Claude Opus 4.8, Claude Opus 4.7, Claude Opus 4.6, Claude Sonnet 4.6, Claude Opus 4.5, Claude Opus 4.1 (obsoleto), Opus 4 (obsoleto), Sonnet 4.5 o Sonnet 4 (obsoleto), tu solicitud fallará.El almacenamiento en caché de prompts con pensamiento tiene varias consideraciones importantes:
Las tareas de pensamiento extendido a menudo tardan más de 5 minutos en completarse. Considera usar la duración de caché de 1 hora para mantener aciertos de caché en sesiones de pensamiento más largas y flujos de trabajo de múltiples pasos.
Eliminación de bloques de pensamiento del contexto
Patrones de invalidación de caché
En modelos Opus/Sonnet anteriores y todos los modelos Haiku, los bloques de pensamiento se eliminan para los cálculos de caché y contexto; en Opus 4.5+ y Sonnet 4.6+, se conservan de forma predeterminada. En cualquier caso, deben preservarse al continuar conversaciones con uso de herramientas, especialmente con pensamiento intercalado.
Al usar pensamiento extendido con uso de herramientas, los bloques de pensamiento exhiben un comportamiento de caché específico que afecta el conteo de tokens:
Cómo funciona:
Flujo de ejemplo detallado:
Solicitud 1:
User: "What's the weather in Paris?"Respuesta 1:
[thinking_block_1] + [tool_use block 1]Solicitud 2:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True]Respuesta 2:
[thinking_block_2] + [text block 2]La Solicitud 2 escribe una caché del contenido de la solicitud (no de la respuesta). La caché incluye el mensaje de usuario original, el primer bloque de pensamiento, el bloque de uso de herramienta y el resultado de la herramienta.
Solicitud 3:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True],
Assistant: [thinking_block_2] + [text block 2],
User: [Text response, cache=True]Para Opus 4.5+ y Sonnet 4.6+, todos los bloques de pensamiento anteriores se conservan de forma predeterminada. Para modelos Opus/Sonnet anteriores y todos los modelos Haiku, dado que se incluyó un bloque de usuario que no es un resultado de herramienta, todos los bloques de pensamiento anteriores se ignoran y se eliminan del contexto. Esta solicitud se procesará de la misma manera que:
User: ["What's the weather in Paris?"],
Assistant: [tool_use block 1],
User: [tool_result_1, cache=True],
Assistant: [text block 2],
User: [Text response, cache=True]Puntos clave:
cache_control explícitosmax_tokens (que incluye tu presupuesto de pensamiento cuando el pensamiento está habilitado) se aplica como un límite estricto. En los modelos Claude 4.5 y posteriores, si los tokens de entrada más max_tokens exceden el tamaño de la ventana de contexto, la API acepta la solicitud. Si la generación luego alcanza el límite de la ventana de contexto, se detiene con stop_reason: "model_context_window_exceeded". En modelos anteriores, la API devuelve un error de validación en su lugar. Consulta Manejo de stop reasons.
Puedes leer la guía sobre ventanas de contexto para un análisis más profundo.
Al calcular el uso de la ventana de contexto con el pensamiento habilitado, hay algunas consideraciones a tener en cuenta:
max_tokens para ese turnoEl siguiente diagrama demuestra la gestión especializada de tokens cuando el pensamiento extendido está habilitado:
La ventana de contexto efectiva se calcula como:
context window =
(current input tokens - previous thinking tokens) +
(thinking tokens + encrypted thinking tokens + text output tokens)Usa la API de conteo de tokens para obtener conteos de tokens precisos para tu caso de uso específico, especialmente cuando trabajas con conversaciones de múltiples turnos que incluyen pensamiento.
Al usar pensamiento extendido con uso de herramientas, los bloques de pensamiento deben preservarse explícitamente y devolverse con los resultados de las herramientas.
El cálculo de la ventana de contexto efectiva para pensamiento extendido con uso de herramientas se convierte en:
context window =
(current input tokens + previous thinking tokens + tool use tokens) +
(thinking tokens + encrypted thinking tokens + text output tokens)El siguiente diagrama ilustra la gestión de tokens para pensamiento extendido con uso de herramientas:
Dado el comportamiento de la ventana de contexto y max_tokens con pensamiento extendido, es posible que necesites:
max_tokens a medida que cambia la longitud de tu promptEl contenido completo del pensamiento se cifra y se devuelve en el campo signature. Este campo se utiliza para verificar que los bloques de pensamiento fueron generados por Claude cuando se envían de vuelta a la API.
Solo es estrictamente necesario enviar de vuelta los bloques de pensamiento cuando se usan herramientas con pensamiento extendido. De lo contrario, puedes omitir los bloques de pensamiento de turnos anteriores. Si los envías de vuelta, que la API los conserve o los elimine depende del modelo: Opus 4.5+ y Sonnet 4.6+ los conservan en el contexto de forma predeterminada; los modelos Opus/Sonnet anteriores y todos los modelos Haiku los eliminan. Consulta edición de contexto para configurar esto.
Si envías de vuelta los bloques de pensamiento, devuelve todo tal como lo recibiste para mantener la consistencia y evitar posibles problemas.
Aquí hay algunas consideraciones importantes sobre el cifrado del pensamiento:
signature_delta dentro de un evento content_block_delta justo antes del evento content_block_stop.signature son significativamente más largos en los modelos Claude 4 que en modelos anteriores.signature es un campo opaco y no debe interpretarse ni analizarse.signature son compatibles entre plataformas (las API de Claude, Amazon Bedrock y Vertex AI). Los valores generados en una plataforma serán compatibles con otra.Además de los bloques thinking regulares, la API puede devolver bloques redacted_thinking. Un bloque redacted_thinking contiene contenido de pensamiento cifrado en un campo data, sin resumen legible:
{
"type": "redacted_thinking",
"data": "..."
}El campo data es opaco y está cifrado. Al igual que el campo signature en los bloques de pensamiento regulares, debes pasar los bloques redacted_thinking de vuelta a la API sin cambios al continuar una conversación de múltiples turnos con herramientas.
Si tu código filtra bloques de contenido por tipo (por ejemplo, block.type == "thinking") al reenviar respuestas con uso de herramientas, incluye también los bloques redacted_thinking. Filtrar solo por block.type == "thinking" descarta silenciosamente los bloques redacted_thinking y rompe el protocolo de múltiples turnos descrito anteriormente.
Los bloques redacted_thinking son un tipo de bloque de contenido distinto devuelto por la API cuando partes del pensamiento se redactan por seguridad. Esto es independiente de la opción display: "omitted", que devuelve bloques thinking regulares con un campo thinking vacío.
La API de Messages maneja el pensamiento de manera diferente entre las versiones de los modelos de Claude. La siguiente tabla ofrece una comparación resumida:
| Característica | Modelos Claude 4 (anteriores a Opus 4.5) | Claude Opus 4.5 | Claude Sonnet 4.6 | Claude Opus 4.6 (pensamiento adaptativo) | Claude Opus 4.7 (pensamiento adaptativo) | Claude Opus 4.8 (pensamiento adaptativo) | Claude Mythos Preview (pensamiento adaptativo) |
|---|---|---|---|---|---|---|---|
| Salida de pensamiento | Devuelve pensamiento resumido | Devuelve pensamiento resumido | Devuelve pensamiento resumido | Devuelve pensamiento resumido | Omitido de forma predeterminada; establece display: "summarized" para recibir pensamiento resumido | Omitido de forma predeterminada; establece display: "summarized" para recibir pensamiento resumido | Omitido de forma predeterminada; establece display: "summarized" para recibir pensamiento resumido. Los tokens de pensamiento sin procesar nunca se devuelven. |
| Pensamiento intercalado | Compatible con el encabezado beta interleaved-thinking-2025-05-14 | Compatible con el encabezado beta interleaved-thinking-2025-05-14 | Compatible con el encabezado beta interleaved-thinking-2025-05-14 o automático con pensamiento adaptativo | Automático con pensamiento adaptativo (encabezado beta obsoleto e ignorado de forma segura) | Automático con pensamiento adaptativo (encabezado beta obsoleto e ignorado de forma segura) | Automático con pensamiento adaptativo (encabezado beta obsoleto e ignorado de forma segura) | Automático con pensamiento adaptativo (encabezado beta no necesario e ignorado de forma segura). El razonamiento entre herramientas se traslada a bloques de pensamiento en este modelo. |
| Preservación de bloques de pensamiento | No se preservan entre turnos | Preservados de forma predeterminada | Preservados de forma predeterminada | Preservados de forma predeterminada | Preservados de forma predeterminada | Preservados de forma predeterminada | Preservados de forma predeterminada. Los bloques se eliminan al continuar la conversación en un modelo que no admite el formato de pensamiento de Mythos. |
Si los bloques de pensamiento de turnos anteriores del asistente se preservan en el contexto de forma predeterminada depende de la clase de modelo. Opus: Claude Opus 4.5 y los modelos Opus posteriores conservan todos los bloques de pensamiento anteriores; Claude Opus 4.1 (obsoleto) y los modelos Opus anteriores conservan solo el pensamiento del último turno del asistente. Sonnet: Claude Sonnet 4.6 y los modelos Sonnet posteriores conservan todos; Claude Sonnet 4.5 y los modelos Sonnet anteriores conservan solo el último turno. Haiku: todos los modelos Haiku hasta Claude Haiku 4.5 conservan solo el último turno. Claude Mythos Preview también conserva todos los bloques de pensamiento anteriores.
Beneficios de la preservación de bloques de pensamiento:
Consideraciones importantes:
Para modelos anteriores (Claude Sonnet 4.5, Opus 4.1 (obsoleto), etc.), los bloques de pensamiento de turnos anteriores continúan eliminándose del contexto. El comportamiento existente descrito en la sección Pensamiento extendido con almacenamiento en caché de prompts se aplica a esos modelos.
Para obtener información completa sobre precios, incluidas las tarifas base, escrituras en caché, aciertos de caché y tokens de salida, consulta la página de precios.
El proceso de pensamiento genera cargos por:
Cuando el pensamiento extendido está habilitado, se incluye automáticamente una indicación del sistema especializada para admitir esta función.
Al usar pensamiento resumido:
Al usar display: "omitted":
thinking está vacío)El recuento de tokens de salida facturados no coincidirá con el recuento de tokens visibles en la respuesta. Se te factura por el proceso de pensamiento completo, no por el contenido de pensamiento visible en la respuesta.
Para ver cuántos tokens de salida facturados se gastaron en el razonamiento interno, lee usage.output_tokens_details.thinking_tokens en la respuesta. Este valor refleja el razonamiento sin procesar que generó el modelo (no el texto resumido devuelto en el cuerpo) y siempre es menor o igual que output_tokens. Réstalo de output_tokens para aproximar la parte de la salida que no corresponde al razonamiento.
{
"usage": {
"input_tokens": 25,
"output_tokens": 348,
"output_tokens_details": {
"thinking_tokens": 312
}
}
}output_tokens sigue siendo el total inclusivo y autoritativo utilizado para la facturación. output_tokens_details es un desglose de solo lectura para fines de observabilidad.
usage.output_tokens_details.thinking_tokens en la respuesta informa cuántos de los tokens de salida facturados corresponden a razonamiento interno. Cuando se usa streaming, este desglose aparece únicamente en el evento final message_delta.max_tokens es mayor que 21.333 para evitar tiempos de espera de HTTP en solicitudes de larga duración. Esta es una validación del lado del cliente, no una restricción de la API. Si no necesitas procesar eventos de forma incremental, usa .stream() con .get_final_message() (Python) o .finalMessage() (TypeScript) para obtener el objeto Message completo sin manejar eventos individuales. Consulta Streaming de mensajes para más detalles. Cuando uses streaming, prepárate para manejar tanto los bloques de contenido de pensamiento como los de texto a medida que llegan.display: "omitted" en la configuración de pensamiento para reducir el tiempo hasta el primer token de texto. Consulta Controlar la visualización del pensamiento.temperature o top_k, ni con el uso forzado de herramientas.top_p en valores entre 1 y 0,95.Explora ejemplos prácticos de pensamiento en el cookbook.
Aprende las mejores prácticas de ingeniería de prompts para el pensamiento extendido.
Was this page helpful?