Skip to main content
Panduan ini menjelaskan cara membuat dan menggunakan kembali cache konteks Gemini (Context Cache) melalui API Chat Completions yang kompatibel dengan OpenAI atau API native Gemini. Sebelum memulai:
Contoh dalam panduan ini menggunakan gemini-3.6-flash. Untuk mengetahui apakah model lain mendukung Context Cache, lihat deskripsi model dan halaman harga di platform.

Kasus penggunaan

Jika beberapa permintaan berulang kali menyertakan blok konten besar yang sama, Anda dapat menyimpan prefiks stabil ke cache, misalnya:
  • System prompt yang sangat panjang
  • Basis pengetahuan tetap atau dokumentasi produk
  • Pesan riwayat yang stabil dalam percakapan multi-giliran
  • Definisi dan petunjuk tool yang digunakan berulang kali
Context Cache cocok untuk permintaan dengan “konten awal yang tetap sama dan hanya pertanyaan terakhir yang terus berubah”.

Penggunaan dasar

Tambahkan cache_control ke blok konten pada pesan terakhir dalam prefiks stabil:
TTL yang didukung:
Jika ttl dihilangkan, nilai defaultnya adalah 5m.

Struktur pesan

Sebaiknya gunakan struktur berikut:
Pesan yang memuat cache_control dan semua pesan sebelumnya membentuk prefiks yang disimpan ke cache. Setidaknya harus ada satu pesan real-time setelahnya.

Contoh permintaan yang kompatibel dengan OpenAI

Saat permintaan dikirim untuk pertama kalinya, sistem akan mencoba membuat cache dan menggunakannya untuk menyelesaikan permintaan saat ini.
Anda tidak perlu memanggil endpoint terpisah untuk membuat cache. cache_control sekaligus menetapkan “batas cache” dan “masa berlaku cache”.

Contoh permintaan native Gemini

Endpoint native Gemini generateContent juga mendukung penambahan cache_control di dalam contents[].parts[]:
cache_control adalah kolom ekstensi platform dalam format permintaan Gemini. Setelah mengidentifikasi batas, platform menghapus kolom ini sebelum meneruskan permintaan, lalu secara otomatis membuat atau menggunakan kembali konten cache (cachedContent). Antarmuka streaming menggunakan isi permintaan yang sama; Anda hanya perlu mengubah alamat menjadi:
Saat menggunakan kembali cache, pertahankan systemInstruction, contents sebelum batas, TTL, dan tools tanpa perubahan; ubah hanya konten real-time setelah batas.

Alur pembuatan dan penggunaan kembali

Saat Anda mengirim permintaan dengan cache_control untuk pertama kalinya:
Saat Anda mengirim kembali prefiks stabil yang sama:
Oleh karena itu, permintaan pertama juga dapat langsung mengembalikan token cache dalam jumlah besar. Ini adalah perilaku normal dan tidak mengharuskan Anda mengirim “permintaan pemanasan” terlebih dahulu.

Menggunakan kembali cache

Pada permintaan berikutnya, pertahankan hal-hal berikut tanpa perubahan:
  • Model
  • Semua pesan sebelum cache_control
  • cache_control.ttl
  • Definisi tool (jika menggunakan tools)
  • systemInstruction dalam permintaan native Gemini
Ubah hanya pertanyaan real-time setelah batas:
Selama prefiks stabil tetap sama dan cache belum kedaluwarsa, sistem akan menggunakan kembali cache yang ada. Perubahan berikut akan menghasilkan cache yang berbeda:
  • Mengubah teks atau urutan pesan dalam prefiks stabil
  • Mengganti model
  • Mengubah 5m menjadi 1h
  • Mengubah tools atau definisi parameter tool
  • Menggunakan pengguna atau kanal API yang berbeda

Contoh Python

Pada permintaan berikutnya, gunakan kembali stable_messages yang sama dan ganti hanya pesan user terakhir.

Memeriksa apakah cache digunakan

Respons yang kompatibel dengan OpenAI

Periksa kolom berikut dalam respons:
Keterangan kolom: Permintaan pertama juga dapat menampilkan nilai cached_tokens yang besar karena sistem dapat membuat cache, lalu merujuknya dalam panggilan model yang sama.

