Was this page helpful?
This feature is eligible for Zero Data Retention (ZDR). When your organization has a ZDR arrangement, data sent through this feature is not stored after the API response is returned.
I budget di attività ti permettono di dire a Claude quanti token ha a disposizione per un ciclo agenziale completo, incluso il pensiero, le chiamate agli strumenti, i risultati degli strumenti e l'output. Il modello vede un conto alla rovescia in tempo reale e lo utilizza per dare priorità al lavoro e terminare elegantemente man mano che il budget viene consumato.
I budget di attività sono in beta pubblica su Claude Opus 4.7. Imposta l'intestazione beta task-budgets-2026-03-13 per aderire.
I budget di attività funzionano meglio per i flussi di lavoro agenziali in cui Claude effettua più chiamate agli strumenti e decisioni prima di finalizzare l'output in attesa della prossima risposta umana. Utilizzali quando:
I budget di attività completano il parametro effort: effort controlla quanto accuratamente Claude ragiona su ogni passaggio, mentre i budget di attività limitano il lavoro totale che Claude può fare in un ciclo agenziale.
Aggiungi task_budget a output_config e includi l'intestazione beta:
L'oggetto task_budget ha tre campi:
type: sempre "tokens".total: il numero di token che Claude può spendere in tutto il ciclo agenziale, incluso il pensiero, le chiamate agli strumenti, i risultati degli strumenti e l'output.remaining (opzionale): il resto del budget trasportato da una richiesta precedente. Predefinito a total quando omesso.Claude vede un marcatore di conto alla rovescia del budget iniettato lato server durante tutta la conversazione. Il marcatore mostra quanti token rimangono nel ciclo agenziale corrente e si aggiorna man mano che il modello genera pensiero, chiamate agli strumenti e output, e mentre elabora i risultati degli strumenti. Claude utilizza questo segnale per regolare il ritmo e terminare elegantemente man mano che il budget viene consumato.
Il conto alla rovescia riflette i token che Claude ha elaborato nel ciclo agenziale corrente, non i token che reinvii tra i turni. Se il tuo client invia la cronologia completa della conversazione su ogni richiesta di follow-up, il tuo conteggio dei token lato client potrebbe differire dal budget che Claude sta tracciando. Se decrementi anche remaining mentre reinvii la cronologia completa, il modello vede un budget sottodichiarato e il conto alla rovescia scende più velocemente di quanto dovrebbe, causando a Claude di concludere prima di quanto il budget effettivamente consente. Imposta un budget generoso e lascia che il modello si autoregoli rispetto al conto alla rovescia lato server piuttosto che cercare di specchiarlo lato client.
Il budget di attività conta quello che Claude vede (pensiero, chiamate agli strumenti e risultati, e testo), non quello che è nel tuo payload di richiesta. In un ciclo agenziale il tuo client reinvia la conversazione completa su ogni richiesta, quindi il payload cresce turno dopo turno, ma il budget si decrementa solo dai token che Claude vede questo turno.
Considera un ciclo con task_budget: {type: "tokens", total: 100000} e un singolo strumento bash.
Turno 1. Invii la richiesta iniziale:
{
"messages": [
{ "role": "user", "content": "Audit this repo for security issues and report findings." }
]
}Claude pensa, quindi emette una chiamata agli strumenti e si ferma con 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" }
}
]
}Supponiamo che questo turno dell'assistente (pensiero più la chiamata agli strumenti) totalizzi 5.000 token generati. Il conto alla rovescia che Claude ha visto durante la generazione è terminato vicino a remaining ≈ 95.000.
Turno 2. Il tuo client esegue lo strumento, quindi reinvia la cronologia completa con il risultato dello strumento aggiunto:
{
"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>"
}
]
}
]
}I messaggi dell'utente e dell'assistente del turno 1 reinviati non vengono conteggiati di nuovo, ma il risultato dello strumento di 2.800 token è nuovo contenuto che Claude vede questo turno e conta rispetto al budget. Claude spende altri 4.000 token su pensiero e una seconda chiamata agli strumenti (grep -rn "eval(" src/). Il conto alla rovescia termina vicino a remaining ≈ 88.200.
Turno 3. Cronologia completa reinviata di nuovo con il secondo risultato dello strumento (1.200 token di output grep) aggiunto. Claude scrive un rapporto di risultati finali di 6.000 token e si ferma con stop_reason: "end_turn". remaining ≈ 81.000.
Mettendo i tre turni uno accanto all'altro rende esplicita la distinzione tra la dimensione del payload e la spesa di budget:
| Turno | Payload della richiesta (circa token di input che hai inviato) | Token conteggiati rispetto al budget questo turno | Budget remaining dopo |
|---|---|---|---|
| 1 | ~20 | 5.000 (pensiero + tool_use) | ~95.000 |
| 2 | ~7.800 (cronologia turno 1 + risultato dello strumento) | 6.800 (2.800 risultato dello strumento + 4.000 pensiero e tool_use) | ~88.200 |
| 3 | ~13.000 (cronologia completa + secondo risultato dello strumento) | 7.200 (1.200 risultato dello strumento + 6.000 text) | ~81.000 |
| Totale | ~20.820 inviati tra le richieste | 19.000 conteggiati rispetto al budget | — |
Il tuo client ha inviato il messaggio dell'utente del turno 1 tre volte e il messaggio dell'assistente del turno 1 due volte, ma ognuno è stato conteggiato una volta. Il budget ha speso 19.000 di 100.000 token, anche se il payload cumulativo che il tuo client ha trasmesso era più grande e l'input memorizzato nella cache del prompt sui turni 2 e 3 era ancora più grande.
remainingSe il tuo ciclo agenziale compatta o riscrive il contesto tra le richieste (ad esempio, riassumendo i turni precedenti), il server non ha memoria di quanto budget è stato speso prima della compattazione. Passa remaining sulla richiesta successiva in modo che il conto alla rovescia continui da dove era rimasto piuttosto che ripristinarsi a total:
Per i cicli che reinviano la cronologia completa non compattata su ogni turno, ometti remaining e lascia che il server traccia il conto alla rovescia.
I budget di attività sono un suggerimento soft, non un limite rigido. Claude potrebbe occasionalmente superare il budget se è nel mezzo di un'azione che sarebbe più dirompente interrompere che completare. Il limite applicato sul totale dei token di output è ancora max_tokens, che tronca la risposta con stop_reason: "max_tokens" quando raggiunto.
Per un limite rigido su costo o latenza, combina i budget di attività con un valore max_tokens ragionevole:
task_budget per dare a Claude un obiettivo su cui regolare il ritmo.max_tokens come il limite assoluto che previene la generazione incontrollata.Poiché task_budget copre l'intero ciclo agenziale (potenzialmente molte richieste) mentre max_tokens limita ogni singola richiesta, i due valori sono indipendenti; uno non è richiesto di essere a o sotto l'altro.
Un budget troppo piccolo per l'attività può causare un comportamento simile a un rifiuto. Quando Claude vede un budget che è chiaramente insufficiente per il lavoro richiesto (ad esempio, un budget di 20.000 token per un'attività di codifica agenziale di più ore), potrebbe rifiutarsi di tentare l'attività del tutto, ridurla aggressivamente, o fermarsi presto con un risultato parziale piuttosto che iniziare un lavoro che non può completare. Se osservi rifiuti inaspettati o arresti prematuri dopo aver impostato un budget, aumenta il budget prima di eseguire il debug di altri parametri. Dimensiona i budget rispetto alla tua effettiva distribuzione della lunghezza dell'attività piuttosto che a un valore predefinito fisso; vedi Scelta di un budget.
Il budget giusto dipende da quanto lavoro il tuo ciclo agenziale attualmente fa. Piuttosto che indovinare, misura il tuo utilizzo di token esistente prima e poi sintonizzati da lì.
Esegui un campione rappresentativo di attività senza task_budget impostato e registra i token totali che Claude spende per attività. Per un ciclo agenziale, somma usage.output_tokens più token di pensiero e risultati degli strumenti su ogni richiesta nel ciclo:
Esegui questo su un insieme rappresentativo di attività e registra la distribuzione. Inizia con il p99 della tua spesa di token per attività per capire come fornire al modello un budget di attività potrebbe modificare il comportamento del modello, quindi testa su o giù secondo le necessità.
Il task_budget.total minimo accettato è 20.000 token; i valori al di sotto del minimo restituiscono un errore 400.
max_tokens: Ortogonale ai budget di attività. max_tokens è un limite rigido per richiesta sui token generati, mentre task_budget è un limite consigliato su tutto il ciclo agenziale (potenzialmente coprendo molte richieste). A xhigh o max effort, imposta max_tokens ad almeno 64k per dare a Claude spazio per pensare e agire su ogni richiesta.task_budget.remaining su ogni richiesta di follow-up, il valore modificato invalida qualsiasi prefisso della cache che lo contiene. Per preservare la memorizzazione nella cache, imposta il budget una volta sulla richiesta iniziale e lascia che il modello si autoregoli rispetto al conto alla rovescia lato server piuttosto che mutare il budget lato client.| Modello | Supporto |
|---|---|
| Claude Opus 4.7 | Beta pubblica (imposta l'intestazione task-budgets-2026-03-13) |
| Claude Opus 4.6 | Non supportato |
| Claude Sonnet 4.6 | Non supportato |
| Claude Haiku 4.5 | Non supportato |
I budget di attività non sono supportati su Claude Code o superfici Cowork al lancio. Usa i budget di attività direttamente tramite l'API Messages su Claude Opus 4.7.
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-4-7",
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"],
)output_config = {
"effort": "high",
"task_budget": {
"type": "tokens",
"total": 128000,
"remaining": 128000 - tokens_spent_so_far,
},
}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:
response = client.beta.messages.create(
model="claude-opus-4-7",
max_tokens=128000,
messages=messages,
tools=tools,
betas=["task-budgets-2026-03-13"],
)
# Count what Claude generated this turn (output covers text + thinking + tool calls).
# Tool-result tokens also count against the budget; add the token count of the
# tool_result blocks you append below if you want client-side tracking to match
# the server-side countdown.
total_spend += response.usage.output_tokens
if response.stop_reason == "end_turn":
return total_spend
# Append the assistant turn and your tool results, then continue the loop.
messages += [
{"role": "assistant", "content": response.content},
{"role": "user", "content": run_tools(response.content)},
]