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.
Resumen
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.
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,
output_config={"effort": "medium"},
messages=[{"role": "user", "content": "Summarize this customer support thread."}],
)
print(response.content[-1].text)Cuándo usar esto:
- Puntos finales de alto volumen y sensibles a la latencia donde un
effortlowmantiene el costo predecible. - Revisión de código, planificación o tareas críticas para la seguridad donde un
efforthighomaxvale la pena el costo. - Pruebas A/B de la calidad versus las compensaciones de costos en los niveles de
effortpara el mismo prompt. - Dirigir el
effortdinámicamente según el tipo de solicitud en lugar de una única configuración fija. - Limitar el costo de razonamiento descontrolado en una carga de trabajo que anteriormente no tenía un límite de
effort.
Ejemplo de trabajo
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:
- Una tabla de búsqueda que asigna el tipo de tarea a un nivel de
effort, evitando una única configuración codificada en toda la aplicación. - Emparejar
thinking={"type": "adaptive"}con un límite deeffortexplícito, las dos configuraciones se componen limpiamente. - Volver a
"medium"para tipos de tareas no reconocidos en lugar de fallar. - Extraer solo el bloque
text, ignorando cualquier bloquethinkingpara los propósitos de este sitio de llamada. - Aplicar el
effortmaxespecíficamente al tipo de tarea de mayor riesgo, el análisis de la causa raíz de un incidente.
Análisis detallado
Cómo funciona
output_config={"effort": "<level>"}establece un límite en la cantidad de computación de razonamiento que Claude aplica antes de responder.- Los niveles se ordenan
low,medium,high,max, de más rápido y barato a más exhaustivo y caro. - El
effortse aplica independientemente de si el bloquethinkinges visible; rige el presupuesto de razonamiento subyacente, no solo su visualización. - Aumentar el
effortgeneralmente aumenta tanto el recuento de tokens de salida (cuando elthinkinges visible) como la latencia, ya que Claude realiza más trabajo interno por solicitud. - El
effortse compone conthinking: elthinkingadaptativo decide si el razonamiento ocurre en absoluto para un prompt dado, eleffortlimita la profundidad a la que llega cuando lo hace.
Niveles de esfuerzo de un vistazo
| 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 |
Notas de Python
# 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.
Errores comunes
- Establecer el
effortmaxen 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 eleffortal tipo de tarea deliberadamente, reservamaxpara llamadas de alto riesgo genuinas. - Asumir que el
effortcontrola si aparece un bloquethinking. Eleffortcontrola la profundidad y el costo, no la visibilidad; ese es el trabajo de la configuraciónthinking. Solución: establece explícitamente tantothinkingcomooutput_config.effortcuando necesites tanto la autocalibración como un límite de costo. - No medir el impacto de la latencia antes de implementar un nivel de
effortmás alto. Los niveleshighymaxpueden ralentizar significativamente un punto final orientado al usuario. Solución: compara la latencia p50 y p95 en cada nivel deeffortcandidato con tu tráfico real antes de elegir uno. - Codificar un nivel de
effortpara 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 eleffortpor solicitud utilizando un clasificador ascendente barato o una sugerencia explícita proporcionada por el llamador. - Comparar los niveles de
efforten muy pocos prompts de prueba. El impacto en la calidad deleffortes 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. - Pasar una cadena de
effortno 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.
Alternativas
| 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 |
Preguntas frecuentes
¿Qué valores acepta el parámetro effort?
low, medium, high y max, pasados como una cadena bajo output_config={"effort": "<level>"}.
¿Un nivel de effort más alto garantiza una mejor respuesta?
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.
¿Es effort lo mismo que la configuración thinking?
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.
¿Cuál es un nivel de effort predeterminado sensible para un asistente de chat general?
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.
¿Cómo elijo el effort por solicitud en lugar de una única configuración global?
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}],
)¿El effort afecta la latencia?
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.
¿Las solicitudes de bajo effort deberían omitir la configuración thinking por completo?
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.
¿Puede el nivel de effort diferir entre los modelos de la línea?
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.
¿Qué sucede si paso una cadena de effort no válida?
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.
¿Vale la pena el effort max para cada tarea de revisión de código?
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.
¿Debería el nivel de effort exponerse a los usuarios finales o mantenerse en el lado del servidor?
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.
Relacionado
- Pensamiento extendido y el parámetro Effort explicados - la relación conceptual entre
thinkingyeffort. - Habilitar el pensamiento adaptativo con thinking: {type: 'adaptive'} - la configuración complementaria con la que se empareja el
effort. - Niveles de esfuerzo y opciones de visualización de pensamiento: referencia - una tabla de referencia completa para cada nivel.
- Pensamiento extendido, esfuerzo y conceptos básicos multimodales - ejemplos mínimos que cubren el
effortjunto con elthinkingy las imágenes. - Pensamiento extendido, esfuerzo y mejores prácticas multimodales - prácticas numeradas para ajustar el
efforten 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.