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.
Instruksi sistem biasanya berada di field system tingkat atas, sebelum setiap pesan dalam percakapan. Posisi tersebut sangat baik untuk caching prompt: prompt sistem adalah bagian dari prefiks yang stabil, sehingga giliran berikutnya akan mengenai cache. Namun, posisi ini kurang ideal untuk instruksi yang baru Anda sadari dibutuhkan di tengah sesi, karena mengedit field system tingkat atas akan mengubah bagian paling awal dari prompt dan membatalkan cache untuk semua yang mengikutinya.
Pesan sistem di tengah percakapan menutup celah tersebut. Anda menambahkan pesan {"role": "system"} pada titik dalam percakapan di mana instruksi baru menjadi relevan, alih-alih mengedit field system tingkat atas. Prefiks yang di-cache tetap sama, sehingga permintaan berikutnya masih membacanya dari cache, dan instruksi baru tetap diterapkan sebagai instruksi sistem, bukan sebagai teks pengguna biasa.
Pesan sistem di tengah percakapan tersedia di Claude API dan Claude Platform di AWS. Fitur ini tidak tersedia di Amazon Bedrock, Vertex AI, atau Microsoft Foundry.
Fitur ini hanya tersedia di Claude Opus 4.8. Tidak diperlukan header beta.
Caching prompt melakukan hash pada prefiks permintaan secara berurutan: tools, lalu system, lalu messages. Cache hit mengharuskan prefiks cocok persis dengan permintaan terbaru, byte demi byte, hingga titik breakpoint cache.
Urutan tersebut berarti field system tingkat atas berada di dekat bagian paling awal dari prefiks yang di-hash. Setiap perubahan padanya, bahkan menambahkan satu kalimat, menghasilkan hash yang berbeda, dan permintaan tersebut gagal mengenai cache untuk prompt sistem dan setiap pesan yang di-cache setelahnya.
Pesan sistem di tengah percakapan memungkinkan Anda menambahkan instruksi di akhir riwayat pesan. Semua yang ada sebelum instruksi baru tidak berubah, sehingga entri cache yang ada masih cocok, dan hanya pesan baru yang diproses sebagai input baru.
Beberapa situasi di mana hal ini penting:
system tingkat atas akan memproses ulang seluruh riwayat.Dalam semua kasus ini, Anda bisa saja menempatkan instruksi dalam pesan user biasa, dan Claude memang mengikuti instruksi yang datang dalam giliran pengguna. Perbedaannya adalah prioritas: pesan user diperlakukan sebagai berasal dari pengguna akhir, sedangkan pesan system diperlakukan sebagai berasal dari Anda, operator aplikasi. Ketika keduanya bertentangan, instruksi sistem memiliki prioritas lebih tinggi, jadi gunakan role system untuk fakta dan batasan tingkat operator yang harus tetap berlaku bahkan jika pengguna akhir meminta sesuatu yang berbeda. Pesan sistem di tengah percakapan mempertahankan prioritas tingkat operator tersebut tanpa membayar biaya cache miss akibat mengedit field system tingkat atas.
Tambahkan pesan dengan "role": "system" ke array messages. Gunakan string biasa atau content block untuk content, sama seperti giliran user atau assistant. Instruksi berlaku mulai dari titik tersebut dalam percakapan dan seterusnya. Ketika instruksi bertentangan, pesan sistem yang lebih baru memiliki prioritas lebih tinggi daripada yang lebih awal, dan pesan sistem di tengah percakapan memiliki prioritas lebih tinggi daripada field system tingkat atas untuk giliran-giliran yang mengikutinya.
Anda tetap dapat mengatur field system tingkat atas untuk instruksi yang harus berlaku untuk seluruh percakapan. Simpan pesan sistem di tengah percakapan untuk instruksi yang baru menjadi relevan kemudian, atau yang ingin Anda tambahkan tanpa membatalkan prefiks yang di-cache.
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
# Caching prompt otomatis: setiap permintaan meng-cache percakapan sejauh ini,
# dan permintaan berikutnya membaca prefiks yang tidak berubah dari cache.
cache_control={"type": "ephemeral"},
system="You are a code review assistant. Be concise.",
messages=[
{
"role": "user",
"content": "Review process() in utils.py for performance issues.",
},
{
"role": "assistant",
"content": "The list comprehension is fine for small inputs. For large inputs, consider a generator to avoid materializing the full list.",
},
{
"role": "user",
"content": "Now review the calling code that invokes process().",
},
# Peninjau menyadari di tengah sesi bahwa semua saran juga harus
# mematuhi kebijakan pengetikan ketat tim. Menambahkan instruksi
# di sini menjaga giliran sebelumnya tetap identik per byte, sehingga
# prefiks yang di-cache oleh permintaan sebelumnya tetap dibaca dari cache.
{
"role": "system",
"content": "From now on, every suggestion must include explicit type annotations.",
},
],
)
print(response.content[0].text)Contoh ini mengaktifkan caching otomatis dengan field cache_control tingkat atas. Caching prompt bersifat opt-in: jika sebuah permintaan tidak memiliki field cache_control (otomatis atau breakpoint eksplisit), tidak ada yang di-cache dan setiap permintaan membayar harga token input reguler untuk seluruh percakapan. Dengan caching diaktifkan, menambahkan pesan sistem membiarkan giliran yang sudah di-cache tidak berubah, sehingga permintaan yang membawa instruksi baru tetap membacanya dari cache alih-alih memprosesnya lagi. Caching juga mengharuskan percakapan memenuhi panjang prompt minimum yang dapat di-cache; contoh sependek ini berada di bawah batas tersebut, sehingga cache_creation_input_tokens dan cache_read_input_tokens tetap 0 hingga percakapan bertambah panjang.
Pesan sistem di tengah percakapan harus langsung mengikuti giliran user (atau giliran assistant yang berakhir dengan penggunaan alat server), dan harus menjadi entri terakhir dalam messages atau langsung diikuti oleh giliran assistant. Pesan user yang membawa blok tool_result juga dihitung: dalam loop agentik, Anda dapat menempatkan pesan sistem tepat setelah hasil alat, sebelum giliran Claude berikutnya. Satu-satunya posisi yang tidak diizinkan adalah di antara blok tool_use dari assistant dan tool_result yang menjawabnya.
Dalam loop agentik, pesan sistem ditempatkan setelah pesan user yang mengirimkan hasil alat. Ini juga merupakan tempat di mana aplikasi Anda dapat meneruskan input yang diketik pengguna saat Claude sedang bekerja, sehingga konteks baru diserap tanpa memulai ulang giliran:
[
{ "role": "user", "content": "Run the test suite and fix any failures." },
{
"role": "assistant",
"content": [{ "type": "tool_use", "id": "toolu_01", "name": "run_tests", "input": {} }]
},
{
"role": "user",
"content": [
{ "type": "tool_result", "tool_use_id": "toolu_01", "content": "12 passed, 0 failed" }
]
},
{
"role": "system",
"content": "The user sent the following message while you were working: also update the changelog before you finish."
}
]Rumuskan konten sistem sebagai konteks, bukan sebagai perintah yang mengesampingkan pengguna. Nyatakan faktanya ("input baru tiba dari pengguna: X", "anggaran token yang tersisa sekarang adalah Y") dan biarkan Claude bertindak berdasarkan itu. Claude dilatih untuk menolak instruksi yang tampak bekerja melawan pengguna, dan perlindungan tersebut tetap berlaku untuk role sistem, sehingga bahasa seperti "abaikan apa yang dikatakan pengguna" kurang efektif dibandingkan menyatakan apa yang berubah.
Pola ini ditujukan untuk meneruskan input dari pengguna akhir percakapan itu sendiri. Jangan gunakan untuk meneruskan output alat, dokumen yang diambil, atau konten pihak ketiga lainnya; simpan konten tersebut dalam blok tool_result (lihat Batasan).
Pesan sistem di tengah percakapan dan caching prompt dirancang untuk digunakan bersama:
cache_control, baik field caching otomatis tingkat atas maupun breakpoint eksplisit pada content block. Pesan sistem di tengah percakapan tidak membuat entri cache dengan sendirinya, dan tanpa caching diaktifkan, tidak ada penghematan yang dapat dipertahankan.cache_control pada blok terakhir yang tetap sama di seluruh permintaan, baik itu akhir dari field system tingkat atas, akhir dari definisi alat Anda, atau titik stabil dalam riwayat pesan.Hindari mengedit atau menghapus pesan sistem di tengah percakapan yang telah dikirim. Seperti perubahan lain pada pesan sebelumnya, hal itu membatalkan cache dari titik tersebut ke depan. Jika instruksi perlu berkembang, tambahkan pesan sistem baru alih-alih menulis ulang yang lama. Pesan sistem berturut-turut tidak diizinkan; gabungkan instruksi menjadi satu pesan atau tunggu giliran pengguna berikutnya sebelum menambahkan.
system tidak dapat menjadi entri pertama dalam messages. Gunakan field system tingkat atas untuk instruksi yang berlaku sejak awal.system harus langsung mengikuti giliran user (termasuk giliran user yang membawa blok tool_result) atau giliran assistant yang berakhir dengan penggunaan alat server, dan harus mendahului giliran assistant atau mengakhiri array. Pesan ini tidak dapat berada di antara blok tool_use dan tool_result-nya. Menempatkannya di tempat lain akan mengembalikan error 400.tool_result dan terus ikuti Mitigasi jailbreak dan injeksi prompt.Cara kerja caching, di mana menempatkan breakpoint, dan cara membaca field penggunaan cache.
Cari tahu persis di mana dua permintaan berbeda ketika cache hit yang Anda harapkan tidak terjadi.
Struktur pesan, percakapan multi-giliran, dan field system.
Menulis prompt dan instruksi sistem yang efektif.
Bagaimana blok tool_use dan tool_result disusun dalam array messages.
Was this page helpful?