Caching awalan adalah fitur yang mengurangi waktu inferensi dengan menyimpan dan menggunakan kembali status LLM perantara dalam memproses bagian awalan perintah bersama dan berulang. Untuk mengaktifkan penyimpanan dalam cache awalan, Anda hanya perlu memisahkan awalan statis dari akhiran dinamis dalam permintaan API.
Saat ini, penyiapan cache awalan hanya mendukung input berupa teks saja, jadi Anda tidak boleh menggunakan fitur ini jika Anda memberikan gambar dalam perintah Anda.
Ada dua pendekatan untuk menerapkan caching awalan: implisit atau eksplisit:
- Penyimpanan cache awalan implisit adalah pendekatan ringan yang hanya memerlukan aplikasi untuk menentukan bagian perintah yang dibagikan.
- Penyimpanan cache awalan eksplisit memungkinkan aplikasi memiliki lebih banyak kontrol atas cache, termasuk pembuatan, kueri, dan penghapusan cache.
Menggunakan caching awalan secara implisit
Untuk mengaktifkan penayangan cache awalan, tambahkan bagian bersama dari perintah ke kolom promptPrefix, seperti yang ditunjukkan dalam cuplikan kode berikut:
Kotlin
val promptPrefix = "Reverse the given sentence: "
val dynamicSuffix = "Hello World"
val result = generativeModel.generateContent(
generateContentRequest(TextPart(dynamicSuffix)) {
promptPrefix = PromptPrefix(promptPrefix)
}
)
Java
String promptPrefix = "Reverse the given sentence: ";
String dynamicSuffix = "Hello World";
GenerateContentResponse response = generativeModelFutures.generateContent(
new GenerateContentRequest.Builder(new TextPart(dynamicSuffix))
.setPromptPrefix(new PromptPrefix(promptPrefix))
.build())
.get();
Dalam cuplikan sebelumnya, dynamicSuffix diteruskan sebagai konten utama, dan promptPrefix diberikan secara terpisah.
Estimasi peningkatan performa
Tanpa caching awalan |
Dengan hit cache awalan (Cache-miss awalan dapat terjadi saat awalan digunakan untuk pertama kalinya) |
|
Pixel 9 dengan awalan tetap 300 token dan akhiran dinamis 50 token perintah |
0,82 detik |
0,45 detik |
Pixel 9 dengan perintah akhiran dinamis 100 token dan awalan tetap 1.000 token |
2,11 detik |
0,5 detik |
Pertimbangan penyimpanan
Dengan pembuatan cache awalan implisit, file cache disimpan di penyimpanan pribadi aplikasi klien, yang meningkatkan penggunaan penyimpanan aplikasi Anda. File cache terenkripsi dan metadata terkaitnya, termasuk teks awalan asli, disimpan. Perhatikan pertimbangan penyimpanan berikut:
- Jumlah cache dikelola oleh mekanisme LRU (Least Recently Used). Cache yang paling jarang digunakan akan dihapus secara otomatis jika melebihi jumlah total cache maksimum.
- Ukuran cache perintah bergantung pada panjang awalan.
Untuk menghapus semua cache yang dibuat dari caching awalan, gunakan metode
generativeMode.clearImplicitCaches().
Menggunakan pengelolaan cache eksplisit
Prompt API menyertakan metode pengelolaan cache eksplisit untuk memberi developer kontrol yang lebih presisi atas cara cache dibuat, ditelusuri, digunakan, dan dihapus. Operasi manual ini berjalan secara independen dari penanganan cache otomatis sistem.
Contoh ini menggambarkan cara menginisialisasi pengelolaan cache eksplisit dan melakukan inferensi:
Kotlin
val cacheName = "my_cache"
val promptPrefix = "Reverse the given sentence: "
val dynamicSuffix = "Hello World"
// Create a cache
val cacheRequest = createCachedContextRequest(cacheName, PromptPrefix(promptPrefix))
val cache = generativeModel.caches.create(cacheRequest)
// Run inference with the cache
val response = generativeModel.generateContent(
generateContentRequest(TextPart(dynamicSuffix)) {
cachedContextName = cache.name
}
)
Java
String cacheName = "my_cache";
String promptPrefix = "Reverse the given sentence: ";
String dynamicSuffix = "Hello World";
// Create a cache
CachedContext cache = cachesFutures.create(
new CreateCachedContextRequest.Builder(cacheName, new PromptPrefix(promptPrefix))
.build())
.get();
// Run inference with the cache
GenerateContentResponse response = generativeModelFutures.generateContent(
new GenerateContentRequest.Builder(new TextPart(dynamicSuffix))
.setCachedContextName(cache.getName())
.build())
.get();
Contoh ini menunjukkan cara membuat kueri, mengambil, dan menghapus cache yang dikelola secara eksplisit menggunakan generativeModel.caches:
Kotlin
val cacheName = "my_cache"
// Query pre-created caches
for (cache in generativeModel.caches.list()) {
// Do something with cache
}
// Get specific cache
val cache = generativeModel.caches.get(cacheName)
// Delete a pre-created cache
generativeModel.caches.delete(cacheName)
Java
String cacheName = "my_cache";
// Query pre-created caches
for (PrefixCache cache : cachesFutures.list().get()) {
// Do something with cache
}
// Get specific cache
PrefixCache cache = cachesFutures.get(cacheName).get();
// Delete a pre-created cache
cachesFutures.delete(cacheName);