Respons native Gemini

Periksa usageMetadata.cachedContentTokenCount dalam respons:
Keterangan kolom: streamGenerateContent mengembalikan usageMetadata yang sama dalam frame respons SSE. Klien harus membaca frame yang memuat kolom tersebut, bukan hanya memeriksa potongan teks pertama.

Rekomendasi penggunaan

  1. Simpan ke cache hanya konten panjang yang benar-benar stabil dan akan digunakan kembali beberapa kali.
  2. Tempatkan pertanyaan yang berubah pada setiap permintaan setelah batas cache_control.
  3. Jangan sertakan timestamp, ID acak, atau informasi pengguna yang dinamis dalam prefiks stabil.
  4. Gunakan 5m jika Anda memperkirakan panggilan akan diulang dalam waktu singkat.
  5. Gunakan 1h jika Anda memerlukan jangka waktu penggunaan kembali yang lebih panjang.
  6. Jika prefiks terlalu pendek, model tidak mendukung cache, atau cache sedang tidak tersedia, permintaan dapat diproses secara otomatis dengan cara biasa.
  7. Dalam format native Gemini, batas cache harus ditempatkan di contents[].parts[], bukan di systemInstruction.

Pertanyaan umum

Ya. generateContent dan streamGenerateContent menggunakan struktur cache_control yang sama. Batas harus ditempatkan di contents[].parts[], dan setidaknya harus ada satu content real-time setelah content yang memuat batas.Jika permintaan sudah secara eksplisit menyediakan nama resource cachedContent native, platform akan memprioritaskan resource yang diberikan pengguna dan tidak lagi membuat cache secara otomatis.
Penyebab yang umum meliputi:
  • Prefiks stabil tidak sama persis dengan permintaan sebelumnya
  • TTL telah kedaluwarsa
  • Model atau tools telah diubah
  • Konten cache tidak mencapai jumlah minimum token yang diwajibkan oleh model
  • cache_control ditempatkan pada pesan terakhir sehingga tidak ada pertanyaan real-time yang tersisa
Tidak disarankan. Pesan terakhir biasanya merupakan pertanyaan real-time saat ini dan tidak seharusnya disimpan ke cache. Jika tidak ada pesan real-time setelah batas, permintaan akan diproses dengan cara biasa.
Tidak. Saat ini hanya 5m dan 1h yang didukung. Nilai lain akan menghasilkan error HTTP 400.
Ya, tetapi semua batas harus menggunakan TTL yang sama dan sistem akan menggunakan batas terakhir. Secara umum, sebaiknya tetapkan hanya satu batas per permintaan agar strukturnya lebih jelas.
Biasanya tidak. Jika syarat untuk membuat atau menggunakan kembali cache tidak terpenuhi, sistem akan memproses permintaan secara otomatis dengan cara biasa. Pengecualiannya adalah error parameter, seperti TTL yang tidak valid atau penggunaan beberapa TTL yang berbeda.
Permintaan akan diproses secara otomatis dengan cara biasa tanpa membuat cache eksplisit atau menimbulkan biaya penyimpanan cache. Input dan output biasa, serta kemungkinan hit pada cache implisit, akan tetap ditagih berdasarkan aturan model yang berlaku.
Ini adalah perilaku normal cache konteks Gemini. Biaya pembuatan dicatat sebagai biaya penyimpanan cache tersendiri; cache_write_tokens dengan gaya OpenAI atau Claude tidak digunakan untuk menunjukkan jumlah token yang ditulis ke cache.
Belum tentu. Sistem juga dapat menghasilkan hit pada cache implisit. Bagi pengguna biasa, token yang dibaca dari cache dapat digunakan untuk menentukan apakah permintaan memperoleh manfaat dari pembacaan cache. Jika Anda perlu memeriksa biaya pembuatan cache eksplisit, lihat catatan penggunaan Context Cache storage di platform.
Saat cache dibuat, biaya penyimpanan cache satu kali mungkin dikenakan. Saat cache digunakan, token yang cocok dikenai harga pembacaan cache. Untuk harga spesifik, lihat halaman harga model di platform.