Penyimpanan cache prompt adalah fitur canggih yang mengoptimalkan penggunaan API Anda dengan memungkinkan melanjutkan dari awalan tertentu dalam prompt Anda. Pendekatan ini secara signifikan mengurangi waktu pemrosesan dan biaya untuk tugas berulang atau prompt dengan elemen yang konsisten. Berikut adalah contoh cara mengimplementasikan penyimpanan cache prompt dengan Messages API menggunakan blok cache_control:
curl https://api.anthropic.com/v1/messages \
  -H "content-type: application/json" \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "system": [
      {
        "type": "text",
        "text": "You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.\n"
      },
      {
        "type": "text",
        "text": "<the entire contents of Pride and Prejudice>",
        "cache_control": {"type": "ephemeral"}
      }
    ],
    "messages": [
      {
        "role": "user",
        "content": "Analyze the major themes in Pride and Prejudice."
      }
    ]
  }'

# Call the model again with the same inputs up to the cache checkpoint
curl https://api.anthropic.com/v1/messages # rest of input
JSON
{"cache_creation_input_tokens":188086,"cache_read_input_tokens":0,"input_tokens":21,"output_tokens":393}
{"cache_creation_input_tokens":0,"cache_read_input_tokens":188086,"input_tokens":21,"output_tokens":393}
Dalam contoh ini, seluruh teks “Pride and Prejudice” disimpan dalam cache menggunakan parameter cache_control. Ini memungkinkan penggunaan ulang teks besar ini di berbagai panggilan API tanpa memproses ulang setiap kali. Mengubah hanya pesan pengguna memungkinkan Anda untuk mengajukan berbagai pertanyaan tentang buku sambil memanfaatkan konten yang disimpan dalam cache, yang menghasilkan respons lebih cepat dan efisiensi yang ditingkatkan.

Cara kerja penyimpanan cache prompt

Ketika Anda mengirim permintaan dengan penyimpanan cache prompt diaktifkan:
  1. Sistem memeriksa apakah awalan prompt, hingga titik henti cache yang ditentukan, sudah disimpan dalam cache dari kueri baru-baru ini.
  2. Jika ditemukan, sistem menggunakan versi yang disimpan dalam cache, mengurangi waktu pemrosesan dan biaya.
  3. Jika tidak, sistem memproses prompt lengkap dan menyimpan awalan dalam cache setelah respons dimulai.
Ini sangat berguna untuk:
  • Prompt dengan banyak contoh
  • Jumlah besar konteks atau informasi latar belakang
  • Tugas berulang dengan instruksi yang konsisten
  • Percakapan multi-putaran yang panjang
Secara default, cache memiliki masa pakai 5 menit. Cache disegarkan tanpa biaya tambahan setiap kali konten yang disimpan dalam cache digunakan.
Jika Anda menemukan bahwa 5 menit terlalu singkat, Anthropic juga menawarkan durasi cache 1 jam dengan biaya tambahan. Cache 1 jam saat ini dalam versi beta.Untuk informasi lebih lanjut, lihat durasi cache 1 jam.
Penyimpanan cache prompt menyimpan awalan lengkap dalam cachePenyimpanan cache prompt mereferensikan seluruh prompt - tools, system, dan messages (dalam urutan itu) hingga dan termasuk blok yang ditunjuk dengan cache_control.

Harga

Penyimpanan cache prompt memperkenalkan struktur harga baru. Tabel di bawah menunjukkan harga per juta token untuk setiap model yang didukung:
ModelBase Input Tokens5m Cache Writes1h Cache WritesCache Hits & RefreshesOutput Tokens
Claude Opus 4.1$15 / MTok$18.75 / MTok$30 / MTok$1.50 / MTok$75 / MTok
Claude Opus 4$15 / MTok$18.75 / MTok$30 / MTok$1.50 / MTok$75 / MTok
Claude Sonnet 4.5$3 / MTok$3.75 / MTok$6 / MTok$0.30 / MTok$15 / MTok
Claude Sonnet 4$3 / MTok$3.75 / MTok$6 / MTok$0.30 / MTok$15 / MTok
Claude Sonnet 3.7 (deprecated)$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$0.80 / MTok$1 / MTok$1.6 / MTok$0.08 / MTok$4 / MTok
Claude Opus 3 (deprecated)$15 / MTok$18.75 / MTok$30 / MTok$1.50 / MTok$75 / MTok
Claude Haiku 3$0.25 / MTok$0.30 / MTok$0.50 / MTok$0.03 / MTok$1.25 / MTok
Tabel di atas mencerminkan pengganda harga berikut untuk penyimpanan cache prompt:
  • Token penulisan cache 5 menit adalah 1,25 kali harga token input dasar
  • Token penulisan cache 1 jam adalah 2 kali harga token input dasar
  • Token pembacaan cache adalah 0,1 kali harga token input dasar

Cara mengimplementasikan penyimpanan cache prompt

Model yang didukung

Penyimpanan cache prompt saat ini didukung pada:
  • Claude Opus 4.1
  • Claude Opus 4
  • Claude Sonnet 4.5
  • Claude Sonnet 4
  • Claude Sonnet 3.7
  • Claude Haiku 4.5
  • Claude Haiku 3.5
  • Claude Haiku 3
  • Claude Opus 3 (deprecated)

Menyusun prompt Anda

