Fundamentos de Pensamiento Extendido, Esfuerzo y Multimodalidad
7 ejemplos para empezar con Pensamiento Extendido, Esfuerzo y Multimodalidad: 5 básicos y 2 intermedios.
Prerrequisitos
- Instala el SDK oficial:
pip install anthropic. - Configura tu clave de API como una variable de entorno:
export ANTHROPIC_API_KEY=sk-ant-.... - Crea un cliente una vez y reutilízalo:
client = anthropic.Anthropic(). - Para los ejemplos de imágenes, ten un archivo JPEG o PNG pequeño en disco para codificarlo como base64.
Ejemplos Básicos
1. Una Solicitud Simple, Sin Configuración de Pensamiento
El punto de partida antes de aplicar cualquier ajuste de pensamiento o esfuerzo.
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=512,
messages=[{"role": "user", "content": "Resume las desventajas de los microservicios."}],
)
print(response.content[0].text)messages.createenvía una solicitud de un solo turno sin configuración dethinking, por lo que no se devuelve ningún bloque de razonamiento.response.contentes una lista de bloques de contenido; para una respuesta de texto simple, generalmente contiene un bloque de texto.- Esta es la línea base sobre la que se construyen todos los demás ejemplos de esta página.
2. Habilitando el Pensamiento Adaptativo
Activa el pensamiento adaptativo para que Claude decida cuánto razonamiento necesita una tarea.
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
thinking={"type": "adaptive"},
messages=[{"role": "user", "content": "Planifica una migración de base de datos por fases."}],
)
for block in response.content:
print(block.type)thinking={"type": "adaptive"}permite a Claude elegir la profundidad del razonamiento por solicitud en lugar de un presupuesto fijo.- Iterar sobre
response.contentmuestra tanto un bloque dethinkingcomo un bloque detextpara una tarea como esta. - Las indicaciones simples aún pueden devolver poco o ningún razonamiento visible, ese es el comportamiento esperado.
Relacionado: Habilitar Pensamiento Adaptativo con thinking: {type: 'adaptive'} - análisis completo de esta configuración
3. Leyendo el Bloque de Pensamiento
Una vez que el pensamiento está habilitado, extrae el razonamiento por separado de la respuesta final.
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
print("Razonamiento:", thinking_text)
print("Respuesta:", answer_text)- El bloque
thinkingy el bloquetextson elementos separados en la misma listacontent. - Comprobar
block.typepermite que tu aplicación registre el razonamiento por separado de lo que ve el usuario. - No todas las respuestas incluyen un bloque
thinking; utiliza comprobacionesis Noneen código real.
4. Estableciendo un Nivel de Esfuerzo
Limita la profundidad del razonamiento y el costo con el parámetro de esfuerzo.
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
thinking={"type": "adaptive"},
output_config={"effort": "low"},
messages=[{"role": "user", "content": "Clasifica este ticket como facturación, error o solicitud de función."}],
)
print(response.content[-1].text)output_config={"effort": "low"}favorece la velocidad y el bajo costo sobre el razonamiento profundo.- El esfuerzo es independiente de la configuración
thinking; ambos se pueden establecer juntos. - El esfuerzo
lowes adecuado para tareas simples y de alto volumen, como la clasificación.
Relacionado: Ajuste del Parámetro de Esfuerzo para Costo y Velocidad - elección de un nivel por carga de trabajo
5. Enviando una Imagen Junto con Texto
Pide a Claude que mire una imagen y responda una pregunta sobre ella.
import base64
import anthropic
client = anthropic.Anthropic()
with open("chart.png", "rb") as f:
image_data = base64.standard_b64encode(f.read()).decode("utf-8")
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=512,
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/png",
"data": image_data,
},
},
{"type": "text", "text": "¿Qué tendencia muestra este gráfico?"},
],
}
],
)
print(response.content[0].text)contentse convierte en una lista de bloques tipificados cuando un mensaje mezcla una imagen con texto.base64.standard_b64encodeconvierte los bytes crudos en el formato de cadena que espera la API.media_typedebe coincidir con el formato real del archivo; las discrepancias causan errores en la solicitud.
Relacionado: Envío de Imágenes para Análisis de Visión con Codificación Base64 - análisis más profundo de la entrada de visión
Ejemplos Intermedios
6. Combinando Pensamiento Adaptativo, Esfuerzo e Imagen
Razona a través de una pregunta que requiere tanto mirar una imagen como pensar en la respuesta.
import base64
import anthropic
client = anthropic.Anthropic()
with open("architecture-diagram.png", "rb") as f:
image_data = base64.standard_b64encode(f.read()).decode("utf-8")
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1500,
thinking={"type": "adaptive"},
output_config={"effort": "high"},
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/png",
"data": image_data,
},
},
{"type": "text", "text": "Identifica cualquier punto único de fallo en esta arquitectura."},
],
}
],
)
for block in response.content:
if block.type == "thinking":
print("Razonamiento:", block.thinking[:200], "...")
elif block.type == "text":
print("Respuesta:", block.text)- Las tres configuraciones se componen:
thinking,output_configy una listacontentmultimodal funcionan en la misma solicitud. - El esfuerzo
highes apropiado aquí porque detectar fallos arquitectónicos se beneficia de un razonamiento más profundo. - Truncar el razonamiento impreso (
[:200]) es un patrón común al registrar bloques de pensamiento largos.
7. Manejando una Respuesta que No Tiene Bloque de Pensamiento
Escribe código defensivo, ya que no todas las respuestas devuelven razonamiento visible.
def extract_answer(response):
thinking = None
answer = None
for block in response.content:
if block.type == "thinking":
thinking = block.thinking
elif block.type == "text":
answer = block.text
return thinking, answer
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=256,
thinking={"type": "adaptive"},
output_config={"effort": "low"},
messages=[{"role": "user", "content": "¿Cuál es la capital de Francia?"}],
)
thinking, answer = extract_answer(response)
print("Tiene razonamiento:", thinking is not None)
print("Respuesta:", answer)- Una pregunta fáctica trivial con esfuerzo
lowa menudo no devuelve ningún bloque dethinking, el pensamiento adaptativo se lo saltó. - Escribir una pequeña función auxiliar
extract_answerevita que cada sitio de llamada repita el mismo bucle. - Comprobar
thinking is not Noneantes de usarlo evitaAttributeErroren código de producción.
Relacionado: Niveles de Esfuerzo y Opciones de Visualización del Pensamiento - Referencia - tabla completa de niveles y modos de visualización
Versiones de la Pila: Escrito contra la línea de modelos de 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 los modelos, las versiones del SDK y los precios cambian rápidamente; verifica los detalles actuales en platform.claude.com/docs antes de confiar en ellos.