Ajuste del parámetro effort para optimizar el costo y la velocidad
El parámetro effort establece la profundidad de razonamiento que Claude aplica a una solicitud, lo que te permite intercambiar calidad por costo y velocidad por llamada.
Busca en todas las páginas de la documentación
El parámetro effort establece la profundidad de razonamiento que Claude aplica a una solicitud, lo que te permite intercambiar calidad por costo y velocidad por llamada.
Cada solicitud tiene un costo implícito y un presupuesto de latencia.
El parámetro effort, pasado bajo output_config, te da una palanca directa sobre ese presupuesto.
Un effort más bajo favorece la velocidad y el costo, un effort más alto favorece la exhaustividad.
Esto es distinto de la configuración thinking, que controla si el razonamiento es adaptativo y visible en absoluto.
Las dos configuraciones se componen, por lo que un sistema de producción bien ajustado generalmente establece ambas deliberadamente en lugar de dejar cualquiera en un valor predeterminado.
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,
output_config={"effort": "medium"},
messages=[{"role": "user", "content": "Summarize this customer support thread."}],
)
print(response.content[-1].text)Cuándo usar esto:
effort low mantiene el costo predecible.effort high o max vale la pena el costo.effort para el mismo prompt.effort dinámicamente según el tipo de solicitud en lugar de una única configuración fija.effort.import anthropic
client = anthropic.Anthropic()
EFFORT_BY_TASK_TYPE = {
"classify": "low",
"summarize": "medium",
"code_review": "high",
"incident_root_cause": "max",
}
def run_task(task_type: str, prompt: str) -> str:
effort = EFFORT_BY_TASK_TYPE.get(task_type, "medium")
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1536,
thinking={"type": "adaptive"},
output_config={"effort": effort},
messages=[{"role": "user", "content": prompt}],
)
for block in response.content:
if block.type == "text":
return block.text
return ""
if __name__ == "__main__":
ticket = "User reports intermittent 502s on checkout, started after last night's deploy."
result = run_task("incident_root_cause", ticket)
print(result)Lo que esto demuestra:
effort, evitando una única configuración codificada en toda la aplicación.thinking={"type": "adaptive"} con un límite de effort explícito, las dos configuraciones se componen limpiamente."medium" para tipos de tareas no reconocidos en lugar de fallar.text, ignorando cualquier bloque thinking para los propósitos de este sitio de llamada.effort max específicamente al tipo de tarea de mayor riesgo, el análisis de la causa raíz de un incidente.output_config={"effort": "<level>"} establece un límite en la cantidad de computación de razonamiento que Claude aplica antes de responder.low, medium, high, max, de más rápido y barato a más exhaustivo y caro.effort se aplica independientemente de si el bloque thinking es visible; rige el presupuesto de razonamiento subyacente, no solo su visualización.effort generalmente aumenta tanto el recuento de tokens de salida (cuando el thinking es visible) como la latencia, ya que Claude realiza más trabajo interno por solicitud.effort se compone con thinking: el thinking adaptativo decide si el razonamiento ocurre en absoluto para un prompt dado, el effort limita la profundidad a la que llega cuando lo hace.| Nivel | Velocidad | Costo | Mejor ajuste |
|---|---|---|---|
low | Más rápido | Más bajo | Clasificación, extracción, búsquedas cortas |
medium | Equilibrado | Moderado | Respuestas de asistente general, resumen |
high | Más lento | Más alto | Revisión de código, planificación de varios pasos |
max | Más lento | Más alto | Análisis crítico para la seguridad, depuración profunda |
# Patrón: fallar ruidosamente con un valor de esfuerzo no válido en lugar de un valor predeterminado silencioso.
VALID_EFFORTS = {"low", "medium", "high", "max"}
def build_output_config(effort: str) -> dict:
if effort not in VALID_EFFORTS:
raise ValueError(f"Unknown effort level: {effort!r}")
return {"effort": effort}Validar la cadena de effort antes de que llegue a la llamada a la API detecta errores tipográficos ("med" en lugar de "medium") en el sitio de la llamada en lugar de como un error de solicitud opaco.
effort max en todas partes "para estar seguro". Esto infla el costo y la latencia en toda tu aplicación; la mayoría de las solicitudes no lo necesitan. Solución: asigna el effort al tipo de tarea deliberadamente, reserva max para llamadas de alto riesgo genuinas.effort controla si aparece un bloque thinking. El effort controla la profundidad y el costo, no la visibilidad; ese es el trabajo de la configuración thinking. Solución: establece explícitamente tanto thinking como output_config.effort cuando necesites tanto la autocalibración como un límite de costo.effort más alto. Los niveles high y max pueden ralentizar significativamente un punto final orientado al usuario. Solución: compara la latencia p50 y p95 en cada nivel de effort candidato con tu tráfico real antes de elegir uno.effort para una carga de trabajo mixta. Un único punto final que atiende solicitudes triviales y complejas desperdicia presupuesto en las fáciles o atiende insuficientemente las difíciles. Solución: dirige el effort por solicitud utilizando un clasificador ascendente barato o una sugerencia explícita proporcionada por el llamador.effort en muy pocos prompts de prueba. El impacto en la calidad del effort es más visible en tareas genuinamente difíciles; probar solo con prompts fáciles oculta la diferencia. Solución: crea un conjunto de evaluación que incluya tus casos más difíciles del mundo real antes de decidir un valor predeterminado.effort no válida y solo descubrirlo en el momento de la solicitud. Un error tipográfico como "med" para "medium" aparece como un error de API en lo profundo de una ruta de solicitud. Solución: valida la cadena con el conjunto conocido de niveles antes de construir la solicitud.| Alternativa | Cuándo usar | Cuándo no usar |
|---|---|---|
Nivel de effort único fijo para toda la aplicación | La carga de trabajo es uniforme en dificultad | Las solicitudes varían ampliamente en complejidad o riesgo |
effort por solicitud pasado por el llamador | Diferentes superficies de producto tienen diferentes necesidades de costo/calidad | No puedes confiar en la entrada del llamador o necesitas un control de costos centralizado |
effort dirigido por un clasificador ascendente | Alto volumen de solicitudes con dificultad mixta y necesidad de ajuste automático | El tráfico es lo suficientemente bajo como para que el mapeo manual sea más simple y barato de mantener |
low, medium, high y max, pasados como una cadena bajo output_config={"effort": "<level>"}.
No siempre. Aumenta el presupuesto de razonamiento que Claude puede usar, lo que tiende a ayudar en tareas genuinamente difíciles, pero agrega poco valor en las simples, mientras que sigue costando más.
No. thinking controla si y cómo ocurre el razonamiento de forma adaptativa y se muestra; effort controla la profundidad a la que se permite que llegue ese razonamiento y su límite de costo. Son independientes y generalmente se usan juntos.
medium es un punto de partida razonable para las respuestas de asistentes de propósito general, luego ajusta hacia arriba o hacia abajo por tipo de tarea según la calidad y el costo medidos.
effort = EFFORT_BY_TASK_TYPE.get(task_type, "medium")
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
output_config={"effort": effort},
messages=[{"role": "user", "content": prompt}],
)Sí. Los niveles de effort más altos generalmente tardan más en completarse, ya que Claude realiza más trabajo de razonamiento antes de producir la respuesta final.
No necesariamente. Puedes mantener thinking={"type": "adaptive"} con un effort bajo; Claude seguirá decidiendo por prompt si se justifica algún razonamiento, solo que limitado a una profundidad menor.
Sí, conceptualmente, ya que la capacidad de razonamiento base de cada modelo difiere (Fable 5, Opus 4.8, Sonnet 5, Haiku 4.5), el mismo nivel de effort no produce una profundidad o costo idénticos entre los modelos.
La solicitud falla con un error de API. Valida el valor con el conjunto conocido (low, medium, high, max) en tu propio código antes de enviarlo, para que los fallos aparezcan en el sitio de la llamada en lugar de en lo profundo de una ruta de solicitud.
No necesariamente. El effort high suele ser suficiente para la revisión de código rutinaria; reserva max para diferencias particularmente complejas o de alto riesgo donde el costo adicional se justifica por el riesgo de un problema pasado por alto.
En la mayoría de las aplicaciones, mantén el effort como una decisión del lado del servidor vinculada al tipo de tarea o la lógica de enrutamiento interna, en lugar de exponerlo directamente a los usuarios finales, para mantener el costo predecible.
thinking y effort.effort.effort junto con el thinking y las imágenes.effort en producción.Versiones de la pila: Escrito para 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 de
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.
Revisado por Chris St. John·Última actualización: 16 jul 2026