Tempatkan konten statis (definisi alat, instruksi sistem, konteks, contoh) di awal prompt Anda. Tandai akhir konten yang dapat digunakan kembali untuk penyimpanan cache menggunakan parameter cache_control. Awalan cache dibuat dalam urutan berikut: tools, system, kemudian messages. Urutan ini membentuk hierarki di mana setiap level dibangun di atas yang sebelumnya.

Cara kerja pemeriksaan awalan otomatis

Anda dapat menggunakan hanya satu titik henti cache di akhir konten statis Anda, dan sistem akan secara otomatis menemukan awalan yang cocok paling lama. Memahami cara kerjanya membantu Anda mengoptimalkan strategi penyimpanan cache Anda. Tiga prinsip inti:
  1. Kunci cache bersifat kumulatif: Ketika Anda secara eksplisit menyimpan blok dalam cache dengan cache_control, kunci hash cache dihasilkan dengan melakukan hash semua blok sebelumnya dalam percakapan secara berurutan. Ini berarti cache untuk setiap blok bergantung pada semua konten yang datang sebelumnya.
  2. Pemeriksaan berurutan mundur: Sistem memeriksa cache hit dengan bekerja mundur dari titik henti eksplisit Anda, memeriksa setiap blok sebelumnya dalam urutan terbalik. Ini memastikan Anda mendapatkan cache hit terpanjang yang mungkin.
  3. Jendela lookback 20 blok: Sistem hanya memeriksa hingga 20 blok sebelum setiap titik henti cache_control eksplisit. Setelah memeriksa 20 blok tanpa kecocokan, sistem berhenti memeriksa dan beralih ke titik henti eksplisit berikutnya (jika ada).
