Diese Funktion ist für Zero Data Retention (ZDR) qualifiziert. Wenn deine Organisation eine ZDR-Vereinbarung hat, werden Daten, die über diese Funktion gesendet werden, nicht gespeichert, nachdem die API-Antwort zurückgegeben wurde.
Mit „task budgets" (Task-Budgets) kannst du Claude mitteilen, wie viele Token ihm für eine vollständige agentische Schleife zur Verfügung stehen, einschließlich Denken, Tool-Aufrufen, Tool-Ergebnissen und Ausgabe. Das Modell sieht einen laufenden Countdown und nutzt ihn, um die Arbeit zu priorisieren und sauber abzuschließen, während das Budget aufgebraucht wird.
Task-Budgets befinden sich in der Beta-Phase für Claude Fable 5, Claude Mythos 5, Claude Opus 4.8 und Claude Opus 4.7. Setze den Beta-Header task-budgets-2026-03-13, um dich anzumelden.
Task-Budgets funktionieren am besten für agentische Workflows, bei denen Claude mehrere Tool-Aufrufe und Entscheidungen trifft, bevor es seine Ausgabe finalisiert, um auf die nächste menschliche Antwort zu warten. 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 gib den Beta-Header an:
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)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 Budgetrest, der aus einer vorherigen Anfrage übernommen wird. Standardmäßig total, wenn nicht angegeben.Claude sieht eine serverseitig eingefügte Budget-Countdown-Markierung während der gesamten Konversation. Die Markierung zeigt, wie viele Token in der aktuellen agentischen Schleife verbleiben, und aktualisiert sich, während das Modell Denken, Tool-Aufrufe und Ausgabe generiert und während es Tool-Ergebnisse verarbeitet. Claude nutzt dieses Signal, um sein Tempo anzupassen und sauber abzuschließen, während das Budget aufgebraucht wird.
Der Countdown ist nur für das Modell sichtbar. API-Antworten enthalten kein Feld für das verbleibende Budget: Es gibt keine task_budget-Informationen im usage-Objekt der Antwort, und SDKs haben keinen Accessor dafür. Um den Verbrauch clientseitig zu verfolgen, summiere die Token-Nutzung über die Anfragen in deiner Schleife, wie in Miss deine aktuelle Nutzung gezeigt, oder gib deinen eigenen Wert mit remaining weiter, wenn du ein Budget über eine Kompaktierung hinweg überträgst.
Der Countdown spiegelt die Token wider, die Claude in der aktuellen agentischen Schleife verarbeitet hat, nicht die Token, die du zwischen den Turns erneut sendest. Wenn dein Client bei jeder Folgeanfrage den vollständigen Konversationsverlauf sendet, kann deine clientseitige Token-Zählung von dem Budget abweichen, das Claude verfolgt. Wenn du zusätzlich remaining dekrementierst, während du den vollständigen Verlauf erneut sendest, sieht das Modell ein zu niedrig angegebenes Budget und der Countdown sinkt schneller als er sollte, wodurch Claude früher abschließt, als das Budget tatsächlich erlaubt. Setze ein großzügiges Budget und lass das Modell sich anhand des Countdowns selbst regulieren, anstatt zu versuchen, ihn clientseitig zu spiegeln.
Das Task-Budget zählt, was Claude sieht (Denken, Tool-Aufrufe und -Ergebnisse sowie Text), nicht was in deinem Anfrage-Payload enthalten ist. 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 erste 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 sah, endete nahe 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 erneut gezählt, aber das 2.800-Token-Tool-Ergebnis ist neuer Inhalt, den Claude in diesem Turn sieht, und wird auf das Budget angerechnet. Claude gibt weitere 4.000 Token für Denken und einen zweiten Tool-Aufruf aus (grep -rn "eval(" src/). Der Countdown endet nahe remaining ≈ 88.200.
Turn 3. Der vollständige Verlauf wird erneut gesendet, mit dem zweiten Tool-Ergebnis (1.200 Token grep-Ausgabe) angehängt. Claude schreibt einen abschließenden Ergebnisbericht mit 6.000 Token und stoppt mit stop_reason: "end_turn". remaining ≈ 81.000.
Wenn man die drei Turns nebeneinanderstellt, wird der Unterschied zwischen Payload-Größe und Budget-Verbrauch deutlich:
| Turn | Anfrage-Payload (ca. gesendete Input-Token) | In diesem Turn auf das Budget angerechnete Token | Budget remaining danach |
|---|---|---|---|
| 1 | ~20 | 5.000 (Denken + tool_use) | ~95.000 |
| 2 | ~7.800 (Verlauf aus Turn 1 + 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 alle Anfragen gesendet | 19.000 auf das Budget angerechnet | N/A |
Dein Client hat die User-Nachricht aus Turn 1 dreimal und die Assistant-Nachricht aus Turn 1 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 per Prompt-Caching zwischengespeicherte Input in Turn 2 und 3 noch größer.
remaining über eine Kompaktierung hinweg übertragenWenn deine agentische Schleife den Kontext zwischen Anfragen kompaktiert oder umschreibt (zum Beispiel durch Zusammenfassen früherer Turns), hat der Server keine Erinnerung daran, wie viel Budget vor der Kompaktierung ausgegeben 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:
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 überlasse dem Server die Verfolgung des Countdowns.
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 eine 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 kleiner oder gleich dem anderen sein.
Ein Budget, das für die Aufgabe zu klein ist, kann ablehnungsähnliches Verhalten verursachen. Wenn Claude ein Budget sieht, das für die angeforderte Arbeit eindeutig unzureichend ist (zum Beispiel ein Budget von 20.000 Token für eine mehrstündige agentische Coding-Aufgabe), kann es die Aufgabe ganz ablehnen, sie aggressiv verkleinern oder frühzeitig mit einem Teilergebnis stoppen, anstatt Arbeit zu beginnen, die es nicht abschließen kann. Wenn du nach dem Setzen eines Budgets unerwartete Ablehnungen oder vorzeitige Stopps beobachtest, erhöhe das Budget, bevor du andere Parameter debuggst. Dimensioniere Budgets anhand deiner tatsächlichen Verteilung der Aufgabenlängen statt anhand eines festen Standardwerts; siehe Ein Budget wählen.
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 passe dann von dort aus an.
Führe eine repräsentative Stichprobe von Aufgaben ohne gesetztes task_budget aus und erfasse die gesamten Token, die Claude pro Aufgabe ausgibt. Für eine agentische Schleife summiere usage.output_tokens plus Denk- und Tool-Ergebnis-Token über jede Anfrage in der Schleife:
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()
# Zähle, was Claude in diesem Zug generiert hat (Output umfasst Text + Denken + Tool-Aufrufe).
# Tool-Result-Token zählen ebenfalls gegen das Budget; addiere die Token-Anzahl der
# tool_result-Blöcke, die du unten anhängst, wenn das clientseitige Tracking mit
# dem serverseitigen Countdown übereinstimmen soll.
total_spend += response.usage.output_tokens
if response.stop_reason == "end_turn":
return total_spend
# Hänge den Assistant-Zug und deine Tool-Ergebnisse an, dann setze die Schleife fort.
messages += [
{"role": "assistant", "content": response.content},
{"role": "user", "content": run_tools(response.content)},
]Führe dies über eine repräsentative Menge von Aufgaben aus und erfasse die Verteilung. Beginne mit dem p99 deines Token-Verbrauchs pro Aufgabe, um zu verstehen, wie die Bereitstellung eines Task-Budgets das Verhalten des Modells verändern kann, und teste dann nach Bedarf nach oben oder unten.
Das minimal akzeptierte task_budget.total beträgt 20.000 Token; 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 hinweg 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 ersten Anfrage und lass das Modell sich anhand des serverseitigen Countdowns selbst regulieren, anstatt das Budget clientseitig zu verändern.| Modell | Unterstützung |
|---|---|
| Claude Fable 5 | Beta (Header task-budgets-2026-03-13 setzen) |
| Claude Mythos 5 | Beta (Header task-budgets-2026-03-13 setzen) |
| Claude Sonnet 5 | Nicht unterstützt |
| Claude Opus 4.8 | Beta (Header task-budgets-2026-03-13 setzen) |
| Claude Opus 4.7 | Beta (Header task-budgets-2026-03-13 setzen) |
| 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 mit einem unterstützten Modell.
Was this page helpful?