Pahami penggunaan token
SDK TypeScript dan Python mengekspos data penggunaan yang sama dengan nama bidang yang berbeda:- TypeScript menyediakan rincian token per-langkah pada setiap pesan asisten (
message.message.id,message.message.usage), biaya per-model melaluimodelUsagepada pesan hasil, dan total kumulatif pada pesan hasil. - Python menyediakan rincian token per-langkah pada setiap pesan asisten (
message.usage,message.message_id), biaya per-model melaluimodel_usagepada pesan hasil, dan total yang terakumulasi pada pesan hasil (total_cost_usddan dictusage).
- Panggilan
query(): satu invokasi fungsiquery()SDK. Satu panggilan dapat melibatkan beberapa langkah (Claude merespons, menggunakan alat, mendapatkan hasil, merespons lagi). Setiap panggilan menghasilkan satu pesanresultdi akhir. - Langkah: satu siklus permintaan/respons dalam panggilan
query(). Setiap langkah menghasilkan pesan asisten dengan penggunaan token. - Sesi: serangkaian panggilan
query()yang ditautkan oleh ID sesi (menggunakan opsiresume). Setiap panggilanquery()dalam sesi melaporkan biayanya sendiri secara independen.
query(), dengan penggunaan token dilaporkan pada setiap langkah dan perkiraan kumulatif di akhir:
Setiap langkah menghasilkan pesan asisten
Ketika Claude merespons, ia mengirim satu atau lebih pesan asisten. Di TypeScript, setiap pesan asisten berisi
BetaMessage bersarang (diakses melalui message.message) dengan id dan objek usage dengan hitungan token (input_tokens, output_tokens). Di Python, dataclass AssistantMessage mengekspos data yang sama secara langsung melalui message.usage dan message.message_id. Ketika Claude menggunakan beberapa alat dalam satu giliran, semua pesan dalam giliran itu berbagi ID yang sama, jadi deduplikasi berdasarkan ID untuk menghindari penghitungan ganda.Pesan hasil memberikan perkiraan kumulatif
Ketika panggilan
query() selesai, SDK memancarkan pesan hasil dengan total_cost_usd dan usage kumulatif. Ini tersedia di TypeScript (SDKResultMessage) dan Python (ResultMessage). Jika Anda membuat beberapa panggilan query() (misalnya, dalam sesi multi-giliran), setiap hasil hanya mencerminkan biaya panggilan individual itu. Jika Anda hanya membutuhkan total yang diperkirakan, Anda dapat mengabaikan penggunaan per-langkah dan membaca nilai tunggal ini.Dapatkan biaya total dari query
Pesan hasil (TypeScript, Python) menandai akhir dari loop agen untuk panggilanquery(). Ini mencakup total_cost_usd, biaya perkiraan kumulatif di semua langkah dalam panggilan itu. Ini berfungsi untuk hasil sukses dan kesalahan. Jika Anda menggunakan sesi untuk membuat beberapa panggilan query(), setiap hasil hanya mencerminkan biaya panggilan individual itu.
Contoh berikut mengulangi aliran pesan dari panggilan query() dan mencetak biaya total ketika pesan result tiba:
Lacak penggunaan per-langkah dan per-model
Contoh di bagian ini menggunakan nama bidang TypeScript. Di Python, bidang yang setara adalahAssistantMessage.usage dan AssistantMessage.message_id untuk penggunaan per-langkah, dan ResultMessage.model_usage untuk rincian per-model.
Lacak penggunaan per-langkah
Setiap pesan asisten berisiBetaMessage bersarang (diakses melalui message.message) dengan id dan objek usage dengan hitungan token. Ketika Claude menggunakan alat secara paralel, beberapa pesan berbagi id yang sama dengan data penggunaan yang identik. Lacak ID mana yang sudah Anda hitung dan lewati duplikat untuk menghindari total yang meningkat.
Contoh berikut mengakumulasi token input dan output di semua langkah, menghitung setiap ID pesan unik hanya sekali:
Rincian penggunaan per model
Pesan hasil mencakupmodelUsage, peta nama model ke hitungan token per-model dan biaya. Ini berguna ketika Anda menjalankan beberapa model (misalnya, Haiku untuk subagen dan Opus untuk agen utama) dan ingin melihat ke mana token pergi.
Contoh berikut menjalankan query dan mencetak rincian biaya dan token untuk setiap model yang digunakan:
Akumulasi biaya di beberapa panggilan
Setiap panggilanquery() mengembalikan total_cost_usd-nya sendiri. SDK tidak menyediakan total tingkat sesi, jadi jika aplikasi Anda membuat beberapa panggilan query() (misalnya, dalam sesi multi-giliran atau di seluruh pengguna yang berbeda), akumulasi total sendiri.
Contoh berikut menjalankan dua panggilan query() secara berurutan, menambahkan total_cost_usd setiap panggilan ke total yang berjalan, dan mencetak biaya per-panggilan dan gabungan:
Tangani kesalahan, caching, dan perbedaan token
Untuk pelacakan biaya yang akurat, pertimbangkan percakapan yang gagal, harga token cache, dan ketidakkonsistenan pelaporan yang sesekali.Selesaikan perbedaan token output
Dalam kasus yang jarang terjadi, Anda mungkin mengamati nilaioutput_tokens yang berbeda untuk pesan dengan ID yang sama. Ketika ini terjadi:
- Gunakan nilai tertinggi: pesan terakhir dalam grup biasanya berisi total yang akurat.
- Lebih suka pesan hasil:
total_cost_usddalam pesan hasil mencerminkan perkiraan terakumulasi SDK di semua langkah, sehingga lebih dapat diandalkan daripada menjumlahkan nilai per-langkah sendiri. Ini masih merupakan perkiraan dan mungkin berbeda dari tagihan aktual Anda. - Laporkan ketidakkonsistenan: ajukan masalah di repositori GitHub Claude Code.
Lacak biaya pada percakapan yang gagal
Pesan hasil sukses dan kesalahan keduanya mencakupusage dan total_cost_usd. Jika percakapan gagal di tengah jalan, Anda masih mengonsumsi token hingga titik kegagalan. Selalu baca data biaya dari pesan hasil terlepas dari subtype-nya.
Lacak token cache
Agent SDK secara otomatis menggunakan prompt caching untuk mengurangi biaya pada konten berulang. Anda tidak perlu mengonfigurasi caching sendiri. Objek penggunaan mencakup dua bidang tambahan untuk pelacakan cache:cache_creation_input_tokens: token yang digunakan untuk membuat entri cache baru (ditagih dengan tarif lebih tinggi daripada token input standar).cache_read_input_tokens: token yang dibaca dari entri cache yang ada (ditagih dengan tarif yang dikurangi).
input_tokens untuk memahami penghematan caching. Di TypeScript, bidang ini diketik pada objek Usage. Di Python, mereka muncul sebagai kunci dalam dict ResultMessage.usage (misalnya, message.usage.get("cache_read_input_tokens", 0)).
Perpanjang TTL cache prompt ke satu jam
Entri cache yang ditulis oleh SDK menggunakan TTL 5 menit secara default ketika Anda mengautentikasi dengan kunci API atau menjalankan di Amazon Bedrock, Google Cloud Vertex AI, atau Microsoft Foundry. Jika beban kerja Anda menjalankan banyak sesi pendek terhadap prompt sistem dan konteks yang sama dengan celah lebih lama dari 5 menit di antara mereka, cache kedaluwarsa di antara sesi dan setiap sesi baru membayar harga input penuh. Untuk meminta TTL 1 jam pada penulisan cache, atur variabel lingkunganENABLE_PROMPT_CACHING_1H. Anda dapat mengekspornya di lingkungan shell atau kontainer Anda, atau meneruskannya melalui options.env.
Contoh berikut mengaktifkan TTL 1 jam untuk agen yang berjalan di Bedrock:
Dokumentasi terkait
- Referensi SDK TypeScript - Dokumentasi API lengkap
- Ikhtisar SDK - Memulai dengan SDK
- Izin SDK - Mengelola izin alat