Contoh: Memahami jendela lookback Pertimbangkan percakapan dengan 30 blok konten di mana Anda menetapkan cache_control hanya pada blok 30:
  • Jika Anda mengirim blok 31 tanpa perubahan pada blok sebelumnya: Sistem memeriksa blok 30 (cocok!). Anda mendapatkan cache hit pada blok 30, dan hanya blok 31 yang perlu diproses.
  • Jika Anda memodifikasi blok 25 dan mengirim blok 31: Sistem memeriksa mundur dari blok 30 → 29 → 28… → 25 (tidak cocok) → 24 (cocok!). Karena blok 24 belum berubah, Anda mendapatkan cache hit pada blok 24, dan hanya blok 25-30 yang perlu diproses ulang.
  • Jika Anda memodifikasi blok 5 dan mengirim blok 31: Sistem memeriksa mundur dari blok 30 → 29 → 28… → 11 (pemeriksaan #20). Setelah 20 pemeriksaan tanpa menemukan kecocokan, sistem berhenti mencari. Karena blok 5 berada di luar jendela 20 blok, tidak ada cache hit dan semua blok perlu diproses ulang. Namun, jika Anda telah menetapkan titik henti cache_control eksplisit pada blok 5, sistem akan terus memeriksa dari titik henti itu: blok 5 (tidak cocok) → blok 4 (cocok!). Ini memungkinkan cache hit pada blok 4, menunjukkan mengapa Anda harus menempatkan titik henti sebelum konten yang dapat diedit.
Kesimpulan utama: Selalu tetapkan titik henti cache eksplisit di akhir percakapan Anda untuk memaksimalkan peluang cache hit. Selain itu, tetapkan titik henti tepat sebelum blok konten yang mungkin dapat diedit untuk memastikan bagian tersebut dapat disimpan dalam cache secara independen.

Kapan menggunakan beberapa titik henti

Anda dapat menentukan hingga 4 titik henti cache jika Anda ingin:
  • Menyimpan bagian berbeda yang berubah pada frekuensi berbeda dalam cache (misalnya, alat jarang berubah, tetapi konteks diperbarui setiap hari)
  • Memiliki kontrol lebih besar atas apa yang disimpan dalam cache
  • Memastikan penyimpanan cache untuk konten lebih dari 20 blok sebelum titik henti cache Anda
  • Menempatkan titik henti sebelum konten yang dapat diedit untuk menjamin cache hit bahkan ketika perubahan terjadi di luar jendela 20 blok
Batasan penting: Jika prompt Anda memiliki lebih dari 20 blok konten sebelum titik henti cache Anda, dan Anda memodifikasi konten lebih awal dari 20 blok tersebut, Anda tidak akan mendapatkan cache hit kecuali Anda menambahkan titik henti eksplisit tambahan lebih dekat ke konten itu.

Batasan cache

Panjang prompt yang dapat disimpan dalam cache minimum adalah:
  • 1024 token untuk Claude Opus 4.1, Claude Opus 4, Claude Sonnet 4.5, Claude Sonnet 4, Claude Sonnet 3.7 (deprecated), dan Claude Opus 3 (deprecated)
  • 4096 token untuk Claude Haiku 4.5
  • 2048 token untuk Claude Haiku 3.5 dan Claude Haiku 3
Prompt yang lebih pendek tidak dapat disimpan dalam cache, bahkan jika ditandai dengan cache_control. Permintaan apa pun untuk menyimpan lebih sedikit dari jumlah token ini dalam cache akan diproses tanpa penyimpanan cache. Untuk melihat apakah prompt disimpan dalam cache, lihat field penggunaan respons. 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 jenis cache yang didukung, yang secara default memiliki masa pakai 5 menit.

Memahami biaya titik henti cache

Titik henti cache itu sendiri tidak menambah biaya apa pun. Anda hanya dikenakan biaya untuk:
  • Penulisan cache: Ketika konten baru ditulis ke cache (25% lebih banyak dari token input dasar untuk TTL 5 menit)
  • Pembacaan cache: Ketika konten yang disimpan dalam cache digunakan (10% dari harga token input dasar)
  • Token input reguler: Untuk konten apa pun yang tidak disimpan dalam cache
Menambahkan lebih banyak titik henti cache_control tidak meningkatkan biaya Anda - Anda masih membayar jumlah yang sama berdasarkan konten apa yang benar-benar disimpan dalam cache dan dibaca. Titik henti hanya memberi Anda kontrol atas bagian mana yang dapat disimpan dalam cache secara independen.

Apa yang dapat disimpan dalam cache

Sebagian besar blok dalam permintaan dapat ditunjuk untuk penyimpanan cache dengan cache_control. Ini termasuk:
  • Alat: Definisi alat dalam array tools
  • Pesan sistem: Blok konten dalam array system
  • Pesan teks: Blok konten dalam array messages.content, untuk putaran pengguna dan asisten
  • Gambar & Dokumen: Blok konten dalam array messages.content, dalam putaran pengguna
  • Penggunaan alat dan hasil alat: Blok konten dalam array messages.content, dalam putaran pengguna dan asisten
Setiap elemen ini dapat ditandai dengan cache_control untuk mengaktifkan penyimpanan cache untuk bagian permintaan itu.

Apa yang tidak dapat disimpan dalam cache

Meskipun sebagian besar blok permintaan dapat disimpan dalam cache, ada beberapa pengecualian:
  • Blok pemikiran tidak dapat disimpan dalam cache secara langsung dengan cache_control. Namun, blok pemikiran DAPAT disimpan dalam cache bersama konten lain ketika muncul dalam putaran asisten sebelumnya. Ketika disimpan dengan cara ini, mereka MENGHITUNG sebagai token input ketika dibaca dari cache.
  • Blok sub-konten (seperti citations) itu sendiri tidak dapat disimpan dalam cache secara langsung. Sebagai gantinya, simpan blok tingkat atas dalam cache. Dalam kasus kutipan, blok konten dokumen tingkat atas yang berfungsi sebagai materi sumber untuk kutipan dapat disimpan dalam cache. Ini memungkinkan Anda menggunakan penyimpanan cache prompt dengan kutipan secara efektif dengan menyimpan dokumen yang akan direferensikan oleh kutipan dalam cache.
  • Blok teks kosong tidak dapat disimpan dalam cache.

Apa yang membatalkan cache

Modifikasi konten yang disimpan dalam cache dapat membatalkan sebagian atau seluruh cache. Seperti dijelaskan dalam Menyusun prompt Anda, cache mengikuti hierarki: toolssystemmessages. Perubahan di setiap level membatalkan level itu dan semua level 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 berubahCache alatCache sistemCache pesanDampak
Definisi alatMemodifikasi definisi alat (nama, deskripsi, parameter) membatalkan seluruh cache
Tombol pencarian webMengaktifkan/menonaktifkan pencarian web memodifikasi prompt sistem
Tombol kutipanMengaktifkan/menonaktifkan kutipan memodifikasi prompt sistem
Pilihan alatPerubahan pada parameter tool_choice hanya mempengaruhi blok pesan
GambarMenambahkan/menghapus gambar di mana pun dalam prompt mempengaruhi blok pesan
Parameter pemikiranPerubahan pada pengaturan pemikiran yang diperluas (aktifkan/nonaktifkan, anggaran) mempengaruhi blok pesan
Hasil non-alat yang diteruskan ke permintaan pemikiran yang diperluasKetika hasil non-alat diteruskan dalam permintaan saat pemikiran yang diperluas diaktifkan, semua blok pemikiran yang sebelumnya disimpan dalam cache dihapus dari konteks, dan pesan apa pun dalam konteks yang mengikuti blok pemikiran tersebut dihapus dari cache. Untuk detail lebih lanjut, lihat Penyimpanan cache dengan blok pemikiran.

Melacak kinerja cache

Pantau kinerja cache menggunakan field respons API ini, dalam usage dalam respons (atau event message_start jika 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.

Praktik terbaik untuk penyimpanan cache yang efektif

Untuk mengoptimalkan kinerja penyimpanan cache prompt:
  • Simpan konten stabil dan dapat digunakan kembali seperti instruksi sistem, informasi latar belakang, konteks besar, atau definisi alat yang sering digunakan dalam cache.
  • Tempatkan konten yang disimpan dalam cache di awal prompt untuk kinerja terbaik.
  • Gunakan titik henti cache secara strategis untuk memisahkan bagian awalan yang berbeda yang dapat disimpan dalam cache.
  • Tetapkan titik henti cache di akhir percakapan dan tepat sebelum konten yang dapat diedit untuk memaksimalkan tingkat cache hit, terutama saat bekerja dengan prompt yang memiliki lebih dari 20 blok konten.
  • Secara teratur analisis tingkat cache hit dan sesuaikan strategi Anda sesuai kebutuhan.

Mengoptimalkan untuk kasus penggunaan yang berbeda

Sesuaikan strategi penyimpanan cache prompt Anda dengan skenario Anda:
  • Agen percakapan: Kurangi biaya dan latensi untuk percakapan yang diperpanjang, terutama yang memiliki instruksi panjang atau dokumen yang diunggah.
  • Asisten pengkodean: Tingkatkan pelengkapan otomatis dan Q&A basis kode dengan menyimpan bagian yang relevan atau versi ringkasan basis kode dalam prompt.
  • Pemrosesan dokumen besar: Gabungkan materi bentuk panjang lengkap termasuk gambar dalam prompt Anda tanpa meningkatkan latensi respons.
  • Set instruksi terperinci: Bagikan daftar instruksi, prosedur, dan contoh yang luas untuk menyempurnakan respons Claude. Pengembang sering menyertakan satu atau dua contoh dalam prompt, tetapi dengan penyimpanan cache prompt Anda dapat mencapai kinerja yang lebih baik dengan menyertakan 20+ contoh beragam jawaban berkualitas tinggi.
  • Penggunaan alat agentic: Tingkatkan kinerja untuk skenario yang melibatkan beberapa panggilan alat dan perubahan kode berulang, di mana setiap langkah biasanya memerlukan panggilan API baru.
  • Berbicara dengan buku, makalah, dokumentasi, transkrip podcast, dan konten bentuk panjang lainnya: Hidupkan basis pengetahuan apa pun dengan menyematkan seluruh dokumen ke dalam prompt, dan biarkan pengguna mengajukan pertanyaan kepadanya.

Pemecahan masalah masalah umum

Jika mengalami perilaku yang tidak terduga:
  • Pastikan bagian yang disimpan dalam cache identik dan ditandai dengan cache_control di lokasi yang sama di seluruh panggilan
  • Periksa bahwa panggilan dilakukan dalam masa pakai cache (5 menit secara default)
  • Verifikasi bahwa tool_choice dan penggunaan gambar tetap konsisten di antara panggilan
  • Validasi bahwa Anda menyimpan setidaknya jumlah token minimum dalam cache
  • Sistem secara otomatis memeriksa cache hit pada batas blok konten sebelumnya (hingga ~20 blok sebelum titik henti Anda). Untuk prompt dengan lebih dari 20 blok konten, Anda mungkin memerlukan parameter cache_control tambahan lebih awal dalam prompt untuk memastikan semua konten dapat disimpan dalam cache
  • Verifikasi bahwa kunci dalam blok konten tool_use Anda memiliki urutan yang stabil karena beberapa bahasa (misalnya Swift, Go) mengacak urutan kunci selama konversi JSON, memecahkan cache
Perubahan pada tool_choice atau kehadiran/ketiadaan gambar di mana pun dalam prompt akan membatalkan cache, memerlukan entri cache baru untuk dibuat. Untuk detail lebih lanjut tentang pembatalan cache, lihat Apa yang membatalkan cache.

Penyimpanan cache dengan blok pemikiran

Ketika menggunakan pemikiran yang diperluas dengan penyimpanan cache prompt, blok pemikiran memiliki perilaku khusus: Penyimpanan cache otomatis bersama konten lain: Meskipun blok pemikiran tidak dapat secara eksplisit ditandai dengan cache_control, mereka disimpan dalam cache sebagai bagian dari konten permintaan ketika Anda membuat panggilan API berikutnya dengan hasil alat. Ini biasanya terjadi selama penggunaan alat ketika Anda meneruskan blok pemikiran kembali untuk melanjutkan percakapan. Penghitungan token input: Ketika blok pemikiran dibaca dari cache, mereka menghitung sebagai token input dalam metrik penggunaan Anda. Ini penting untuk perhitungan biaya dan anggaran token. Pola pembatalan cache:
  • Cache tetap valid ketika hanya hasil alat yang disediakan sebagai pesan pengguna
  • Cache dibatalkan ketika konten pengguna non-hasil-alat ditambahkan, menyebabkan semua blok pemikiran sebelumnya dihapus
  • Perilaku penyimpanan cache ini terjadi bahkan tanpa penanda cache_control eksplisit
Untuk 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]
# Non-tool-result user block causes all thinking blocks to be ignored
# This request is processed as if thinking blocks were never present
Ketika blok pengguna non-hasil-alat disertakan, itu menunjuk loop asisten baru dan semua blok pemikiran sebelumnya dihapus dari konteks. Untuk informasi lebih terperinci, lihat dokumentasi pemikiran yang diperluas.

Penyimpanan cache dan berbagi

  • Isolasi Organisasi: Cache terisolasi antara organisasi. Organisasi yang berbeda tidak pernah berbagi cache, bahkan jika mereka menggunakan prompt yang identik.
  • Pencocokan Tepat: Cache hit memerlukan segmen prompt yang 100% identik, termasuk semua teks dan gambar hingga dan termasuk blok yang ditandai dengan kontrol cache.
  • Pembuatan Token Output: Penyimpanan cache prompt tidak memiliki efek pada pembuatan token output. Respons yang Anda terima akan identik dengan apa yang Anda dapatkan jika penyimpanan cache prompt tidak digunakan.

Durasi cache 1 jam

Jika Anda menemukan bahwa 5 menit terlalu singkat, Anthropic juga menawarkan durasi cache 1 jam dengan biaya tambahan. Untuk menggunakan cache yang diperluas, sertakan ttl dalam definisi cache_control seperti ini:
"cache_control": {
    "type": "ephemeral",
    "ttl": "5m" | "1h"
}
Respons akan mencakup informasi cache terperinci seperti berikut:
{
    "usage": {
        "input_tokens": ...,
        "cache_read_input_tokens": ...,
        "cache_creation_input_tokens": ...,
        "output_tokens": ...,

        "cache_creation": {
            "ephemeral_5m_input_tokens": 456,
            "ephemeral_1h_input_tokens": 100,
        }
    }
}
Perhatikan bahwa field cache_creation_input_tokens saat ini sama dengan jumlah nilai dalam objek cache_creation.

Kapan menggunakan cache 1 jam

Jika Anda memiliki prompt yang digunakan pada ritme reguler (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:
  • Ketika Anda memiliki prompt yang kemungkinan digunakan kurang sering dari 5 menit, tetapi lebih sering dari setiap jam. Misalnya, ketika agen samping agentic akan memakan waktu lebih dari 5 menit, atau ketika menyimpan percakapan obrolan panjang dengan pengguna dan Anda umumnya mengharapkan pengguna itu mungkin tidak merespons dalam 5 menit berikutnya.
  • Ketika latensi penting dan prompt tindak lanjut Anda mungkin dikirim di luar 5 menit.
  • Ketika Anda ingin meningkatkan pemanfaatan batas laju Anda, karena cache hit tidak dikurangkan dari batas laju Anda.
Cache 5 menit dan 1 jam berperilaku sama sehubungan dengan latensi. Anda umumnya akan melihat waktu-ke-token-pertama yang ditingkatkan untuk dokumen panjang.

Mencampur TTL yang berbeda

Anda dapat menggunakan kontrol cache 1 jam dan 5 menit dalam permintaan yang sama, tetapi dengan batasan penting: Entri cache dengan TTL lebih lama harus muncul sebelum TTL lebih pendek (yaitu, entri cache 1 jam harus muncul sebelum entri cache 5 menit apa pun). Ketika mencampur TTL, kami menentukan tiga lokasi penagihan dalam prompt Anda:
  1. Posisi A: Jumlah token pada cache hit tertinggi (atau 0 jika tidak ada hit).
  2. Posisi B: Jumlah token pada blok cache_control 1 jam tertinggi setelah A (atau sama dengan A jika tidak ada).
  3. Posisi C: Jumlah token pada blok cache_control terakhir.
Jika B dan/atau C lebih besar dari A, mereka harus berupa cache miss, karena A adalah cache hit tertinggi.
Anda akan dikenakan biaya untuk:
  1. Token pembacaan cache untuk A.
  2. Token penulisan cache 1 jam untuk (B - A).
  3. Token penulisan cache 5 menit untuk (C - B).
Berikut adalah 3 contoh. Ini menggambarkan token input dari 3 permintaan, masing-masing memiliki cache hit dan cache miss yang berbeda. Masing-masing memiliki penagihan yang dihitung berbeda, ditunjukkan dalam kotak berwarna, sebagai hasilnya. Mixing TTLs Diagram

Contoh penyimpanan cache prompt

Untuk membantu Anda memulai dengan penyimpanan cache prompt, kami telah menyiapkan buku resep penyimpanan cache prompt dengan contoh terperinci dan praktik terbaik. Di bawah ini, kami telah menyertakan beberapa cuplikan kode yang menampilkan berbagai pola penyimpanan cache prompt. Contoh-contoh ini menunjukkan cara mengimplementasikan penyimpanan cache dalam skenario berbeda, membantu Anda memahami aplikasi praktis dari fitur ini:
curl https://api.anthropic.com/v1/messages \
     --header "x-api-key: $ANTHROPIC_API_KEY" \
     --header "anthropic-version: 2023-06-01" \
     --header "content-type: application/json" \
     --data \
'{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "system": [
        {
            "type": "text",
            "text": "You are an AI assistant tasked with analyzing legal documents."
        },
        {
            "type": "text",
            "text": "Here is the full text of a complex legal agreement: [Insert full text of a 50-page legal agreement here]",
            "cache_control": {"type": "ephemeral"}
        }
    ],
    "messages": [
        {
            "role": "user",
            "content": "What are the key terms and conditions in this agreement?"
        }
    ]
}'
Contoh ini menunjukkan penggunaan penyimpanan cache prompt dasar, menyimpan teks lengkap perjanjian hukum sebagai awalan sambil menjaga instruksi pengguna tidak disimpan dalam cache.Untuk permintaan pertama:
  • input_tokens: Jumlah token dalam pesan pengguna saja
  • cache_creation_input_tokens: Jumlah token dalam seluruh pesan sistem, termasuk dokumen hukum
  • cache_read_input_tokens: 0 (tidak ada cache hit pada permintaan pertama)
