Este recurso é elegível para Zero Data Retention (ZDR). Quando sua organização possui um acordo de ZDR, os dados enviados por meio deste recurso não são armazenados após a resposta da API ser retornada.
Os "task budgets" (orçamentos de tarefa) permitem que você informe ao Claude quantos tokens ele tem para um loop agêntico completo, incluindo pensamento, chamadas de ferramentas, resultados de ferramentas e saída. O modelo vê uma contagem regressiva em andamento e a usa para priorizar o trabalho e finalizar de forma elegante à medida que o orçamento é consumido.
Os orçamentos de tarefa estão em beta no Claude Fable 5, Claude Mythos 5, Claude Opus 4.8 e Claude Opus 4.7. Defina o cabeçalho beta task-budgets-2026-03-13 para ativar.
Os orçamentos de tarefa funcionam melhor para fluxos de trabalho agênticos em que Claude faz várias chamadas de ferramentas e decisões antes de finalizar sua saída para aguardar a próxima resposta humana. Use-os quando:
Os orçamentos de tarefa complementam o parâmetro effort: effort controla o quão minuciosamente Claude raciocina sobre cada etapa, enquanto os orçamentos de tarefa limitam o trabalho total que Claude pode fazer ao longo de um loop agêntico.
Adicione task_budget a output_config e inclua o cabeçalho beta:
client = anthropic.Anthropic()
with client.beta.messages.stream(
model="claude-opus-4-8",
max_tokens=128000,
output_config={
"effort": "high",
"task_budget": {"type": "tokens", "total": 64000},
},
messages=[
{"role": "user", "content": "Review the codebase and propose a refactor plan."}
],
betas=["task-budgets-2026-03-13"],
) as stream:
response = stream.get_final_message()
print(response.usage)O objeto task_budget tem três campos:
type: sempre "tokens".total: o número de tokens que Claude pode gastar ao longo do loop agêntico, incluindo pensamento, chamadas de ferramentas, resultados de ferramentas e saída.remaining (opcional): o restante do orçamento transferido de uma requisição anterior. O padrão é total quando omitido.Claude vê um marcador de contagem regressiva do orçamento injetado no lado do servidor ao longo da conversa. O marcador mostra quantos tokens restam no loop agêntico atual e é atualizado à medida que o modelo gera pensamento, chamadas de ferramentas e saída, e à medida que processa resultados de ferramentas. Claude usa esse sinal para controlar seu ritmo e finalizar de forma elegante à medida que o orçamento é consumido.
A contagem regressiva é visível apenas para o modelo. As respostas da API não incluem um campo de orçamento restante: não há informações de task_budget no objeto usage da resposta, e os SDKs não têm um acessor para isso. Para rastrear o gasto no lado do cliente, some o uso de tokens entre as requisições do seu loop, conforme mostrado em Meça seu uso atual, ou passe seu próprio valor adiante com remaining ao transferir um orçamento através de compactação.
A contagem regressiva reflete os tokens que Claude processou no loop agêntico atual, não os tokens que você reenvia entre turnos. Se o seu cliente envia o histórico completo da conversa em cada requisição de acompanhamento, sua contagem de tokens no lado do cliente pode diferir do orçamento que Claude está rastreando. Se você também decrementar remaining enquanto reenvia o histórico completo, o modelo vê um orçamento subnotificado e a contagem regressiva cai mais rápido do que deveria, fazendo com que Claude encerre mais cedo do que o orçamento realmente permite. Defina um orçamento generoso e deixe o modelo se autorregular em relação à contagem regressiva, em vez de tentar espelhá-la no lado do cliente.
O orçamento de tarefa conta o que Claude vê (pensamento, chamadas e resultados de ferramentas, e texto), não o que está no payload da sua requisição. Em um loop agêntico, seu cliente reenvia a conversa completa em cada requisição, então o payload cresce turno a turno, mas o orçamento só é decrementado pelos tokens que Claude vê neste turno.
Considere um loop com task_budget: {type: "tokens", total: 100000} e uma única ferramenta bash.
Turno 1. Você envia a requisição inicial:
{
"messages": [
{ "role": "user", "content": "Audit this repo for security issues and report findings." }
]
}Claude pensa, depois emite uma chamada de ferramenta e para com stop_reason: "tool_use":
{
"role": "assistant",
"content": [
{
"type": "thinking",
"thinking": "I'll start by listing dependencies to look for known-vulnerable packages..."
},
{
"type": "tool_use",
"id": "toolu_01",
"name": "bash",
"input": { "command": "cat package.json && npm audit --json" }
}
]
}Suponha que este turno do assistente (pensamento mais a chamada de ferramenta) totalize 5.000 tokens gerados. A contagem regressiva que Claude viu durante a geração terminou perto de remaining ≈ 95.000.
Turno 2. Seu cliente executa a ferramenta e, em seguida, reenvia o histórico completo com o resultado da ferramenta anexado:
{
"messages": [
{ "role": "user", "content": "Audit this repo for security issues and report findings." },
{
"role": "assistant",
"content": [
{ "type": "thinking", "thinking": "I'll start by listing dependencies..." },
{
"type": "tool_use",
"id": "toolu_01",
"name": "bash",
"input": { "command": "cat package.json && npm audit --json" }
}
]
},
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_01",
"content": "<2,800 tokens of npm audit output>"
}
]
}
]
}As mensagens de usuário e assistente do turno 1 reenviadas não são contadas novamente, mas o resultado de ferramenta de 2.800 tokens é conteúdo novo que Claude vê neste turno e conta contra o orçamento. Claude gasta mais 4.000 tokens em pensamento e uma segunda chamada de ferramenta (grep -rn "eval(" src/). A contagem regressiva termina perto de remaining ≈ 88.200.
Turno 3. Histórico completo reenviado novamente com o segundo resultado de ferramenta (1.200 tokens de saída do grep) anexado. Claude escreve um relatório final de descobertas de 6.000 tokens e para com stop_reason: "end_turn". remaining ≈ 81.000.
Colocar os três turnos lado a lado torna explícita a distinção entre o tamanho do payload e o gasto do orçamento:
| Turno | Payload da requisição (tokens de entrada aproximados que você enviou) | Tokens contados contra o orçamento neste turno | remaining do orçamento depois |
|---|---|---|---|
| 1 | ~20 | 5.000 (pensamento + tool_use) | ~95.000 |
| 2 | ~7.800 (histórico do turno 1 + resultado da ferramenta) | 6.800 (2.800 de resultado da ferramenta + 4.000 de pensamento e tool_use) | ~88.200 |
| 3 | ~13.000 (histórico completo + segundo resultado da ferramenta) | 7.200 (1.200 de resultado da ferramenta + 6.000 de text) | ~81.000 |
| Total | ~20.820 enviados entre as requisições | 19.000 contados contra o orçamento | N/A |
Seu cliente enviou a mensagem de usuário do turno 1 três vezes e a mensagem do assistente do turno 1 duas vezes, mas cada uma foi contada uma vez. O orçamento gastou 19.000 de 100.000 tokens, embora o payload cumulativo que seu cliente transmitiu tenha sido maior e a entrada com cache de prompt nos turnos 2 e 3 tenha sido ainda maior.
remainingSe o seu loop agêntico compacta ou reescreve o contexto entre requisições (por exemplo, resumindo turnos anteriores), o servidor não tem memória de quanto orçamento foi gasto antes da compactação. Passe remaining na próxima requisição para que a contagem regressiva continue de onde você parou, em vez de reiniciar para total:
output_config = {
"effort": "high",
"task_budget": {
"type": "tokens",
"total": 128000,
"remaining": 128000 - tokens_spent_so_far,
},
}Para loops que reenviam o histórico completo não compactado em cada turno, omita remaining e deixe o servidor rastrear a contagem regressiva.
Os orçamentos de tarefa são uma sugestão flexível, não um limite rígido. Claude pode ocasionalmente exceder o orçamento se estiver no meio de uma ação que seria mais disruptivo interromper do que concluir. O limite imposto sobre o total de tokens de saída continua sendo max_tokens, que trunca a resposta com stop_reason: "max_tokens" quando atingido.
Para um limite rígido de custo ou latência, combine orçamentos de tarefa com um valor razoável de max_tokens:
task_budget para dar ao Claude um alvo para controlar seu ritmo.max_tokens como o teto absoluto que impede geração descontrolada.Como task_budget abrange o loop agêntico completo (potencialmente muitas requisições) enquanto max_tokens limita cada requisição individual, os dois valores são independentes; um não precisa estar igual ou abaixo do outro.
Um orçamento pequeno demais para a tarefa pode causar comportamento semelhante a uma recusa. Quando Claude vê um orçamento que é claramente insuficiente para o trabalho solicitado (por exemplo, um orçamento de 20.000 tokens para uma tarefa de codificação agêntica de várias horas), ele pode se recusar a tentar a tarefa, reduzir seu escopo agressivamente ou parar cedo com um resultado parcial em vez de iniciar um trabalho que não pode concluir. Se você observar recusas inesperadas ou paradas prematuras após definir um orçamento, aumente o orçamento antes de depurar outros parâmetros. Dimensione os orçamentos com base na distribuição real do comprimento das suas tarefas, em vez de um padrão fixo; consulte Escolhendo um orçamento.
O orçamento certo depende de quanto trabalho seu loop agêntico faz atualmente. Em vez de adivinhar, meça primeiro seu uso de tokens existente e depois ajuste a partir daí.
Execute uma amostra representativa de tarefas sem task_budget definido e registre o total de tokens que Claude gasta por tarefa. Para um loop agêntico, some usage.output_tokens mais os tokens de pensamento e de resultados de ferramentas em todas as requisições do loop:
def run_task_and_count_tokens(messages: list) -> int:
"""Runs an agentic loop to completion and returns total tokens spent."""
total_spend = 0
while True:
with client.beta.messages.stream(
model="claude-opus-4-8",
max_tokens=128000,
messages=messages,
tools=tools,
betas=["task-budgets-2026-03-13"],
) as stream:
response = stream.get_final_message()
# Conta o que Claude gerou neste turno (a saída abrange texto + pensamento + chamadas de ferramentas).
# Os tokens de resultados de ferramentas também contam para o orçamento; some a contagem de tokens dos
# blocos tool_result que você anexa abaixo se quiser que o rastreamento no lado do cliente corresponda
# à contagem regressiva no lado do servidor.
total_spend += response.usage.output_tokens
if response.stop_reason == "end_turn":
return total_spend
# Anexe o turno do assistente e seus resultados de ferramentas e, em seguida, continue o loop.
messages += [
{"role": "assistant", "content": response.content},
{"role": "user", "content": run_tools(response.content)},
]Execute isso em um conjunto representativo de tarefas e registre a distribuição. Comece com o p99 do seu gasto de tokens por tarefa para entender como fornecer ao modelo um orçamento de tarefa pode modificar o comportamento do modelo, depois teste para cima ou para baixo conforme necessário.
O mínimo aceito para task_budget.total é 20.000 tokens; valores abaixo do mínimo retornam um erro 400.
max_tokens: Ortogonal aos orçamentos de tarefa. max_tokens é um limite rígido por requisição sobre tokens gerados, enquanto task_budget é um limite consultivo ao longo do loop agêntico completo (potencialmente abrangendo muitas requisições). Com effort xhigh ou max, defina max_tokens para pelo menos 64k para dar ao Claude espaço para pensar e agir em cada requisição.task_budget.remaining em cada requisição de acompanhamento, o valor alterado invalida qualquer prefixo de cache que o contenha. Para preservar o cache, defina o orçamento uma vez na requisição inicial e deixe o modelo se autorregular em relação à contagem regressiva do lado do servidor, em vez de alterar o orçamento no lado do cliente.| Modelo | Suporte |
|---|---|
| Claude Fable 5 | Beta (defina o cabeçalho task-budgets-2026-03-13) |
| Claude Mythos 5 | Beta (defina o cabeçalho task-budgets-2026-03-13) |
| Claude Sonnet 5 | Não suportado |
| Claude Opus 4.8 | Beta (defina o cabeçalho task-budgets-2026-03-13) |
| Claude Opus 4.7 | Beta (defina o cabeçalho task-budgets-2026-03-13) |
| Claude Opus 4.6 | Não suportado |
| Claude Sonnet 4.6 | Não suportado |
| Claude Haiku 4.5 | Não suportado |
Os orçamentos de tarefa não são suportados no Claude Code ou em superfícies do Cowork. Use orçamentos de tarefa diretamente através da Messages API em um modelo suportado.
Was this page helpful?