Ajustando o Parâmetro effort para Custo e Velocidade
O parâmetro effort define quanta profundidade de raciocínio o Claude aplica a uma requisição, permitindo que você troque qualidade por custo e velocidade em uma base por chamada.
Resumo
Toda requisição tem um orçamento implícito de custo e latência.
O parâmetro effort, passado em output_config, oferece uma alavanca direta sobre esse orçamento.
Menor effort favorece velocidade e custo, maior effort favorece completude.
Isso é distinto da configuração thinking, que controla se o raciocínio é adaptativo e visível.
As duas configurações se compõem, então um sistema de produção bem ajustado geralmente define ambas deliberadamente em vez de deixar qualquer uma no padrão.
Receita
Cartão de receita de referência rápida - pronto para copiar e colar.
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
output_config={"effort": "medium"},
messages=[{"role": "user", "content": "Resuma este thread de suporte ao cliente."}],
)
print(response.content[-1].text)Quando usar isso:
- Endpoints de alto volume e sensíveis à latência onde o
effortlowmantém o custo previsível. - Revisão de código, planejamento ou tarefas críticas de segurança onde
highoumaxeffortvale o custo. - Teste A/B de qualidade versus trade-offs de custo entre níveis de
effortpara o mesmo prompt. - Roteamento de
effortdinamicamente com base no tipo de requisição em vez de uma única configuração fixa. - Limitação de custo de raciocínio descontrolado em uma carga de trabalho que anteriormente não tinha um teto de
effort.
Exemplo de Trabalho
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 = "Usuário relata 502s intermitentes no checkout, começou após o deploy da noite passada."
result = run_task("incident_root_cause", ticket)
print(result)O que isso demonstra:
- Uma tabela de consulta que mapeia o tipo de tarefa para um nível de
effort, evitando uma única configuração codificada em toda a aplicação. - Emparelhamento de
thinking={"type": "adaptive"}com um teto deeffortexplícito, as duas configurações se compondo de forma limpa. - Retorno para
"medium"para tipos de tarefa não reconhecidos em vez de falhar. - Extração apenas do bloco
text, ignorando qualquer blocothinkingpara os propósitos deste local de chamada. - Aplicação de
effortmaxespecificamente para o tipo de tarefa de maior risco, análise de causa raiz de incidentes.
Mergulho Profundo
Como Funciona
output_config={"effort": "<level>"}define um teto para quanta computação de raciocínio o Claude aplica antes de responder.- Os níveis são ordenados
low,medium,high,max, do mais rápido e barato ao mais completo e caro. - O
effortse aplica independentemente de o blocothinkingser visível; ele governa o orçamento de raciocínio subjacente, não apenas sua exibição. - Aumentar o
effortgeralmente aumenta tanto o número de tokens de saída (quando othinkingé visível) quanto a latência, pois o Claude faz mais trabalho interno por requisição. - O
effortse compõe comthinking: othinkingadaptativo decide se o raciocínio acontece ou não para um determinado prompt; oeffortlimita o quão profundo ele vai quando acontece.
Níveis de Effort em Resumo
| Nível | Velocidade | Custo | Melhor ajuste |
|---|---|---|---|
low | Mais rápido | Mais baixo | Classificação, extração, consultas curtas |
medium | Equilibrado | Moderado | Respostas gerais de assistente, sumarização |
high | Mais lento | Mais alto | Revisão de código, planejamento multi-etapas |
max | Mais lento | Mais alto | Análise crítica de segurança, depuração profunda |
Notas de Python
# Padrão: falhar ruidosamente em um valor de effort inválido em vez de usar o padrão silenciosamente.
VALID_EFFORTS = {"low", "medium", "high", "max"}
def build_output_config(effort: str) -> dict:
if effort not in VALID_EFFORTS:
raise ValueError(f"Nível de effort desconhecido: {effort!r}")
return {"effort": effort}Validar a string de effort antes que ela chegue à chamada da API captura erros de digitação ("med" em vez de "medium") no local da chamada em vez de como um erro de requisição opaco.
Armadilhas
- Definir
effortmaxem todos os lugares "para garantir." Isso infla o custo e a latência em toda a sua aplicação; a maioria das requisições não precisa disso. Correção: mapeie oeffortpara o tipo de tarefa deliberadamente, reservemaxpara chamadas genuinamente de alto risco. - Assumir que
effortcontrola se um bloco dethinkingaparece. Oeffortcontrola a profundidade e o custo, não a visibilidade; essa é a função da configuraçãothinking. Correção: defina explicitamentethinkingeoutput_config.effortquando precisar de auto-calibração e um teto de custo. - Não medir o impacto da latência antes de enviar um nível de
effortmais alto.highemaxpodem desacelerar significativamente um endpoint voltado para o usuário. Correção: compare a latência p50 e p95 em cada nível deeffortcandidato com seu tráfego real antes de escolher um. - Codificar um único nível de
effortpara uma carga de trabalho mista. Um único endpoint que atende tanto a requisições triviais quanto complexas desperdiça orçamento nas fáceis ou atende inadequadamente às difíceis. Correção: roteie oeffortpor requisição usando um classificador upstream barato ou uma dica explícita fornecida pelo chamador. - Comparar níveis de
effortem poucos prompts de teste. O impacto da qualidade doefforté mais visível em tarefas genuinamente difíceis; testar apenas em prompts fáceis esconde a diferença. Correção: crie um conjunto de avaliação que inclua seus casos mais difíceis do mundo real antes de decidir sobre um padrão. - Passar uma string de
effortinválida e descobri-la apenas no momento da requisição. Um erro de digitação como"med"para"medium"aparece como um erro de API no meio de um caminho de requisição. Correção: valide contra o conjunto conhecido de níveis antes de construir a requisição.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Nível de effort fixo único para toda a aplicação | A carga de trabalho é uniforme em dificuldade | Requisições variam amplamente em complexidade ou riscos |
| Effort por requisição passado pelo chamador | Diferentes superfícies de produto têm diferentes necessidades de custo/qualidade | Você não pode confiar na entrada do chamador ou precisa de controle de custo centralizado |
| Effort roteado por um classificador upstream | Alto volume de requisições com dificuldade mista e necessidade de ajuste automático | O tráfego é baixo o suficiente para que o mapeamento manual seja mais simples e barato de manter |
FAQs
Quais valores o parâmetro effort aceita?
low, medium, high e max, passados como string em output_config={"effort": "<level>"}.
Um nível de effort mais alto garante uma resposta melhor?
Nem sempre. Ele aumenta o orçamento de raciocínio que o Claude pode usar, o que tende a ajudar em tarefas genuinamente difíceis, mas agrega pouco valor em tarefas simples, enquanto ainda custa mais.
Effort é o mesmo que a configuração thinking?
Não. thinking controla se e como o raciocínio adaptativo acontece e é mostrado; effort controla o quão profundo esse raciocínio pode ir e seu teto de custo. Eles são independentes e tipicamente usados juntos.
Qual é um nível de effort padrão sensato para um assistente de chat geral?
medium é um ponto de partida razoável para respostas de assistente de propósito geral, depois ajuste para cima ou para baixo por tipo de tarefa com base na qualidade e custo medidos.
Como escolho o effort por requisição em vez de uma única configuração 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}],
)Effort afeta a latência?
Sim. Níveis de effort mais altos geralmente levam mais tempo para serem concluídos, pois o Claude realiza mais trabalho de raciocínio antes de produzir a resposta final.
Requisições de baixo effort devem pular completamente a configuração thinking?
Não necessariamente. Você pode manter thinking={"type": "adaptive"} com effort baixo; o Claude ainda decidirá por prompt se algum raciocínio é necessário, apenas limitado a uma profundidade menor.
O nível de effort pode diferir entre os modelos da linha?
Sim, conceitualmente, pois a capacidade de raciocínio base de cada modelo difere (Fable 5, Opus 4.8, Sonnet 5, Haiku 4.5), o mesmo nível de effort não produz profundidade ou custo idênticos entre os modelos.
O que acontece se eu passar uma string de effort inválida?
A requisição falha com um erro de API. Valide o valor contra o conjunto conhecido (low, medium, high, max) em seu próprio código antes de enviá-lo, para que as falhas apareçam no local da chamada em vez de no meio de um caminho de requisição.
Vale a pena o effort max para toda tarefa de revisão de código?
Não necessariamente. O effort high é frequentemente suficiente para revisão de código rotineira; reserve max para diffs particularmente de alto risco ou complexos onde o custo extra é justificado pelo risco de um problema não detectado.
O nível de effort deve ser exposto aos usuários finais ou mantido no lado do servidor?
Na maioria das aplicações, mantenha o effort como uma decisão do lado do servidor ligada ao tipo de tarefa ou à lógica de roteamento interna, em vez de expô-lo diretamente aos usuários finais, para manter o custo previsível.
Relacionados
- Extended Thinking e o Parâmetro Effort Explicados - a relação conceitual entre
thinkingeeffort. - Habilitando Thinking Adaptativo com thinking: {type: 'adaptive'} - a configuração complementar com a qual o
effortse emparelha. - Níveis de Effort e Opções de Exibição de Thinking - Referência - uma tabela de referência completa para cada nível.
- Fundamentos de Extended Thinking, Effort & Multimodal - exemplos mínimos cobrindo
effortjunto comthinkinge imagens. - Melhores Práticas de Extended Thinking, Effort & Multimodal - práticas numeradas para ajustar o
effortem produção.
Versões da Stack: Escrito contra a linha de modelos Claude atual em ~junho de 2026 - Claude Fable 5, Claude Opus 4.8, Claude Sonnet 5 (o padrão) e Claude Haiku 4.5 - e o SDK oficial
anthropicpara Python (última versão 0.x). Nomes de modelos, versões de SDK e preços mudam rapidamente - verifique os detalhes atuais em platform.claude.com/docs antes de confiar neles.