Untuk permintaan berikutnya dalam masa pakai cache:
  • input_tokens: Jumlah token dalam pesan pengguna saja
  • cache_creation_input_tokens: 0 (tidak ada pembuatan cache baru)
  • cache_read_input_tokens: Jumlah token dalam seluruh pesan sistem yang disimpan dalam cache
curl https://api.anthropic.com/v1/messages \
     --header "x-api-key: $ANTHROPIC_API_KEY" \
     --header "anthropic-version: 2023-06-01" \
     --header "content-type: application/json" \
     --data \
'{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "tools": [
        {
            "name": "get_weather",
            "description": "Get the current weather in a given location",
            "input_schema": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "The city and state, e.g. San Francisco, CA"
                    },
                    "unit": {
                        "type": "string",
                        "enum": ["celsius", "fahrenheit"],
                        "description": "The unit of temperature, either celsius or fahrenheit"
                    }
                },
                "required": ["location"]
            }
        },
        # many more tools
        {
            "name": "get_time",
            "description": "Get the current time in a given time zone",
            "input_schema": {
                "type": "object",
                "properties": {
                    "timezone": {
                        "type": "string",
                        "description": "The IANA time zone name, e.g. America/Los_Angeles"
                    }
                },
                "required": ["timezone"]
            },
            "cache_control": {"type": "ephemeral"}
        }
    ],
    "messages": [
        {
            "role": "user",
            "content": "What is the weather and time in New York?"
        }
    ]
}'
Dalam contoh ini, kami menunjukkan penyimpanan cache definisi alat.Parameter cache_control ditempatkan pada alat terakhir (get_time) untuk menunjuk semua alat sebagai bagian dari awalan statis.Ini berarti semua definisi alat, termasuk get_weather dan alat lain apa pun yang ditentukan sebelum get_time, akan disimpan dalam cache sebagai satu awalan.Pendekatan ini berguna ketika Anda memiliki set alat yang konsisten yang ingin Anda gunakan kembali di berbagai permintaan tanpa memproses ulang setiap kali.Untuk permintaan pertama:
  • input_tokens: Jumlah token dalam pesan pengguna
  • cache_creation_input_tokens: Jumlah token dalam semua definisi alat dan prompt sistem
  • cache_read_input_tokens: 0 (tidak ada cache hit pada permintaan pertama)
