Caching prompt mengoptimalkan penggunaan API Anda dengan memungkinkan melanjutkan dari prefiks tertentu dalam prompt Anda. Ini secara signifikan mengurangi waktu pemrosesan dan biaya untuk tugas berulang atau prompt dengan elemen yang konsisten.
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.
Ada dua cara untuk mengaktifkan caching prompt:
cache_control di tingkat atas permintaan Anda. Sistem secara otomatis menerapkan breakpoint cache ke blok terakhir yang dapat di-cache dan memindahkannya ke depan seiring percakapan berkembang. Paling cocok untuk percakapan multi-giliran di mana riwayat pesan yang terus bertambah harus di-cache secara otomatis.cache_control langsung pada blok konten individual untuk kontrol yang lebih detail atas apa yang di-cache.Cara paling sederhana untuk memulai adalah dengan caching otomatis:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
cache_control={"type": "ephemeral"},
system="You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.",
messages=[
{
"role": "user",
"content": "Analyze the major themes in 'Pride and Prejudice'.",
}
],
)
print(response.usage.model_dump_json())Dengan caching otomatis, sistem meng-cache semua konten hingga dan termasuk blok terakhir yang dapat di-cache. Pada permintaan berikutnya dengan prefiks yang sama, konten yang di-cache digunakan kembali secara otomatis.
Ketika Anda mengirim permintaan dengan caching prompt diaktifkan:
Ini sangat berguna untuk:
Secara default, cache memiliki masa aktif 5 menit. Cache disegarkan tanpa biaya tambahan setiap kali konten yang di-cache digunakan.
Jika Anda merasa 5 menit terlalu singkat, Anthropic juga menawarkan durasi cache 1 jam dengan biaya tambahan.
Untuk informasi lebih lanjut, lihat Durasi cache 1 jam.
Caching prompt meng-cache seluruh prefiks
Caching prompt mereferensikan seluruh prompt - tools, system, dan messages (dalam urutan tersebut) hingga dan termasuk blok yang ditandai dengan cache_control.
Caching prompt memperkenalkan struktur harga baru. Tabel di bawah ini menunjukkan harga per juta token untuk setiap model yang didukung:
| Model | Token Input Dasar | Penulisan Cache 5m | Penulisan Cache 1j | Cache Hit & Refresh | Token Output |
|---|---|---|---|---|---|
| Claude Fable 5 | $10 / MTok | $12,50 / MTok | $20 / MTok | $1 / MTok | $50 / MTok |
| Claude Mythos 5 (ketersediaan terbatas) | $10 / MTok | $12,50 / MTok | $20 / MTok | $1 / MTok | $50 / MTok |
| Claude Opus 4.8 | $5 / MTok | $6,25 / MTok | $10 / MTok | $0,50 / MTok | $25 / MTok |
| Claude Opus 4.7 | $5 / MTok | $6,25 / MTok | $10 / MTok | $0,50 / MTok | $25 / MTok |
| Claude Opus 4.6 | $5 / MTok | $6,25 / MTok | $10 / MTok | $0,50 / MTok | $25 / MTok |
| Claude Opus 4.5 | $5 / MTok | $6,25 / MTok | $10 / MTok | $0,50 / MTok | $25 / MTok |
| Claude Opus 4.1 (tidak digunakan lagi) | $15 / MTok | $18,75 / MTok | $30 / MTok | $1,50 / MTok | $75 / MTok |
| Claude Opus 4 (dihentikan, kecuali di Google Cloud) | $15 / MTok | $18,75 / MTok | $30 / MTok | $1,50 / MTok | $75 / MTok |
| Claude Sonnet 5 hingga 31 Agustus 2026 | $2 / MTok | $2,50 / MTok | $4 / MTok | $0,20 / MTok | $10 / MTok |
| Claude Sonnet 5 mulai 1 September 2026 | $3 / MTok | $3,75 / MTok | $6 / MTok | $0,30 / MTok | $15 / MTok |
| Claude Sonnet 4.6 | $3 / MTok | $3,75 / MTok | $6 / MTok | $0,30 / MTok | $15 / MTok |
| Claude Sonnet 4.5 | $3 / MTok | $3,75 / MTok | $6 / MTok | $0,30 / MTok | $15 / MTok |
| Claude Sonnet 4 (dihentikan, kecuali di Bedrock dan Google Cloud) | $3 / MTok | $3,75 / MTok | $6 / MTok | $0,30 / MTok | $15 / MTok |
| Claude Haiku 4.5 | $1 / MTok | $1,25 / MTok | $2 / MTok | $0,10 / MTok | $5 / MTok |
| Claude Haiku 3.5 (dihentikan, kecuali di Bedrock dan Google Cloud) | $0,80 / MTok | $1 / MTok | $1,60 / MTok | $0,08 / MTok | $4 / MTok |
Tabel di atas mencerminkan pengali harga berikut untuk caching prompt:
Pengali ini dapat digabungkan dengan pengubah harga lain seperti diskon Batch API dan residensi data. Lihat harga untuk detail lengkap.
Caching prompt (baik otomatis maupun eksplisit) didukung pada semua model Claude yang aktif.
Caching otomatis adalah cara paling sederhana untuk mengaktifkan caching prompt. Alih-alih menempatkan cache_control pada blok konten individual, tambahkan satu field cache_control di tingkat atas body permintaan Anda. Sistem secara otomatis menerapkan breakpoint cache ke blok terakhir yang dapat di-cache.
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
cache_control={"type": "ephemeral"},
system="You are a helpful assistant that remembers our conversation.",
messages=[
{"role": "user", "content": "My name is Alex. I work on machine learning."},
{
"role": "assistant",
"content": "Nice to meet you, Alex! How can I help with your ML work today?",
},
{"role": "user", "content": "What did I say I work on?"},
],
)
print(response.usage.model_dump_json())Dengan caching otomatis, titik cache bergerak maju secara otomatis seiring percakapan berkembang. Setiap permintaan baru meng-cache semuanya hingga blok terakhir yang dapat di-cache, dan konten sebelumnya dibaca dari cache.
| Permintaan | Konten | Perilaku cache |
|---|---|---|
| Permintaan 1 | System + User(1) + Asst(1) + User(2) ◀ cache | Semuanya ditulis ke cache |
| Permintaan 2 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) ◀ cache | System hingga User(2) dibaca dari cache; Asst(2) + User(3) ditulis ke cache |
| Permintaan 3 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) + Asst(3) + User(4) ◀ cache | System hingga User(3) dibaca dari cache; Asst(3) + User(4) ditulis ke cache |
Breakpoint cache secara otomatis berpindah ke blok terakhir yang dapat di-cache dalam setiap permintaan, sehingga Anda tidak perlu memperbarui penanda cache_control apa pun seiring percakapan berkembang.
Secara default, caching otomatis menggunakan TTL 5 menit. Anda dapat menentukan TTL 1 jam dengan harga 2x harga token input dasar:
{ "cache_control": { "type": "ephemeral", "ttl": "1h" } }Caching otomatis kompatibel dengan breakpoint cache eksplisit. Ketika digunakan bersama, breakpoint cache otomatis menggunakan salah satu dari 4 slot breakpoint yang tersedia.
Ini memungkinkan Anda menggabungkan kedua pendekatan. Misalnya, gunakan breakpoint eksplisit untuk meng-cache prompt sistem Anda, sementara caching otomatis menangani percakapan:
{
"model": "claude-opus-4-8",
"max_tokens": 1024,
"cache_control": { "type": "ephemeral" },
"system": [
{
"type": "text",
"text": "You are a helpful assistant.",
"cache_control": { "type": "ephemeral" }
}
],
"messages": [{ "role": "user", "content": "What are the key terms?" }]
}Caching otomatis menggunakan infrastruktur caching dasar yang sama. Harga, ambang batas token minimum, persyaratan urutan konteks, dan jendela lookback 20 blok semuanya berlaku sama seperti dengan breakpoint eksplisit.
cache_control eksplisit dengan TTL yang sama, caching otomatis tidak melakukan apa-apa (no-op).cache_control eksplisit dengan TTL yang berbeda, API mengembalikan error 400.Caching otomatis tersedia di Claude API, Claude Platform on AWS, dan Microsoft Foundry. Bedrock dan Google Cloud tidak mendukung caching otomatis.
Untuk kontrol lebih besar atas caching, Anda dapat menempatkan cache_control langsung pada blok konten individual. Ini berguna ketika Anda perlu meng-cache bagian berbeda yang berubah pada frekuensi berbeda, atau memerlukan kontrol detail atas apa yang di-cache.
Tempatkan konten statis (definisi alat, instruksi sistem, konteks, contoh) di awal prompt Anda. Tandai akhir konten yang dapat digunakan kembali untuk caching menggunakan parameter cache_control.
Prefiks cache dibuat dalam urutan berikut: tools, system, lalu messages. Urutan ini membentuk hierarki di mana setiap level dibangun di atas level sebelumnya.
Anda dapat menggunakan hanya satu breakpoint cache di akhir konten statis Anda, dan sistem akan secara otomatis menemukan prefiks terpanjang yang sudah ditulis ke cache oleh permintaan sebelumnya. Memahami cara kerjanya membantu Anda mengoptimalkan strategi caching Anda.
Tiga prinsip inti:
Penulisan cache hanya terjadi di breakpoint Anda. Menandai blok dengan cache_control menulis tepat satu entri cache: hash dari prefiks yang berakhir di blok tersebut. Sistem tidak menulis entri untuk posisi sebelumnya mana pun. Karena hash bersifat kumulatif, mencakup semuanya hingga dan termasuk breakpoint, mengubah blok apa pun di atau sebelum breakpoint menghasilkan hash yang berbeda pada permintaan berikutnya.
Pembacaan cache melihat ke belakang untuk entri yang ditulis oleh permintaan sebelumnya. Pada setiap permintaan, sistem menghitung hash prefiks di breakpoint Anda dan memeriksa entri cache yang cocok. Jika tidak ada, sistem berjalan mundur satu blok pada satu waktu, memeriksa apakah hash prefiks di setiap posisi sebelumnya cocok dengan sesuatu yang sudah ada di cache. Sistem mencari penulisan sebelumnya, bukan konten yang stabil.
Jendela lookback adalah 20 blok. Sistem memeriksa paling banyak 20 posisi per breakpoint, menghitung breakpoint itu sendiri sebagai yang pertama. Jika sistem tidak menemukan entri yang cocok dalam jendela tersebut, pemeriksaan berhenti (atau dilanjutkan dari breakpoint eksplisit berikutnya, jika ada).
Contoh: Lookback dalam percakapan yang berkembang
Anda menambahkan blok baru setiap giliran dan menetapkan cache_control pada blok terakhir dari setiap permintaan:
Kesalahan umum: Breakpoint pada konten yang berubah setiap permintaan
Prompt Anda memiliki konteks sistem statis yang besar (blok 1 hingga 5) diikuti oleh blok per-permintaan yang berisi timestamp dan pesan pengguna (blok 6). Anda menetapkan cache_control pada blok 6:
Lookback tidak menemukan konten stabil di belakang breakpoint Anda dan meng-cache-nya. Lookback menemukan entri yang sudah ditulis oleh permintaan sebelumnya, dan penulisan hanya terjadi di breakpoint. Pindahkan cache_control ke blok 5, blok terakhir yang tetap sama di seluruh permintaan, dan setiap permintaan berikutnya membaca prefiks yang di-cache. Caching otomatis mengalami jebakan yang sama: caching otomatis menempatkan breakpoint pada blok terakhir yang dapat di-cache, yang dalam struktur ini adalah blok yang berubah setiap permintaan, jadi gunakan breakpoint eksplisit pada blok 5 sebagai gantinya.
Poin penting: Tempatkan cache_control pada blok terakhir yang prefiksnya identik di seluruh permintaan yang ingin Anda bagikan cache-nya. Dalam percakapan yang berkembang, blok terakhir berfungsi selama setiap giliran menambahkan kurang dari 20 blok: konten sebelumnya tidak pernah berubah, jadi lookback permintaan berikutnya menemukan penulisan sebelumnya. Untuk prompt dengan sufiks yang bervariasi (timestamp, konteks per-permintaan, pesan masuk), tempatkan breakpoint di akhir prefiks statis, bukan pada blok yang bervariasi.
Anda dapat mendefinisikan hingga 4 breakpoint cache jika Anda ingin:
Batasan penting: Lookback hanya dapat menemukan entri yang sudah ditulis oleh permintaan sebelumnya. Jika percakapan yang berkembang mendorong breakpoint Anda 20 blok atau lebih melewati penulisan terakhir, jendela lookback melewatkannya. Tambahkan breakpoint kedua lebih dekat ke posisi tersebut sejak awal sehingga penulisan terakumulasi di sana sebelum Anda membutuhkannya.
Breakpoint cache itu sendiri tidak menambah biaya apa pun. Anda hanya dikenakan biaya untuk:
Menambahkan lebih banyak breakpoint cache_control tidak meningkatkan biaya Anda - Anda tetap membayar jumlah yang sama berdasarkan konten apa yang sebenarnya di-cache dan dibaca. Breakpoint hanya memberi Anda kontrol atas bagian mana yang dapat di-cache secara independen.
Pada Claude API, Claude Platform on AWS, Google Cloud, dan Microsoft Foundry, panjang prompt minimum yang dapat di-cache adalah:
Ketersediaan model bervariasi berdasarkan platform, begitu juga minimum untuk model yang baru dirilis: pada Amazon Bedrock, panjang prompt minimum yang dapat di-cache untuk Claude Fable 5 dan Claude Mythos 5 adalah 1.024 token.
Prompt yang lebih pendek tidak dapat di-cache, bahkan jika ditandai dengan cache_control. Permintaan apa pun untuk meng-cache kurang dari jumlah token ini akan diproses tanpa caching, dan tidak ada error yang dikembalikan. Untuk memverifikasi apakah prompt di-cache, periksa field usage respons: jika cache_creation_input_tokens dan cache_read_input_tokens keduanya 0, prompt tidak di-cache (kemungkinan karena tidak memenuhi persyaratan panjang minimum).
Jika prompt Anda sedikit di bawah minimum untuk model dan platform Anda, memperluas konten yang di-cache untuk mencapai ambang batas sering kali bermanfaat. Pembacaan cache jauh lebih murah daripada token input yang tidak di-cache, jadi mencapai minimum dapat mengurangi biaya untuk prompt yang sering digunakan kembali.
Bedrock adalah platform yang dioperasikan AWS. Pada Bedrock, lihat dokumentasi caching prompt Bedrock untuk minimum per-model, perilaku kegagalan, dan nama field usage yang berlaku.
Untuk permintaan bersamaan, perhatikan bahwa entri cache hanya tersedia setelah respons pertama dimulai. Jika Anda memerlukan cache hit untuk permintaan paralel, tunggu respons pertama sebelum mengirim permintaan berikutnya.
Saat ini, "ephemeral" adalah satu-satunya tipe cache yang didukung, yang secara default memiliki masa aktif 5 menit.
Sebagian besar blok dalam permintaan dapat di-cache. Ini termasuk:
toolssystemmessages.content, untuk giliran user dan assistantmessages.content, dalam giliran usermessages.content, dalam giliran user dan assistantMasing-masing elemen ini dapat di-cache, baik secara otomatis atau dengan menandainya dengan cache_control.
Meskipun sebagian besar blok permintaan dapat di-cache, ada beberapa pengecualian:
Blok thinking tidak dapat di-cache secara langsung dengan cache_control. Namun, blok thinking DAPAT di-cache bersama konten lain ketika muncul dalam giliran assistant sebelumnya. Ketika di-cache dengan cara ini, blok tersebut DIHITUNG sebagai token input ketika dibaca dari cache.
Blok sub-konten (seperti sitasi) itu sendiri tidak dapat di-cache secara langsung. Sebagai gantinya, cache blok tingkat atas.
Dalam kasus sitasi, blok konten dokumen tingkat atas yang berfungsi sebagai materi sumber untuk sitasi dapat di-cache. Ini memungkinkan Anda menggunakan caching prompt dengan sitasi secara efektif dengan meng-cache dokumen yang akan direferensikan oleh sitasi.
Blok teks kosong tidak dapat di-cache.
Modifikasi pada konten yang di-cache dapat membatalkan sebagian atau seluruh cache.
Seperti dijelaskan dalam Menyusun prompt Anda, cache mengikuti hierarki: tools → system → messages. Perubahan di setiap level membatalkan level tersebut dan semua level berikutnya.
Tabel berikut menunjukkan bagian cache mana yang dibatalkan oleh berbagai jenis perubahan. ✘ menunjukkan bahwa cache dibatalkan, sedangkan ✓ menunjukkan bahwa cache tetap valid.
| Apa yang berubah | Cache tools | Cache system | Cache messages | Dampak |
|---|---|---|---|---|
| Definisi alat | ✘ | ✘ | ✘ | Memodifikasi definisi alat (nama, deskripsi, parameter) membatalkan seluruh cache |
| Toggle pencarian web | ✓ | ✘ | ✘ | Mengaktifkan/menonaktifkan pencarian web memodifikasi prompt sistem |
| Toggle sitasi | ✓ | ✘ | ✘ | Mengaktifkan/menonaktifkan sitasi memodifikasi prompt sistem |
| Pengaturan kecepatan | ✓ | ✘ | ✘ | Beralih antara speed: "fast" dan kecepatan standar membatalkan cache system dan messages |
| Tool choice | ✓ | ✓ | ✘ | Perubahan pada parameter tool_choice hanya memengaruhi blok messages |
| Gambar | ✓ | ✓ | ✘ | Menambahkan/menghapus gambar di mana pun dalam prompt memengaruhi blok messages |
| Parameter thinking | ✓ | ✓ | ✘ | Perubahan pada pengaturan pemikiran diperpanjang (aktifkan/nonaktifkan, budget) memengaruhi blok messages |
| Hasil non-alat yang diteruskan ke permintaan pemikiran diperpanjang | ✓ | ✓ | Tergantung model | Pada Opus 4.5+ dan Sonnet 4.6+, blok thinking dipertahankan secara default, sehingga cache tetap valid (✓). Pada model Opus/Sonnet sebelumnya dan semua model Haiku, semua blok thinking yang sebelumnya di-cache dihapus dari konteks, dan pesan apa pun yang mengikuti blok thinking tersebut dihapus dari cache (✘). Untuk detail lebih lanjut, lihat Caching dengan blok thinking. |
Pada Claude Opus 4.8, Anda dapat menambahkan instruksi sistem baru di tengah percakapan tanpa membatalkan cache system atau messages. Tambahkan pesan {"role": "system"} ke messages alih-alih mengedit field system tingkat atas, sehingga prefiks yang di-cache tetap tidak berubah. Lihat Pesan sistem di tengah percakapan.
Pantau performa cache menggunakan field respons API ini, di dalam usage dalam respons (atau event message_start jika menggunakan streaming):
cache_creation_input_tokens: Jumlah token yang ditulis ke cache saat membuat entri baru.cache_read_input_tokens: Jumlah token yang diambil dari cache untuk permintaan ini.input_tokens: Jumlah token input yang tidak dibaca dari atau digunakan untuk membuat cache (yaitu, token setelah breakpoint cache terakhir).Memahami rincian token
Field input_tokens hanya mewakili token yang muncul setelah breakpoint cache terakhir dalam permintaan Anda - bukan semua token input yang Anda kirim.
Untuk menghitung total token input:
total_input_tokens = cache_read_input_tokens + cache_creation_input_tokens + input_tokensPenjelasan spasial:
cache_read_input_tokens = token sebelum breakpoint yang sudah di-cache (pembacaan)cache_creation_input_tokens = token sebelum breakpoint yang sedang di-cache sekarang (penulisan)input_tokens = token setelah breakpoint terakhir Anda (tidak memenuhi syarat untuk cache)Contoh: Jika Anda memiliki permintaan dengan 100.000 token konten yang di-cache (dibaca dari cache), 0 token konten baru yang sedang di-cache, dan 50 token dalam pesan pengguna Anda (setelah breakpoint cache):
cache_read_input_tokens: 100.000cache_creation_input_tokens: 0input_tokens: 50Ini penting untuk memahami biaya dan batas laju, karena input_tokens biasanya akan jauh lebih kecil dari total input Anda ketika menggunakan caching secara efektif.
Ketika menggunakan pemikiran diperpanjang dengan caching prompt, blok thinking memiliki perilaku khusus:
Caching otomatis bersama konten lain: Meskipun blok thinking tidak dapat secara eksplisit ditandai dengan cache_control, blok tersebut di-cache sebagai bagian dari konten permintaan ketika Anda melakukan panggilan API berikutnya dengan hasil alat. Ini umumnya terjadi selama penggunaan alat ketika Anda meneruskan blok thinking kembali untuk melanjutkan percakapan.
Penghitungan token input: Ketika blok thinking dibaca dari cache, blok tersebut dihitung sebagai token input dalam metrik penggunaan Anda. Ini penting untuk perhitungan biaya dan penganggaran token.
Pola pembatalan cache:
cache_control eksplisitUntuk detail lebih lanjut tentang pembatalan cache, lihat Apa yang membatalkan cache.
Contoh dengan penggunaan alat:
Request 1: User: "What's the weather in Paris?"
Response: [thinking_block_1] + [tool_use block 1]
Request 2:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True]
Response: [thinking_block_2] + [text block 2]
# Request 2 caches its request content (not the response)
# The cache includes: user message, thinking_block_1, tool_use block 1, and tool_result_1
Request 3:
User: ["What's the weather in Paris?"],
Assistant: [thinking_block_1] + [tool_use block 1],
User: [tool_result_1, cache=True],
Assistant: [thinking_block_2] + [text block 2],
User: [Text response, cache=True]
# On earlier Opus/Sonnet and all Haiku models, non-tool-result user block causes prior thinking blocks to be stripped; on Opus 4.5+/Sonnet 4.6+ they are keptPada model Opus/Sonnet sebelumnya dan semua model Haiku, semua blok thinking sebelumnya dihapus dari konteks pada titik ini. Pada Opus 4.5+ dan Sonnet 4.6+, blok thinking sebelumnya dipertahankan secara default dan tetap menjadi bagian dari prefiks yang di-cache.
Untuk informasi lebih detail, lihat dokumentasi pemikiran diperpanjang.
Per 5 Februari 2026, caching prompt menggunakan isolasi tingkat workspace alih-alih isolasi tingkat organisasi. Cache diisolasi per workspace, memastikan pemisahan data antar workspace dalam organisasi yang sama. Ini berlaku untuk Claude API, Claude Platform on AWS, dan Microsoft Foundry; Bedrock dan Google Cloud mempertahankan isolasi cache tingkat organisasi. Jika Anda menggunakan beberapa workspace, tinjau strategi caching Anda untuk memperhitungkan perbedaan ini.
Isolasi organisasi dan workspace: Cache diisolasi antar organisasi. Organisasi yang berbeda tidak pernah berbagi cache, bahkan jika mereka menggunakan prompt yang identik. Per 5 Februari 2026, cache juga diisolasi per workspace dalam satu organisasi pada Claude API, Claude Platform on AWS, dan Microsoft Foundry; Bedrock dan Google Cloud terus menggunakan isolasi tingkat organisasi saja.
Pencocokan persis: Cache hit memerlukan segmen prompt yang 100% identik, termasuk semua teks dan gambar hingga dan termasuk blok yang ditandai dengan cache control.
Pembuatan token output: Caching prompt tidak berpengaruh pada pembuatan token output. Respons yang Anda terima identik dengan apa yang akan Anda dapatkan jika caching prompt tidak digunakan.
Untuk mengoptimalkan performa caching prompt:
Sesuaikan strategi caching prompt Anda dengan skenario Anda:
Jika mengalami perilaku yang tidak terduga:
Diagnostik cache (beta) membuat API membandingkan permintaan berturut-turut dan melaporkan dengan tepat di mana prefiks prompt menyimpang, yang secara otomatis menangani banyak langkah dalam daftar ini.
cache_control berada di lokasi yang samatool_choice dan penggunaan gambar tetap konsisten antar panggilantool_use Anda memiliki urutan yang stabil karena beberapa bahasa (misalnya, Swift, Go) mengacak urutan kunci selama konversi JSON, yang merusak cachePerubahan pada tool_choice atau keberadaan/ketiadaan gambar di mana pun dalam prompt akan membatalkan cache, mengharuskan entri cache baru dibuat. Untuk detail lebih lanjut tentang pembatalan cache, lihat Apa yang membatalkan cache.
Jika Anda merasa 5 menit terlalu singkat, Anthropic juga menawarkan durasi cache 1 jam dengan biaya tambahan.
Durasi cache 1 jam tersedia di Claude API, Claude Platform on AWS, Amazon Bedrock, Amazon Bedrock (legacy), Google Cloud, dan Microsoft Foundry.
Untuk menggunakan cache yang diperpanjang, sertakan ttl dalam definisi cache_control seperti ini:
"cache_control": {
"type": "ephemeral",
"ttl": "1h"
}Respons akan menyertakan informasi cache terperinci seperti berikut:
{
"usage": {
"input_tokens": 2048,
"cache_read_input_tokens": 1800,
"cache_creation_input_tokens": 248,
"output_tokens": 503,
"cache_creation": {
"ephemeral_5m_input_tokens": 148,
"ephemeral_1h_input_tokens": 100
}
}
}Perhatikan bahwa field cache_creation_input_tokens saat ini sama dengan jumlah nilai dalam objek cache_creation.
Jika Anda melihat penulisan ephemeral_5m_input_tokens yang tidak Anda minta saat menggunakan alat server seperti pencarian web, lihat panduan ini tentang caching prompt dan penggunaan alat.
Jika Anda memiliki prompt yang digunakan pada irama teratur (yaitu, prompt sistem yang digunakan lebih sering dari setiap 5 menit), terus gunakan cache 5 menit, karena ini akan terus disegarkan tanpa biaya tambahan.
Cache 1 jam paling baik digunakan dalam skenario berikut:
Cache 5 menit dan 1 jam berperilaku sama sehubungan dengan latensi. Anda umumnya akan melihat peningkatan time-to-first-token untuk dokumen panjang.
Anda dapat menggunakan kontrol cache 1 jam dan 5 menit dalam permintaan yang sama, tetapi dengan batasan penting: Entri cache dengan TTL lebih panjang harus muncul sebelum TTL yang lebih pendek (yaitu, entri cache 1 jam harus muncul sebelum entri cache 5 menit mana pun).
Ketika mencampur TTL, API menentukan tiga lokasi penagihan dalam prompt Anda:
A: Jumlah token pada cache hit tertinggi (atau 0 jika tidak ada hit).B: Jumlah token pada blok cache_control 1 jam tertinggi setelah A (atau sama dengan A jika tidak ada).C: Jumlah token pada blok cache_control terakhir.Jika B dan/atau C lebih besar dari A, keduanya pasti merupakan cache miss, karena A adalah cache hit tertinggi.
Anda akan dikenakan biaya untuk:
A.(B - A).(C - B).Berikut adalah 3 contoh. Ini menggambarkan token input dari 3 permintaan, yang masing-masing memiliki cache hit dan cache miss yang berbeda. Masing-masing memiliki harga terhitung yang berbeda, ditunjukkan dalam kotak berwarna, sebagai hasilnya.
Pre-warming cache memungkinkan Anda memuat prompt sistem atau definisi alat Anda ke dalam cache prompt sebelum pengguna memicu permintaan nyata. Ini menghilangkan penalti latensi cache-miss pada interaksi pengguna pertama, mengurangi time-to-first-token (TTFT) untuk aplikasi yang sensitif terhadap latensi.
Tetapkan max_tokens: 0 dalam permintaan Anda. API membaca prompt Anda ke dalam model dan menulis cache di breakpoint cache_control mana pun, lalu segera kembali tanpa menghasilkan output apa pun. Respons memiliki array content kosong, stop_reason: "max_tokens", dan blok usage yang terisi penuh.
Tempatkan breakpoint cache_control pada blok terakhir yang dibagikan dengan permintaan lanjutan (biasanya prompt sistem atau definisi alat Anda), bukan pada pesan pengguna placeholder. Jika tidak, entri cache dikunci ke placeholder dan permintaan lanjutan tidak akan mengenainya. Ini berarti menggunakan breakpoint cache eksplisit daripada caching otomatis, karena caching otomatis menempatkan breakpoint pada blok terakhir, yang di sini adalah placeholder. Pesan pengguna placeholder dapat berupa string apa pun dengan konten non-whitespace (contoh di sini menggunakan "warmup"); kontennya dibaca ke dalam model tetapi tidak pernah dijawab.
Permintaan pre-warm dikenakan biaya penulisan cache jika prefiks belum di-cache, sama seperti permintaan lainnya. Periksa usage.cache_creation_input_tokens dalam respons untuk mengonfirmasi penulisan terjadi. Nol token output yang ditagih.
client = anthropic.Anthropic()
# Fire this before users arrive to warm the shared system-prompt cache.
prewarm = client.messages.create(
model="claude-opus-4-8",
max_tokens=0,
system=[
{
"type": "text",
"text": "You are an expert software engineer with deep knowledge of distributed systems...",
"cache_control": {"type": "ephemeral"},
}
],
messages=[{"role": "user", "content": "warmup"}],
)
print(prewarm.stop_reason) # "max_tokens"
print(prewarm.content) # []
print(prewarm.usage)API mengembalikan array content kosong:
{
"id": "msg_01XFDUDYJgAACzvnptvVoYEL",
"type": "message",
"role": "assistant",
"content": [],
"model": "claude-opus-4-8",
"stop_reason": "max_tokens",
"stop_sequence": null,
"usage": {
"input_tokens": 8,
"cache_creation_input_tokens": 5120,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 5120,
"ephemeral_1h_input_tokens": 0
},
"iterations": [
{
"input_tokens": 8,
"output_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 5120,
"cache_creation": {
"ephemeral_5m_input_tokens": 5120,
"ephemeral_1h_input_tokens": 0
},
"type": "message"
}
],
"output_tokens": 0,
"service_tier": "standard",
"inference_geo": "global"
}
}Kirim permintaan pre-warm ketika aplikasi Anda dimulai (atau pada interval terjadwal), lalu kirim permintaan pengguna nyata setelah pre-warm selesai:
client = anthropic.Anthropic()
SYSTEM_PROMPT = [
{
"type": "text",
"text": "You are an expert software engineer with deep knowledge of distributed systems...",
"cache_control": {"type": "ephemeral"},
}
]
def prewarm_cache() -> None:
"""Call this at application startup or on a scheduled interval."""
client.messages.create(
model="claude-opus-4-8",
max_tokens=0,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": "warmup"}],
)
def respond(user_message: str) -> anthropic.types.Message:
"""The real user request; benefits from a warm cache."""
return client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": user_message}],
)
# Panaskan cache sebelum lalu lintas pengguna tiba.
prewarm_cache()
# Kemudian, saat pengguna mengirim pesan, prefiks prompt sistem sudah di-cache.
response = respond("How do I implement a binary search tree?")
print(response.content[0].text)Perlu diingat bahwa TTL cache tetap berlaku. Untuk cache 5 menit default, kirim permintaan pre-warm baru setidaknya setiap 5 menit untuk menjaga cache tetap hangat. Untuk jeda yang lebih lama antar permintaan pengguna, gunakan durasi cache 1 jam sebagai gantinya.
Permintaan dengan max_tokens: 0 akan ditolak dengan invalid_request_error jika salah satu dari hal berikut diatur, karena masing-masing menyiratkan output yang tidak dapat dihasilkan oleh anggaran nol token:
stream: truethinking.type: "enabled")output_config.format)tool_choice berupa {"type": "tool", ...} atau {"type": "any"}max_tokens: 0 juga ditolak di dalam permintaan Message Batches. Pre-warming menargetkan time-to-first-token, yang tidak berlaku untuk pemrosesan batch, dan entri cache yang ditulis selama pemrosesan batch kemungkinan besar akan kedaluwarsa sebelum permintaan lanjutan dijalankan.
Sebelum max_tokens: 0 tersedia, beberapa aplikasi menggunakan panggilan warm-up max_tokens: 1 untuk mencapai efek yang sama. Pendekatan max_tokens: 0 lebih disarankan: tidak ada output yang dihasilkan, sehingga tidak ada balasan satu token yang perlu dibuang, tidak ada token output yang ditagih, dan maksud dari permintaan tersebut tidak ambigu.
Untuk membantu Anda memulai dengan caching prompt, prompt caching cookbook menyediakan contoh terperinci dan praktik terbaik.
Cuplikan kode berikut menampilkan berbagai pola caching prompt. Contoh-contoh ini mendemonstrasikan cara mengimplementasikan caching dalam berbagai skenario, membantu Anda memahami penerapan praktis dari fitur ini:
Caching prompt (baik otomatis maupun eksplisit) memenuhi syarat ZDR. Anthropic tidak menyimpan teks mentah dari prompt Anda atau respons Claude.
Representasi cache KV (key-value) dan hash kriptografis dari konten yang di-cache hanya disimpan dalam memori dan tidak disimpan secara permanen. Entri yang di-cache memiliki masa aktif minimum 5 menit (standar) atau 1 jam (diperpanjang), setelah itu entri tersebut akan dihapus dengan segera, meskipun tidak seketika. Entri cache diisolasi antar organisasi dan, pada Claude API, Claude Platform di AWS, dan Microsoft Foundry, antar workspace dalam satu organisasi.
Untuk kelayakan ZDR di semua fitur, lihat API dan retensi data.
Was this page helpful?