Mit „task budgets" (Task-Budgets) kannst du Claude mitteilen, wie viele Token es für eine vollständige agentische Schleife zur Verfügung hat, einschließlich Denken, Tool-Aufrufen, Tool-Ergebnissen und Ausgabe. Das Modell sieht einen laufenden Countdown und nutzt ihn, um Arbeit zu priorisieren und elegant abzuschließen, während das Budget verbraucht wird.
Task-Budgets eignen sich am besten für agentische Workflows, bei denen Claude mehrere Tool-Aufrufe und Entscheidungen trifft, bevor es seine Ausgabe finalisiert und auf die nächste menschliche Antwort wartet. Verwende sie, wenn:
Task-Budgets ergänzen den Effort-Parameter: Effort steuert, wie gründlich Claude über jeden Schritt nachdenkt, während Task-Budgets die Gesamtarbeit begrenzen, die Claude über eine agentische Schleife hinweg leisten kann.
Füge task_budget zu output_config hinzu und setze den Beta-Header:
client = anthropic.Anthropic()
with client.beta.messages.stream(
model="claude-opus-5",
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)Das task_budget-Objekt hat drei Felder:
type: immer "tokens".total: die Anzahl der Token, die Claude über die agentische Schleife hinweg ausgeben kann, einschließlich Denken, Tool-Aufrufen, Tool-Ergebnissen und Ausgabe.remaining (optional): der Budget-Rest, der von einer vorherigen Anfrage übernommen wurde. Standardmäßig total, wenn nicht angegeben.Claude sieht einen Budget-Countdown-Marker, der serverseitig während der gesamten Konversation eingefügt wird. Der Marker zeigt an, wie viele Token in der aktuellen agentischen Schleife verbleiben, und wird aktualisiert, während das Modell Denken, Tool-Aufrufe und Ausgabe generiert und Tool-Ergebnisse verarbeitet. Claude nutzt dieses Signal, um sein Tempo zu steuern und elegant abzuschließen, während das Budget verbraucht wird.
Das Task-Budget zählt, was Claude sieht (Denken, Tool-Aufrufe und -Ergebnisse sowie Text), nicht was in deinem Request-Payload steht. In einer agentischen Schleife sendet dein Client bei jeder Anfrage die vollständige Konversation erneut, sodass der Payload von Turn zu Turn wächst, aber das Budget wird nur um die Token dekrementiert, die Claude in diesem Turn sieht.
Betrachte eine Schleife mit task_budget: {type: "tokens", total: 100000} und einem einzelnen bash-Tool.
Turn 1. Du sendest die initiale Anfrage:
{
"messages": [
{ "role": "user", "content": "Audit this repo for security issues and report findings." }
]
}Claude denkt nach, gibt dann einen Tool-Aufruf aus und stoppt mit 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" }
}
]
}Angenommen, dieser Assistant-Turn (Denken plus Tool-Aufruf) umfasst insgesamt 5.000 generierte Token. Der Countdown, den Claude während der Generierung gesehen hat, endete bei remaining ≈ 95.000.
Turn 2. Dein Client führt das Tool aus und sendet dann den vollständigen Verlauf mit dem angehängten Tool-Ergebnis erneut:
{
"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>"
}
]
}
]
}Die erneut gesendeten User- und Assistant-Nachrichten aus Turn 1 werden nicht noch einmal gezählt, aber das 2.800-Token-Tool-Ergebnis ist neuer Inhalt, den Claude in diesem Turn sieht, und zählt gegen das Budget. Claude verbraucht weitere 4.000 Token für Denken und einen zweiten Tool-Aufruf (grep -rn "eval(" src/). Der Countdown endet bei remaining ≈ 88.200.
Turn 3. Vollständiger Verlauf erneut gesendet mit dem zweiten Tool-Ergebnis (1.200 Token grep-Ausgabe) angehängt. Claude schreibt einen 6.000-Token-Abschlussbericht und stoppt mit stop_reason: "end_turn". remaining ≈ 81.000.
Wenn man die drei Turns nebeneinander stellt, wird der Unterschied zwischen Payload-Größe und Budget-Verbrauch deutlich:
| Turn | Request-Payload (ca. Input-Token, die du gesendet hast) | Token, die in diesem Turn gegen das Budget gezählt wurden | Budget remaining danach |
|---|---|---|---|
| 1 | ~20 | 5.000 (Denken + tool_use) | ~95.000 |
| 2 | ~7.800 (Turn-1-Verlauf + Tool-Ergebnis) | 6.800 (2.800 Tool-Ergebnis + 4.000 Denken und tool_use) | ~88.200 |
| 3 | ~13.000 (vollständiger Verlauf + zweites Tool-Ergebnis) | 7.200 (1.200 Tool-Ergebnis + 6.000 text) | ~81.000 |
| Gesamt | ~20.820 über Anfragen gesendet | 19.000 gegen das Budget gezählt | N/A |
Dein Client hat die Turn-1-User-Nachricht dreimal und die Turn-1-Assistant-Nachricht zweimal gesendet, aber jede wurde nur einmal gezählt. Das Budget hat 19.000 von 100.000 Token verbraucht, obwohl der kumulative Payload, den dein Client übertragen hat, größer war und der prompt-gecachte Input in Turn 2 und 3 noch größer war.
remaining weiterführenWenn deine agentische Schleife zwischen Anfragen Kontext kompaktiert oder umschreibt (zum Beispiel durch Zusammenfassen früherer Turns), hat der Server keine Erinnerung daran, wie viel Budget vor der Kompaktierung verbraucht wurde. Übergib remaining bei der nächsten Anfrage, damit der Countdown dort fortgesetzt wird, wo du aufgehört hast, anstatt auf total zurückgesetzt zu werden:
# Vor der Kompaktierung verbrauchte Token, clientseitig erfasst
tokens_spent_so_far = 45000
output_config = {
"effort": "high",
"task_budget": {
"type": "tokens",
"total": 128000,
"remaining": 128000 - tokens_spent_so_far,
},
}Für Schleifen, die bei jedem Turn den vollständigen, nicht kompaktierten Verlauf erneut senden, lass remaining weg und lass den Server den Countdown verfolgen.
task_budget ist eine Einstellung auf Anfrageebene. Um das Budget mitten in einer Aufgabe zu ändern, zum Beispiel um es zu erweitern, wenn der Nutzer die Anfrage ausweitet, setze ein neues task_budget in output_config bei der nächsten Anfrage. Beachte die Caching-Konsequenz: Der Budget-Wert fließt in den gerenderten Prompt ein, sodass ein geänderter Wert nicht mit Cache-Einträgen übereinstimmt, die unter dem alten Wert erstellt wurden (siehe Feature-Unterstützung unten).
Task-Budgets sind ein weicher Hinweis, keine harte Obergrenze. Claude kann das Budget gelegentlich überschreiten, wenn es sich mitten in einer Aktion befindet, deren Unterbrechung störender wäre als ihr Abschluss. Das erzwungene Limit für die gesamten Output-Token ist weiterhin max_tokens, das die Antwort mit stop_reason: "max_tokens" abschneidet, wenn es erreicht wird.
Für eine harte Obergrenze bei Kosten oder Latenz kombiniere Task-Budgets mit einem angemessenen max_tokens-Wert:
task_budget, um Claude ein Ziel zu geben, an dem es sein Tempo ausrichten kann.max_tokens als absolute Obergrenze, die unkontrollierte Generierung verhindert.Da task_budget die gesamte agentische Schleife umfasst (potenziell viele Anfragen), während max_tokens jede einzelne Anfrage begrenzt, sind die beiden Werte unabhängig voneinander; keiner muss gleich oder kleiner als der andere sein.
Das richtige Budget hängt davon ab, wie viel Arbeit deine agentische Schleife derzeit leistet. Anstatt zu raten, miss zuerst deine bestehende Token-Nutzung und stimme dann von dort aus ab.
Führe eine repräsentative Stichprobe von Aufgaben ohne gesetztes task_budget aus und zeichne die Gesamtzahl der Token auf, die Claude pro Aufgabe verbraucht. Für eine agentische Schleife summiere usage.output_tokens über jede Anfrage in der Schleife, plus die Token der Tool-Ergebnisse, die du zwischen den Anfragen anhängst:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5",
max_tokens=4096,
messages=[
{"role": "user", "content": "Review the codebase and propose a refactor plan."}
],
)
# Summiere output_tokens (Text + Denken + Tool-Aufrufe) über alle Anfragen in deiner Schleife.
print(response.usage.output_tokens)Führe dies über eine repräsentative Menge von Aufgaben aus und zeichne die Verteilung auf. Beginne mit dem p99 deines Token-Verbrauchs pro Aufgabe, um zu verstehen, wie die Bereitstellung eines Task-Budgets das Verhalten des Modells verändern könnte, und teste dann nach Bedarf nach oben oder unten.
Das minimal akzeptierte task_budget.total ist modellspezifisch; bei jedem Modell, das derzeit Task-Budgets unterstützt (siehe Feature-Unterstützung), beträgt es 20.000 Token, und Werte unterhalb des Minimums geben einen 400-Fehler zurück.
max_tokens: Orthogonal zu Task-Budgets. max_tokens ist eine harte Obergrenze pro Anfrage für generierte Token, während task_budget eine beratende Obergrenze über die gesamte agentische Schleife ist (die potenziell viele Anfragen umfasst). Bei xhigh- oder max-Effort setze max_tokens auf mindestens 64k, um Claude bei jeder Anfrage Raum zum Denken und Handeln zu geben.task_budget.remaining bei jeder Folgeanfrage dekrementiert, invalidiert der geänderte Wert jedes Cache-Präfix, das ihn enthält. Um das Caching zu erhalten, setze das Budget einmal bei der initialen Anfrage und lass das Modell sich anhand des serverseitigen Countdowns selbst regulieren, anstatt das Budget clientseitig zu verändern.| Modell | Unterstützung |
|---|---|
| Claude Opus 5 | Beta (setze task-budgets-2026-03-13-Header) |
| Claude Fable 5 | Beta (setze task-budgets-2026-03-13-Header) |
| Claude Mythos 5 | Beta (setze task-budgets-2026-03-13-Header) |
| Claude Sonnet 5 | Nicht unterstützt |
| Claude Opus 4.8 | Beta (setze task-budgets-2026-03-13-Header) |
| Claude Opus 4.7 | Beta (setze task-budgets-2026-03-13-Header) |
| Claude Opus 4.6 | Nicht unterstützt |
| Claude Sonnet 4.6 | Nicht unterstützt |
| Claude Haiku 4.5 | Nicht unterstützt |
Task-Budgets werden auf Claude Code- oder Cowork-Oberflächen nicht unterstützt. Verwende Task-Budgets direkt über die Messages API auf einem unterstützten Modell.
Steuere, wie gründlich Claude über jeden Schritt einer agentischen Schleife nachdenkt.
Lass Claude entscheiden, wann und wie viel erweitertes Denken verwendet wird.
Verwalte Kontext in lang laufenden Konversationen mit serverseitiger Kompaktierung.
Reduziere Kosten und Latenz bei wiederholten Prompts durch Caching von Prompt-Präfixen.
| Supported models |
|
|---|
Was this page helpful?