Untuk permintaan berikutnya dalam masa pakai cache:
  • input_tokens: Jumlah token dalam pesan pengguna
  • cache_creation_input_tokens: 0 (tidak ada pembuatan cache baru)
  • cache_read_input_tokens: Jumlah token dalam semua definisi alat dan prompt sistem yang disimpan dalam cache
curl https://api.anthropic.com/v1/messages \
     --header "x-api-key: $ANTHROPIC_API_KEY" \
     --header "anthropic-version: 2023-06-01" \
     --header "content-type: application/json" \
     --data \
'{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "system": [
        {
            "type": "text",
            "text": "...long system prompt",
            "cache_control": {"type": "ephemeral"}
        }
    ],
    "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "Hello, can you tell me more about the solar system?",
                }
            ]
        },
        {
            "role": "assistant",
            "content": "Certainly! The solar system is the collection of celestial bodies that orbit our Sun. It consists of eight planets, numerous moons, asteroids, comets, and other objects. The planets, in order from closest to farthest from the Sun, are: Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, and Neptune. Each planet has its own unique characteristics and features. Is there a specific aspect of the solar system you would like to know more about?"
        },
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "Good to know."
                },
                {
                    "type": "text",
                    "text": "Tell me more about Mars.",
                    "cache_control": {"type": "ephemeral"}
                }
            ]
        }
    ]
}'
Dalam contoh ini, kami menunjukkan cara menggunakan penyimpanan cache prompt dalam percakapan multi-putaran.Selama setiap putaran, kami menandai blok terakhir dari pesan terakhir dengan cache_control sehingga percakapan dapat disimpan dalam cache secara bertahap. Sistem akan secara otomatis mencari dan menggunakan awalan yang sebelumnya disimpan dalam cache paling lama untuk pesan tindak lanjut. Artinya, blok yang sebelumnya ditandai dengan blok cache_control kemudian tidak ditandai dengan ini, tetapi mereka masih akan dianggap sebagai cache hit (dan juga penyegaran cache!) jika mereka terkena dalam 5 menit.Selain itu, perhatikan bahwa parameter cache_control ditempatkan pada pesan sistem. Ini untuk memastikan bahwa jika ini dikeluarkan dari cache (setelah tidak digunakan selama lebih dari 5 menit), itu akan ditambahkan kembali ke cache pada permintaan berikutnya.Pendekatan ini berguna untuk mempertahankan konteks dalam percakapan yang sedang berlangsung tanpa berulang kali memproses informasi yang sama.Ketika ini diatur dengan benar, Anda harus melihat yang berikut dalam respons penggunaan setiap permintaan:
  • input_tokens: Jumlah token dalam pesan pengguna baru (akan minimal)
  • cache_creation_input_tokens: Jumlah token dalam putaran asisten dan pengguna baru
  • cache_read_input_tokens: Jumlah token dalam percakapan hingga putaran sebelumnya
