cache_control untuk memangkas biaya dan latensi, menggunakan caching otomatis atau breakpoint eksplisit dengan TTL 5 menit atau 1 jam."Prompt caching" (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.
Untuk mengetahui bagaimana zero data retention (ZDR) berlaku pada fitur ini, lihat API dan retensi data.
Ada dua cara untuk mengaktifkan caching prompt:
cache_control di tingkat atas permintaan Anda. Sistem secara otomatis menerapkan cache breakpoint 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 rinci atas apa yang di-cache.Cara paling sederhana untuk memulai adalah dengan caching otomatis:
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5",
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 hidup 5 menit. Cache diperbarui 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 prefiks lengkap
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 berikut 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 5 | $5 / MTok | $6.25 / MTok | $10 / MTok | $0.50 / MTok | $25 / 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 sebelumnya mencerminkan pengali harga berikut untuk caching prompt:
Pengali ini berlaku bersamaan dengan pengubah harga lainnya 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 cache breakpoint ke blok terakhir yang dapat di-cache.
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-5",
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 |
Cache breakpoint secara otomatis berpindah ke blok terakhir yang dapat di-cache pada 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 cache breakpoint eksplisit. Ketika digunakan bersama, cache breakpoint 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-5",
"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, Google Cloud, dan Microsoft Foundry. Amazon Bedrock 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 yang lebih rinci atas apa yang di-cache.
Tempatkan konten statis (definisi alat, instruksi sistem, konteks, contoh) di awal prompt Anda. Tandai akhir dari konten yang dapat digunakan kembali untuk caching menggunakan parameter cache_control.
Prefiks cache dibuat dalam urutan berikut: tools, system, kemudian messages. Urutan ini membentuk hierarki di mana setiap tingkat dibangun di atas tingkat sebelumnya.
Anda dapat menggunakan hanya satu cache breakpoint 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 sebuah blok dengan cache_control menulis tepat satu entri cache: hash dari prefiks yang berakhir di blok tersebut. Sistem tidak menulis entri untuk posisi mana pun yang lebih awal. 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 yang lebih awal 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, sehingga 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 cache breakpoint 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 yang lebih dekat ke posisi tersebut sejak awal sehingga penulisan terakumulasi di sana sebelum Anda membutuhkannya.
Cache breakpoint 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 benar-benar di-cache dan dibaca. Breakpoint 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:
Minimum ini berlaku di setiap platform tempat masing-masing model tersedia.
Prompt yang lebih pendek tidak dapat di-cache, bahkan jika ditandai dengan cache_control. Setiap permintaan untuk meng-cache kurang dari jumlah token ini akan diproses tanpa caching, dan tidak ada error yang dikembalikan. Untuk memverifikasi apakah sebuah 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 sepadan. Pembacaan cache berbiaya jauh lebih rendah 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. Di 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 hidup 5 menit.
Sebagian besar blok dalam permintaan dapat di-cache. Ini termasuk:
toolssystemmessages.content, untuk giliran user maupun assistantmessages.content, dalam giliran usermessages.content, dalam giliran user maupun assistantSetiap elemen ini dapat di-cache, baik secara otomatis maupun 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 di giliran assistant sebelumnya. Ketika di-cache dengan cara ini, blok tersebut DIHITUNG sebagai token input ketika dibaca dari cache.
Blok sub-konten (seperti citations) itu sendiri tidak dapat di-cache secara langsung. Sebagai gantinya, cache blok tingkat atas.
Dalam kasus citations, blok konten dokumen tingkat atas yang berfungsi sebagai materi sumber untuk citations dapat di-cache. Ini memungkinkan Anda menggunakan caching prompt dengan citations secara efektif dengan meng-cache dokumen yang akan direferensikan oleh citations.
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 tingkat membatalkan tingkat tersebut dan semua tingkat berikutnya.
Tabel berikut menunjukkan bagian cache mana yang dibatalkan oleh berbagai jenis perubahan. ✘ menunjukkan bahwa cache dibatalkan, sementara ✓ 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 citations | ✓ | ✘ | ✘ | Mengaktifkan/menonaktifkan citations memodifikasi prompt sistem |
| Pengaturan speed | ✓ | ✘ | ✘ | Beralih antara speed: "fast" dan kecepatan standar membatalkan cache system dan message |
| Tool choice | ✓ | ✓ | ✘ | Perubahan pada parameter tool_choice hanya memengaruhi blok message |
| Gambar | ✓ | ✓ | ✘ | Menambah/menghapus gambar di mana pun dalam prompt memengaruhi blok message |
| Parameter thinking | Tergantung model | Tergantung model | ✘ | Konfigurasi thinking (mode, dan budget_tokens dalam mode extended) dirender ke dalam prompt, jadi mengubahnya selalu membatalkan blok message; cache tool dan system juga dibatalkan pada model yang merender konfigurasi di depannya. Lihat Thinking dan caching prompt. |
| Pengaturan effort | Tergantung model | Tergantung model | ✘ | Mengubah nilai output_config.effort selalu membatalkan blok message, dengan efek tergantung model yang sama pada cache tool dan system seperti parameter thinking. Menetapkan effort secara eksplisit ke default model setara dengan menghilangkannya dan tidak membatalkan. |
| 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 yang lebih lama 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 Fable 5, Claude Mythos 5, Claude Opus 4.8, dan Claude Opus 5, Anda dapat menambahkan instruksi sistem baru di tengah percakapan tanpa membatalkan cache system atau message. Tambahkan pesan {"role": "system"} ke messages alih-alih mengedit field system tingkat atas, sehingga prefiks yang di-cache tetap tidak berubah. Fitur ini tidak tersedia pada Claude Sonnet 5; gunakan field system tingkat atas sebagai gantinya. Lihat Pesan sistem di tengah percakapan.
Pantau kinerja cache menggunakan field respons API berikut, 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 cache breakpoint terakhir).Memahami rincian token
Field input_tokens hanya merepresentasikan token yang datang setelah cache breakpoint 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 cache breakpoint):
cache_read_input_tokens: 100.000cache_creation_input_tokens: 0input_tokens: 50Ini penting untuk memahami baik biaya maupun batas laju, karena input_tokens biasanya akan jauh lebih kecil dari total input Anda ketika menggunakan caching secara efektif.
Ketika menggunakan thinking dengan caching prompt, blok thinking memiliki perilaku khusus:
Caching otomatis bersama konten lain: Meskipun blok thinking tidak dapat ditandai secara eksplisit 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 usage 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 yang lebih lama 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 rinci, lihat Thinking dan caching prompt.
Mulai 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. Mulai 5 Februari 2026, cache juga diisolasi per workspace dalam sebuah 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 kinerja caching prompt:
Sesuaikan strategi caching prompt Anda dengan skenario Anda:
Jika mengalami perilaku yang tidak terduga:
Diagnostik cache (beta) membuat API membandingkan permintaan berurutan 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, penggunaan gambar, konfigurasi thinking, dan output_config.effort 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, yang memerlukan pembuatan entri cache baru. 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, Amazon Bedrock, Amazon Bedrock (Opus 4.6 dan sebelumnya), Claude Platform on AWS, 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 mencakup 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 Penggunaan alat dengan caching prompt.
Jika Anda memiliki prompt yang digunakan dengan irama teratur (yaitu, prompt sistem yang digunakan lebih sering dari setiap 5 menit), terus gunakan cache 5 menit, karena ini akan terus diperbarui tanpa biaya tambahan.
Cache 1 jam paling baik digunakan dalam skenario berikut:
Cache 5 menit dan 1 jam berperilaku sama dalam hal 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 yang 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 tiga 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.
Pra-pemanasan cache (cache pre-warming) 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.
Atur max_tokens: 0 dalam permintaan Anda. API membaca prompt Anda ke dalam model dan menulis cache pada setiap breakpoint cache_control, lalu langsung mengembalikan respons 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 akan dikunci ke placeholder dan permintaan lanjutan tidak akan mengenainya. Gunakan juga konfigurasi thinking dan output_config.effort yang sama dengan permintaan lanjutan Anda: nilai-nilai tersebut dirender ke dalam prompt (lihat Apa yang membatalkan cache), sehingga pre-warm dengan konfigurasi yang berbeda dapat menulis entri yang tidak pernah dikenai oleh lalu lintas nyata Anda. Ini berarti menggunakan breakpoint cache eksplisit alih-alih caching otomatis, karena caching otomatis menempatkan breakpoint pada blok terakhir, yang dalam hal ini 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 bahwa penulisan terjadi. Nol token output yang ditagih.
client = anthropic.Anthropic()
# Jalankan ini sebelum pengguna datang untuk memanaskan cache prompt sistem bersama.
prewarm = client.messages.create(
model="claude-opus-5",
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-5",
"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 saat aplikasi Anda dimulai (atau pada interval terjadwal), lalu kirim permintaan pengguna yang sebenarnya 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-5",
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-5",
max_tokens=1024,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": user_message}],
)
# Panaskan cache sebelum ada lalu lintas pengguna yang masuk.
prewarm_cache()
# Nantinya, saat pengguna mengirim pesan, prefiks prompt sistem sudah ter-cache.
response = respond("How do I implement a binary search tree?")
for block in response.content:
if block.type == "text":
print(block.text)Perlu diingat bahwa TTL cache tetap berlaku. Untuk cache default 5 menit, kirim permintaan pre-warm baru setidaknya setiap 5 menit untuk menjaga cache tetap hangat. Untuk jeda yang lebih lama antara permintaan pengguna, gunakan durasi cache 1 jam sebagai gantinya.
Permintaan max_tokens: 0 ditolak dengan invalid_request_error jika salah satu dari berikut ini diatur, karena masing-masing menyiratkan output yang tidak dapat dihasilkan oleh anggaran nol token:
stream: truethinking.type: "enabled")output_config.format)tool_choice dengan nilai {"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, cookbook caching prompt menyediakan contoh terperinci dan praktik terbaik.
Cuplikan kode berikut menampilkan berbagai pola caching prompt. Contoh-contoh ini menunjukkan cara mengimplementasikan caching dalam skenario yang berbeda, 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 hidup minimum 5 menit (standar) atau 1 jam (diperpanjang), setelah itu entri tersebut segera, meskipun tidak seketika, dihapus. Entri cache diisolasi antar organisasi dan, pada Claude API, Claude Platform di AWS, dan Microsoft Foundry, antar workspace dalam suatu organisasi.
Untuk kelayakan ZDR di semua fitur, lihat API dan retensi data.
Was this page helpful?