Fitur ini memenuhi syarat untuk Zero Data Retention (ZDR). Ketika organisasi Anda memiliki pengaturan ZDR, data yang dikirim melalui fitur ini tidak disimpan setelah respons API dikembalikan.
"Task budgets" (anggaran tugas) memungkinkan Anda memberi tahu Claude berapa banyak token yang dimilikinya untuk satu loop agentik penuh, termasuk pemikiran, panggilan alat, hasil alat, dan output. Model melihat hitungan mundur yang berjalan dan menggunakannya untuk memprioritaskan pekerjaan serta menyelesaikan dengan baik saat anggaran terpakai.
Anggaran tugas berada dalam tahap beta pada Claude Fable 5, Claude Mythos 5, Claude Opus 4.8, dan Claude Opus 4.7. Setel header beta task-budgets-2026-03-13 untuk ikut serta.
Anggaran tugas bekerja paling baik untuk alur kerja agentik di mana Claude melakukan beberapa panggilan alat dan keputusan sebelum memfinalisasi outputnya untuk menunggu respons manusia berikutnya. Gunakan anggaran tugas ketika:
Anggaran tugas melengkapi parameter effort: effort mengontrol seberapa menyeluruh Claude bernalar tentang setiap langkah, sementara anggaran tugas membatasi total pekerjaan yang dapat dilakukan Claude di sepanjang loop agentik.
Tambahkan task_budget ke output_config dan sertakan header 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)Objek task_budget memiliki tiga field:
type: selalu "tokens".total: jumlah token yang dapat dihabiskan Claude di sepanjang loop agentik, termasuk pemikiran, panggilan alat, hasil alat, dan output.remaining (opsional): sisa anggaran yang dibawa dari permintaan sebelumnya. Secara default bernilai total jika dihilangkan.Claude melihat penanda hitungan mundur anggaran yang disisipkan di sisi server di sepanjang percakapan. Penanda ini menunjukkan berapa banyak token yang tersisa dalam loop agentik saat ini dan diperbarui saat model menghasilkan pemikiran, panggilan alat, dan output, serta saat memproses hasil alat. Claude menggunakan sinyal ini untuk mengatur tempo dirinya dan menyelesaikan dengan baik saat anggaran terpakai.
Hitungan mundur hanya terlihat oleh model. Respons API tidak menyertakan field sisa anggaran: tidak ada informasi task_budget dalam objek usage pada respons, dan SDK tidak memiliki accessor untuknya. Untuk melacak pengeluaran di sisi klien, jumlahkan penggunaan token di seluruh permintaan dalam loop Anda seperti yang ditunjukkan di Ukur penggunaan Anda saat ini, atau teruskan angka Anda sendiri dengan remaining saat membawa anggaran melintasi kompaksi.
Hitungan mundur mencerminkan token yang telah diproses Claude dalam loop agentik saat ini, bukan token yang Anda kirim ulang antar giliran. Jika klien Anda mengirim seluruh riwayat percakapan pada setiap permintaan lanjutan, hitungan token di sisi klien Anda mungkin berbeda dari anggaran yang dilacak Claude. Jika Anda juga mengurangi remaining sambil mengirim ulang riwayat penuh, model melihat anggaran yang dilaporkan terlalu rendah dan hitungan mundur turun lebih cepat dari seharusnya, menyebabkan Claude menyelesaikan lebih awal daripada yang sebenarnya diizinkan oleh anggaran. Tetapkan anggaran yang longgar dan biarkan model mengatur dirinya sendiri terhadap hitungan mundur alih-alih mencoba mencerminkannya di sisi klien.
Anggaran tugas menghitung apa yang dilihat Claude (pemikiran, panggilan alat dan hasilnya, serta teks), bukan apa yang ada dalam payload permintaan Anda. Dalam loop agentik, klien Anda mengirim ulang seluruh percakapan pada setiap permintaan, sehingga payload bertambah dari giliran ke giliran, tetapi anggaran hanya berkurang sebesar token yang dilihat Claude pada giliran ini.
Pertimbangkan sebuah loop dengan task_budget: {type: "tokens", total: 100000} dan satu alat bash.
Giliran 1. Anda mengirim permintaan awal:
{
"messages": [
{ "role": "user", "content": "Audit this repo for security issues and report findings." }
]
}Claude berpikir, lalu mengeluarkan panggilan alat dan berhenti dengan 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" }
}
]
}Misalkan giliran asisten ini (pemikiran ditambah panggilan alat) berjumlah 5.000 token yang dihasilkan. Hitungan mundur yang dilihat Claude selama pembuatan berakhir di sekitar remaining ≈ 95.000.
Giliran 2. Klien Anda mengeksekusi alat, lalu mengirim ulang riwayat penuh dengan hasil alat ditambahkan:
{
"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>"
}
]
}
]
}Pesan user dan assistant giliran 1 yang dikirim ulang tidak dihitung lagi, tetapi hasil alat sebesar 2.800 token adalah konten baru yang dilihat Claude pada giliran ini dan dihitung terhadap anggaran. Claude menghabiskan 4.000 token lagi untuk pemikiran dan panggilan alat kedua (grep -rn "eval(" src/). Hitungan mundur berakhir di sekitar remaining ≈ 88.200.
Giliran 3. Riwayat penuh dikirim ulang lagi dengan hasil alat kedua (1.200 token output grep) ditambahkan. Claude menulis laporan temuan akhir sebesar 6.000 token dan berhenti dengan stop_reason: "end_turn". remaining ≈ 81.000.
Menempatkan ketiga giliran berdampingan membuat perbedaan antara ukuran payload dan pengeluaran anggaran menjadi eksplisit:
| Giliran | Payload permintaan (perkiraan token input yang Anda kirim) | Token yang dihitung terhadap anggaran pada giliran ini | remaining anggaran setelahnya |
|---|---|---|---|
| 1 | ~20 | 5.000 (pemikiran + tool_use) | ~95.000 |
| 2 | ~7.800 (riwayat giliran 1 + hasil alat) | 6.800 (2.800 hasil alat + 4.000 pemikiran dan tool_use) | ~88.200 |
| 3 | ~13.000 (riwayat penuh + hasil alat kedua) | 7.200 (1.200 hasil alat + 6.000 text) | ~81.000 |
| Total | ~20.820 dikirim di seluruh permintaan | 19.000 dihitung terhadap anggaran | N/A |
Klien Anda mengirim pesan user giliran 1 sebanyak tiga kali dan pesan assistant giliran 1 sebanyak dua kali, tetapi masing-masing hanya dihitung sekali. Anggaran menghabiskan 19.000 dari 100.000 token, meskipun payload kumulatif yang ditransmisikan klien Anda lebih besar dan input yang di-cache prompt pada giliran 2 dan 3 bahkan lebih besar lagi.
remainingJika loop agentik Anda mengompaksi atau menulis ulang konteks di antara permintaan (misalnya, dengan merangkum giliran-giliran sebelumnya), server tidak memiliki memori tentang berapa banyak anggaran yang telah dihabiskan sebelum kompaksi. Teruskan remaining pada permintaan berikutnya agar hitungan mundur berlanjut dari titik terakhir Anda alih-alih diatur ulang ke total:
output_config = {
"effort": "high",
"task_budget": {
"type": "tokens",
"total": 128000,
"remaining": 128000 - tokens_spent_so_far,
},
}Untuk loop yang mengirim ulang seluruh riwayat yang tidak dikompaksi pada setiap giliran, hilangkan remaining dan biarkan server melacak hitungan mundur.
Anggaran tugas adalah petunjuk lunak, bukan batas keras. Claude terkadang dapat melebihi anggaran jika sedang berada di tengah tindakan yang akan lebih mengganggu jika diinterupsi daripada diselesaikan. Batas yang ditegakkan pada total token output tetaplah max_tokens, yang memotong respons dengan stop_reason: "max_tokens" saat tercapai.
Untuk batas keras pada biaya atau latensi, kombinasikan anggaran tugas dengan nilai max_tokens yang wajar:
task_budget untuk memberi Claude target untuk mengatur tempo.max_tokens sebagai batas absolut yang mencegah pembuatan yang tidak terkendali.Karena task_budget mencakup seluruh loop agentik (berpotensi banyak permintaan) sementara max_tokens membatasi setiap permintaan individual, kedua nilai tersebut independen; yang satu tidak harus berada pada atau di bawah yang lain.
Anggaran yang terlalu kecil untuk tugas dapat menyebabkan perilaku seperti penolakan. Ketika Claude melihat anggaran yang jelas tidak mencukupi untuk pekerjaan yang diminta (misalnya, anggaran 20.000 token untuk tugas pengkodean agentik selama beberapa jam), Claude mungkin menolak untuk mencoba tugas tersebut sama sekali, mempersempit cakupannya secara agresif, atau berhenti lebih awal dengan hasil parsial alih-alih memulai pekerjaan yang tidak dapat diselesaikannya. Jika Anda mengamati penolakan yang tidak terduga atau penghentian prematur setelah menetapkan anggaran, naikkan anggaran sebelum men-debug parameter lain. Ukur anggaran berdasarkan distribusi panjang tugas Anda yang sebenarnya alih-alih default tetap; lihat Memilih anggaran.
Anggaran yang tepat bergantung pada seberapa banyak pekerjaan yang saat ini dilakukan loop agentik Anda. Alih-alih menebak, ukur penggunaan token Anda yang ada terlebih dahulu lalu sesuaikan dari sana.
Jalankan sampel tugas yang representatif tanpa menyetel task_budget dan catat total token yang dihabiskan Claude per tugas. Untuk loop agentik, jumlahkan usage.output_tokens ditambah token pemikiran dan hasil alat di setiap permintaan dalam 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()
# Hitung apa yang dihasilkan Claude pada giliran ini (output mencakup teks + pemikiran + panggilan alat).
# Token hasil alat juga dihitung terhadap anggaran; tambahkan jumlah token dari
# blok tool_result yang Anda tambahkan di bawah jika Anda ingin pelacakan sisi klien cocok
# dengan hitung mundur sisi server.
total_spend += response.usage.output_tokens
if response.stop_reason == "end_turn":
return total_spend
# Tambahkan giliran asisten dan hasil alat Anda, lalu lanjutkan loop.
messages += [
{"role": "assistant", "content": response.content},
{"role": "user", "content": run_tools(response.content)},
]Jalankan ini pada serangkaian tugas yang representatif dan catat distribusinya. Mulailah dengan p99 dari pengeluaran token per tugas Anda untuk memahami bagaimana memberikan anggaran tugas kepada model dapat mengubah perilaku model, lalu uji naik atau turun sesuai kebutuhan.
Nilai minimum task_budget.total yang diterima adalah 20.000 token; nilai di bawah minimum mengembalikan error 400.
max_tokens: Ortogonal terhadap anggaran tugas. max_tokens adalah batas keras per permintaan pada token yang dihasilkan, sementara task_budget adalah batas anjuran di sepanjang loop agentik penuh (berpotensi mencakup banyak permintaan). Pada effort xhigh atau max, setel max_tokens ke setidaknya 64k untuk memberi Claude ruang untuk berpikir dan bertindak pada setiap permintaan.task_budget.remaining pada setiap permintaan lanjutan, nilai yang berubah tersebut membatalkan prefiks cache apa pun yang memuatnya. Untuk mempertahankan caching, tetapkan anggaran sekali pada permintaan awal dan biarkan model mengatur dirinya sendiri terhadap hitungan mundur di sisi server alih-alih mengubah anggaran di sisi klien.| Model | Dukungan |
|---|---|
| Claude Fable 5 | Beta (setel header task-budgets-2026-03-13) |
| Claude Mythos 5 | Beta (setel header task-budgets-2026-03-13) |
| Claude Sonnet 5 | Tidak didukung |
| Claude Opus 4.8 | Beta (setel header task-budgets-2026-03-13) |
| Claude Opus 4.7 | Beta (setel header task-budgets-2026-03-13) |
| Claude Opus 4.6 | Tidak didukung |
| Claude Sonnet 4.6 | Tidak didukung |
| Claude Haiku 4.5 | Tidak didukung |
Anggaran tugas tidak didukung pada Claude Code atau permukaan Cowork. Gunakan anggaran tugas secara langsung melalui Messages API pada model yang didukung.
Was this page helpful?