curl https://api.anthropic.com/v1/messages \
     --header "x-api-key: $ANTHROPIC_API_KEY" \
     --header "anthropic-version: 2023-06-01" \
     --header "content-type: application/json" \
     --data \
'{
    "model": "claude-sonnet-4-5",
    "max_tokens": 1024,
    "tools": [
        {
            "name": "search_documents",
            "description": "Search through the knowledge base",
            "input_schema": {
                "type": "object",
                "properties": {
                    "query": {
                        "type": "string",
                        "description": "Search query"
                    }
                },
                "required": ["query"]
            }
        },
        {
            "name": "get_document",
            "description": "Retrieve a specific document by ID",
            "input_schema": {
                "type": "object",
                "properties": {
                    "doc_id": {
                        "type": "string",
                        "description": "Document ID"
                    }
                },
                "required": ["doc_id"]
            },
            "cache_control": {"type": "ephemeral"}
        }
    ],
    "system": [
        {
            "type": "text",
            "text": "You are a helpful research assistant with access to a document knowledge base.\n\n# Instructions\n- Always search for relevant documents before answering\n- Provide citations for your sources\n- Be objective and accurate in your responses\n- If multiple documents contain relevant information, synthesize them\n- Acknowledge when information is not available in the knowledge base",
            "cache_control": {"type": "ephemeral"}
        },
        {
            "type": "text",
            "text": "# Knowledge Base Context\n\nHere are the relevant documents for this conversation:\n\n## Document 1: Solar System Overview\nThe solar system consists of the Sun and all objects that orbit it...\n\n## Document 2: Planetary Characteristics\nEach planet has unique features. Mercury is the smallest planet...\n\n## Document 3: Mars Exploration\nMars has been a target of exploration for decades...\n\n[Additional documents...]",
            "cache_control": {"type": "ephemeral"}
        }
    ],
    "messages": [
        {
            "role": "user",
            "content": "Can you search for information about Mars rovers?"
        },
        {
            "role": "assistant",
            "content": [
                {
                    "type": "tool_use",
                    "id": "tool_1",
                    "name": "search_documents",
                    "input": {"query": "Mars rovers"}
                }
            ]
        },
        {
            "role": "user",
            "content": [
                {
                    "type": "tool_result",
                    "tool_use_id": "tool_1",
                    "content": "Found 3 relevant documents: Document 3 (Mars Exploration), Document 7 (Rover Technology), Document 9 (Mission History)"
                }
            ]
        },
        {
            "role": "assistant",
            "content": [
                {
                    "type": "text",
                    "text": "I found 3 relevant documents about Mars rovers. Let me get more details from the Mars Exploration document."
                }
            ]
        },
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "Yes, please tell me about the Perseverance rover specifically.",
                    "cache_control": {"type": "ephemeral"}
                }
            ]
        }
    ]
}'
Contoh komprehensif ini menunjukkan cara menggunakan semua 4 titik henti cache yang tersedia untuk mengoptimalkan bagian berbeda dari prompt Anda:
  1. Cache alat (titik henti cache 1): Parameter cache_control pada definisi alat terakhir menyimpan semua definisi alat dalam cache.
  2. Cache instruksi yang dapat digunakan kembali (titik henti cache 2): Instruksi statis dalam prompt sistem disimpan dalam cache secara terpisah. Instruksi ini jarang berubah di antara permintaan.
  3. Cache konteks RAG (titik henti cache 3): Dokumen basis pengetahuan disimpan dalam cache secara independen, memungkinkan Anda memperbarui dokumen RAG tanpa membatalkan cache alat atau instruksi.
  4. Cache riwayat percakapan (titik henti cache 4): Respons asisten ditandai dengan cache_control untuk mengaktifkan penyimpanan cache bertahap percakapan saat berkembang.
