Habilitar el pensamiento adaptativo con thinking: {type: 'adaptive'}
El pensamiento adaptativo permite a Claude decidir, por solicitud, cuánto razonamiento visible necesita una tarea en realidad, en lugar de que tú adivines un presupuesto fijo de antemano.
Resumen
El pensamiento extendido expone el razonamiento de Claude como un bloque de contenido thinking separado que se devuelve junto con la respuesta final.
El pensamiento adaptativo es el modo recomendado para activarlo, ya que delega la decisión de profundidad a Claude.
Lo habilitas con un único parámetro thinking en la llamada a messages.create.
Una vez habilitado, el análisis de tu respuesta deberá manejar dos tipos de bloques de contenido en lugar de uno: thinking y text.
Esta página cubre la configuración exacta, un ejemplo completo y funcional, y los errores que surgen con más frecuencia cuando los equipos lo integran por primera vez.
Receta
Tarjeta de receta de referencia rápida, lista para copiar y pegar.
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
thinking={"type": "adaptive"},
messages=[{"role": "user", "content": "Diseña un plan de reversión para un despliegue fallido."}],
)
for block in response.content:
print(block.type)Cuándo usar esto:
- Tareas de razonamiento de varios pasos: planificación, depuración, matemáticas, acertijos lógicos.
- Tareas en las que deseas que Claude autocalibre el esfuerzo en lugar de codificar una profundidad fija.
- Cualquier carga de trabajo en la que más tarde desees inspeccionar o registrar la ruta de razonamiento de Claude.
- Construyendo hacia la sintonización del parámetro
effort, que se compone conthinking. - Migrando de una configuración de pensamiento con presupuesto fijo a una adaptativa más simple.
Ejemplo de Trabajo
import anthropic
client = anthropic.Anthropic()
def ask_with_adaptive_thinking(prompt: str) -> dict:
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=2048,
thinking={"type": "adaptive"},
messages=[{"role": "user", "content": prompt}],
)
thinking_text = None
answer_text = None
for block in response.content:
if block.type == "thinking":
thinking_text = block.thinking
elif block.type == "text":
answer_text = block.text
return {
"reasoning": thinking_text,
"answer": answer_text,
"stop_reason": response.stop_reason,
}
if __name__ == "__main__":
result = ask_with_adaptive_thinking(
"Un servicio tiene tres réplicas. Una está fallando las comprobaciones de estado de forma intermitente. "
"Explica cómo diagnosticarías la causa raíz antes de reiniciar nada."
)
if result["reasoning"]:
print("--- Razonamiento ---")
print(result["reasoning"])
print("--- Respuesta ---")
print(result["answer"])Lo que esto demuestra:
- Una función de ayuda reutilizable que separa el bloque
thinkingdel bloquetexten cada llamada. - Comprobar
block.typedentro del bucle en lugar de asumir una forma de contenido fija. - Manejar el caso en que
reasoningpuede serNonepara una indicación que no necesitó razonamiento visible. - Leer
response.stop_reasonjunto con el contenido, útil para detectar respuestas truncadas. - Una indicación genuinamente adecuada para el pensamiento adaptativo: razonamiento de diagnóstico de varios pasos, no una búsqueda trivial.
Inmersión Profunda
Cómo Funciona
- El parámetro
thinkingacepta un objeto de configuración;{"type": "adaptive"}es el valor que los ejemplos de este sitio usan en todas partes. - Con el pensamiento adaptativo activado, Claude evalúa la solicitud entrante y decide internamente cuánto razonamiento producir antes de responder.
- La API devuelve el razonamiento como uno o más bloques de contenido
thinkingenresponse.content, ordenados antes del bloquetextcorrespondiente. response.contentes siempre una lista, incluso para una respuesta de un solo bloque, por lo que el código debe iterar en lugar de indexar una posición fija.- Claude Fable 5 se ejecuta con el pensamiento adaptativo siempre activado por defecto, lo que refleja que este modo se trata como el comportamiento base para ese modelo en lugar de una opción adicional.
Formas de Bloques de Contenido
| Tipo de Bloque | Campo a leer | Presente cuando |
|---|---|---|
thinking | block.thinking (cadena) | Claude juzgó que la tarea se beneficiaba de un razonamiento visible |
text | block.text (cadena) | Siempre presente para una respuesta completada normal |
Notas de Python
# Patrón de extracción defensivo utilizado en todos los ejemplos de esta sección.
def split_content(response):
thinking, text = None, None
for block in response.content:
if block.type == "thinking":
thinking = block.thinking
elif block.type == "text":
text = block.text
return thinking, textTrata block.thinking como opcional en cada ruta de código. Una protección estilo getattr o la comprobación if block.type == "thinking" que se muestra arriba evita AttributeError cuando una indicación simple omite el razonamiento por completo.
Errores Comunes
- Asumir que
response.content[0]es siempre la respuesta de texto. Con el pensamiento adaptativo activado, el índice0puede ser en cambio el bloquethinking. Solución: itera sobreresponse.contenty cambia segúnblock.typeen lugar de indexar por posición. - Tratar un bloque
thinkingfaltante como un error. Las indicaciones simples a menudo no producen ningún razonamiento visible, eso es el pensamiento adaptativo funcionando correctamente, no un error. Solución: protege con comprobacionesis not Noney solo regístralo como inesperado si la indicación era genuinamente compleja. - Olvidar que
max_tokensdebe cubrir el pensamiento además de la respuesta. Un valor bajo demax_tokenspuede truncar el razonamiento antes de que se escriba la respuesta final. Solución: presupuestamax_tokensgenerosamente para tareas que esperas que activen un razonamiento profundo y compruebaresponse.stop_reasonpara"max_tokens". - Confundir
thinkingconoutput_config.effort. Habilitar el pensamiento adaptativo no establece por sí solo un límite de profundidad de razonamiento. Solución: combinathinking={"type": "adaptive"}con unaoutput_config={"effort": ...}explícita cuando necesites controlar el costo, consulta la página de ajuste de esfuerzo. - Mostrar el razonamiento en bruto a los usuarios finales sin filtrar. El bloque
thinkingpuede ser verboso y está destinado a la depuración o divulgación opcional, no como la respuesta principal de la interfaz de usuario. Solución: muestra el bloquetextpor defecto y oculta cualquier visualización de razonamiento detrás de una opción explícita de "mostrar razonamiento". - Reenviar el bloque
thinkingde nuevo como historial de conversación sin modificar. Algunos flujos de varios turnos incluyen accidentalmente bloquesthinkinganteriores como si fueran texto normal del asistente, inflando el uso de tokens. Solución: elimina o resume los bloquesthinkinganteriores antes de agregarlos a la listamessagesdel siguiente turno.
Alternativas
| Alternativa | Usar cuando | No usar cuando |
|---|---|---|
Sin configuración thinking | Solicitudes simples y de baja latencia donde la profundidad del razonamiento es irrelevante | La tarea implica lógica de varios pasos, planificación o depuración |
| Configuración de pensamiento con presupuesto fijo (no adaptativo, si es compatible con tu versión de SDK) | Necesitas un límite de tokens de razonamiento duro y predecible independientemente de la dificultad de la tarea | Quieres que Claude se autocalibre y evite desperdiciar presupuesto en indicaciones fáciles |
Pensamiento adaptativo más effort explícito | Cargas de trabajo de producción que necesitan autocalibración y un límite de costo | Necesitas determinismo absoluto en los recuentos de tokens de razonamiento entre solicitudes |
Preguntas Frecuentes
¿Cuál es el código mínimo para activar el pensamiento adaptativo?
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
thinking={"type": "adaptive"},
messages=[{"role": "user", "content": "..."}],
)¿Por qué mi respuesta no incluyó un bloque de pensamiento?
- El pensamiento adaptativo permite a Claude decidir que el razonamiento no es necesario para indicaciones simples.
- Una pregunta fáctica trivial o una búsqueda corta a menudo producen solo un bloque
text. - Este es un comportamiento esperado, no una configuración incorrecta.
¿El pensamiento adaptativo cuesta más que una solicitud normal?
Puede ser así, ya que el razonamiento visible consume tokens de salida adicionales cuando Claude decide que una tarea lo necesita. Las indicaciones simples agregan poco o ningún sobrecosto; las complejas pueden usar notablemente más tokens.
¿Necesito establecer el parámetro `effort` para usar el pensamiento adaptativo?
No. thinking y effort son configuraciones independientes. El pensamiento adaptativo funciona por sí solo con el esfuerzo predeterminado; agregar un effort explícito solo limita la profundidad a la que se permite llegar a ese razonamiento.
¿Cómo leo el texto de razonamiento de la respuesta?
for block in response.content:
if block.type == "thinking":
print(block.thinking)¿Debo mostrar el bloque de pensamiento directamente a los usuarios finales?
Generalmente no. Trátalo como contenido de depuración o divulgación opcional, y muestra el bloque text como la respuesta principal. Si muestras el razonamiento, hazlo una opción explícita de la interfaz de usuario.
¿Está el pensamiento adaptativo activado por defecto para todos los modelos?
No, excepto para Claude Fable 5, que se ejecuta con el pensamiento adaptativo siempre activado por defecto. Otros modelos de la línea requieren la configuración explícita thinking para habilitarlo.
¿Se puede combinar el pensamiento adaptativo con la entrada multimodal?
Sí. Una solicitud puede incluir un bloque de contenido de imagen y thinking={"type": "adaptive"} en la misma llamada; Claude razona sobre el contenido de la imagen tal como lo haría con el texto.
¿Qué sucede si `max_tokens` es demasiado bajo para el razonamiento?
- La respuesta puede truncarse a mitad del razonamiento o a mitad de la respuesta.
- Comprueba
response.stop_reasonpara"max_tokens"para detectar esto. - Solución: aumenta
max_tokenspara indicaciones que probablemente activen un razonamiento profundo.
¿Hay alguna forma de forzar a Claude a producir siempre un bloque de pensamiento?
El pensamiento adaptativo está diseñado para que Claude decida, por lo que omitirá el razonamiento visible en indicaciones que juzgue triviales. Si necesitas una salida de razonamiento garantizada independientemente de la dificultad de la tarea, esa es una configuración de pensamiento diferente y no adaptativa, no cubierta en esta página.
¿El bloque de pensamiento cuenta para `max_tokens`?
Sí, los tokens de razonamiento y los tokens de respuesta se extraen del mismo presupuesto de salida establecido por max_tokens.
¿Cómo manejan las conversaciones de varios turnos los bloques de pensamiento anteriores?
Evita reenviar bloques thinking en bruto de turnos anteriores como texto normal del asistente en tu historial de messages. Elimínalos o resúmelos para que el uso de tokens no se dispare en una conversación larga.
Relacionado
- Pensamiento Extendido y el Parámetro Effort Explicados - la base conceptual para esta configuración.
- Fundamentos de Pensamiento Extendido, Effort y Multimodal - un conjunto más amplio de ejemplos mínimos que cubren pensamiento, esfuerzo e imágenes juntos.
- Ajuste del Parámetro Effort para Costo y Velocidad - combina el pensamiento adaptativo con un límite de costo explícito.
- Referencia de Niveles de Effort y Opciones de Visualización de Pensamiento - tabla de referencia para modos de visualización que se combinan con esta configuración.
- Mejores Prácticas de Pensamiento Extendido, Effort y Multimodal - prácticas numeradas para usar esto en producción.
Versiones de Stack: Escrito contra la línea de modelos Claude actual a partir de ~junio de 2026 - Claude Fable 5, Claude Opus 4.8, Claude Sonnet 5 (el predeterminado), y Claude Haiku 4.5 - y el SDK oficial de Python
anthropic(última versión 0.x). Los nombres de modelos, versiones de SDK y precios cambian rápidamente; verifica los detalles actuales en platform.claude.com/docs antes de confiar en ellos.