Pendekatan ini memberikan fleksibilitas maksimal:
  • Jika Anda hanya memperbarui pesan pengguna terakhir, keempat segmen cache digunakan kembali
  • Jika Anda memperbarui dokumen RAG tetapi menyimpan alat dan instruksi yang sama, dua segmen cache pertama digunakan kembali
  • Jika Anda mengubah percakapan tetapi menyimpan alat, instruksi, dan dokumen yang sama, tiga segmen pertama digunakan kembali
  • Setiap titik henti cache dapat dibatalkan secara independen berdasarkan apa yang berubah dalam aplikasi Anda
Untuk permintaan pertama:
  • input_tokens: Token dalam pesan pengguna terakhir
  • cache_creation_input_tokens: Token dalam semua segmen yang disimpan dalam cache (alat + instruksi + dokumen RAG + riwayat percakapan)
  • cache_read_input_tokens: 0 (tidak ada cache hit)
Untuk permintaan berikutnya dengan hanya pesan pengguna baru:
  • input_tokens: Token dalam pesan pengguna baru saja
  • cache_creation_input_tokens: Token baru apa pun yang ditambahkan ke riwayat percakapan
  • cache_read_input_tokens: Semua token yang sebelumnya disimpan dalam cache (alat + instruksi + dokumen RAG + percakapan sebelumnya)
Pola ini sangat kuat untuk:
  • Aplikasi RAG dengan konteks dokumen besar
  • Sistem agen yang menggunakan beberapa alat
  • Percakapan yang berjalan lama yang perlu mempertahankan konteks
  • Aplikasi yang perlu mengoptimalkan bagian berbeda dari prompt secara independen

FAQ

Dalam kebanyakan kasus, satu titik henti cache di akhir konten statis Anda sudah cukup. Sistem secara otomatis memeriksa cache hit pada semua batas blok konten sebelumnya (hingga 20 blok sebelum titik henti Anda) dan menggunakan awalan yang cocok paling lama.Anda hanya memerlukan beberapa titik henti jika:
  • Anda memiliki lebih dari 20 blok konten sebelum titik cache yang diinginkan
  • Anda ingin menyimpan bagian yang diperbarui pada frekuensi berbeda dalam cache secara independen
  • Anda memerlukan kontrol eksplisit atas apa yang disimpan dalam cache untuk optimasi biaya
Contoh: Jika Anda memiliki instruksi sistem (jarang berubah) dan konteks RAG (berubah setiap hari), Anda mungkin menggunakan dua titik henti untuk menyimpannya secara terpisah.
Tidak, titik henti cache itu sendiri gratis. Anda hanya membayar untuk:
  • Menulis konten ke cache (25% lebih banyak dari token input dasar untuk TTL 5 menit)
  • Membaca dari cache (10% dari harga token input dasar)
  • Token input reguler untuk konten yang tidak disimpan dalam cache
Jumlah titik henti tidak mempengaruhi harga - hanya jumlah konten yang disimpan dalam cache dan dibaca yang penting.
Masa pakai cache default minimum (TTL) adalah 5 menit. Masa pakai ini disegarkan setiap kali konten yang disimpan dalam cache digunakan.Jika Anda menemukan bahwa 5 menit terlalu singkat, Anthropic juga menawarkan TTL cache 1 jam.
Anda dapat menentukan hingga 4 titik henti cache (menggunakan parameter cache_control) dalam prompt Anda.
Tidak, penyimpanan cache prompt saat ini hanya tersedia untuk Claude Opus 4.1, Claude Opus 4, Claude Sonnet 4.5, Claude Sonnet 4, Claude Sonnet 3.7, Claude Haiku 4.5, Claude Haiku 3.5, Claude Haiku 3, dan Claude Opus 3 (deprecated).
Prompt sistem yang disimpan dalam cache dan alat akan digunakan kembali ketika parameter pemikiran berubah. Namun, perubahan pemikiran (mengaktifkan/menonaktifkan atau perubahan anggaran) akan membatalkan awalan prompt yang sebelumnya disimpan dalam cache dengan konten pesan.Untuk detail lebih lanjut tentang pembatalan cache, lihat Apa yang membatalkan cache.Untuk informasi lebih lanjut tentang pemikiran yang diperluas, termasuk interaksinya dengan penggunaan alat dan penyimpanan cache prompt, lihat dokumentasi pemikiran yang diperluas.
Untuk mengaktifkan penyimpanan cache prompt, sertakan setidaknya satu titik henti cache_control dalam permintaan API Anda.
Ya, penyimpanan cache prompt dapat digunakan bersama fitur API lainnya seperti penggunaan alat dan kemampuan visi. Namun, mengubah apakah ada gambar dalam prompt atau memodifikasi pengaturan penggunaan alat akan memecahkan cache.Untuk detail lebih lanjut tentang pembatalan cache, lihat Apa yang membatalkan cache.
Penyimpanan cache prompt memperkenalkan struktur harga baru di mana penulisan cache biaya 25% lebih banyak dari token input dasar, sementara cache hit biaya hanya 10% dari harga token input dasar.
Saat ini, tidak ada cara untuk menghapus cache secara manual. Awalan yang disimpan dalam cache secara otomatis kedaluwarsa setelah minimal 5 menit tidak aktif.
Anda dapat memantau kinerja cache menggunakan field cache_creation_input_tokens dan cache_read_input_tokens dalam respons API.
Lihat Apa yang membatalkan cache untuk detail lebih lanjut tentang pembatalan cache, termasuk daftar perubahan yang memerlukan pembuatan entri cache baru.
Penyimpanan cache prompt dirancang dengan langkah-langkah privasi dan pemisahan data yang kuat:
  1. Kunci cache dihasilkan menggunakan hash kriptografi prompt hingga titik kontrol cache. Ini berarti hanya permintaan dengan prompt identik yang dapat mengakses cache tertentu.
  2. Cache bersifat spesifik organisasi. Pengguna dalam organisasi yang sama dapat mengakses cache yang sama jika mereka menggunakan prompt identik, tetapi cache tidak dibagikan di seluruh organisasi yang berbeda, bahkan untuk prompt identik.
  3. Mekanisme penyimpanan cache dirancang untuk mempertahankan integritas dan privasi setiap percakapan atau konteks unik.
  4. Aman untuk menggunakan cache_control di mana pun dalam prompt Anda. Untuk efisiensi biaya, lebih baik mengecualikan bagian yang sangat variabel (misalnya, input arbitrer pengguna) dari penyimpanan cache.
Langkah-langkah ini memastikan bahwa penyimpanan cache prompt mempertahankan privasi dan keamanan data sambil menawarkan manfaat kinerja.
Ya, dimungkinkan untuk menggunakan penyimpanan cache prompt dengan permintaan Batches API Anda. Namun, karena permintaan batch asinkron dapat diproses secara bersamaan dan dalam urutan apa pun, cache hit disediakan atas dasar upaya terbaik.Cache 1 jam dapat membantu meningkatkan cache hit Anda. Cara paling hemat biaya untuk menggunakannya adalah sebagai berikut:
  • Kumpulkan set permintaan pesan yang memiliki awalan bersama.
  • Kirim permintaan batch dengan hanya satu permintaan yang memiliki awalan bersama ini dan blok cache 1 jam. Ini akan ditulis ke cache 1 jam.
  • Segera setelah selesai, kirimkan permintaan lainnya. Anda harus memantau pekerjaan untuk mengetahui kapan selesai.
Ini biasanya lebih baik daripada menggunakan cache 5 menit hanya karena umum untuk permintaan batch memakan waktu antara 5 menit dan 1 jam untuk diselesaikan. Kami mempertimbangkan cara untuk meningkatkan tingkat cache hit ini dan membuat proses ini lebih mudah.
Kesalahan ini biasanya muncul ketika Anda telah meningkatkan SDK atau menggunakan contoh kode yang ketinggalan zaman. Penyimpanan cache prompt sekarang tersedia secara umum, jadi Anda tidak lagi memerlukan awalan beta. Alih-alih:
python client.beta.prompt_caching.messages.create(...)
Cukup gunakan:
python client.messages.create(...)
Kesalahan ini biasanya muncul ketika Anda telah meningkatkan SDK atau menggunakan contoh kode yang ketinggalan zaman. Penyimpanan cache prompt sekarang tersedia secara umum, jadi Anda tidak lagi memerlukan awalan beta. Alih-alih:
TypeScript
client.beta.promptCaching.messages.create(...)
Cukup gunakan:
client.messages.create(...)