Önek önbelleğe alma, ortak ve tekrar eden bir istem öneki bölümünün işlenmesiyle ilgili ara LLM durumunu depolayıp yeniden kullanarak çıkarım süresini kısaltan bir özelliktir. Önek önbelleğe almayı etkinleştirmek için API isteğinizde statik öneki dinamik sonekten ayırmanız yeterlidir.
Önek önbelleğe alma özelliği şu anda yalnızca metin girişini desteklemektedir. Bu nedenle, isteminizde resim sağlıyorsanız bu özelliği kullanmamalısınız.
Önek önbelleğe almayı uygulamak için iki yaklaşım vardır: örtülü veya açık:
- Örtülü önek önbelleğe alma, uygulamanın yalnızca istemin ortak bir bölümünü tanımlaması gereken basit bir yaklaşımdır.
- Açık ön ek önbelleğe alma, uygulamaların önbellek oluşturma, sorgulama ve silme işlemleri de dahil olmak üzere önbellekler üzerinde daha fazla kontrol sahibi olmasını sağlar.
Önek önbelleğe almayı örtülü olarak kullanma
Önek önbelleğe almayı etkinleştirmek için istemin paylaşılan bölümünü aşağıdaki kod snippet'lerinde gösterildiği gibi promptPrefix alanına ekleyin:
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();
Önceki snippet'te dynamicSuffix ana içerik olarak iletilir ve promptPrefix ayrı olarak sağlanır.
Tahmini performans artışları
Önek önbelleğe alma olmadan |
Önek önbellek isabetiyle (Ön ek ilk kez kullanıldığında ön ek önbellek isabeti eksikliği oluşabilir) |
|
300 jetonluk sabit önek ve 50 jetonluk dinamik sonek içeren Pixel 9 istem |
0,82 saniye |
0,45 saniye |
1.000 jetonluk sabit önek ve 100 jetonluk dinamik sonek istemi içeren Pixel 9 |
2,11 saniye |
0,5 saniye |
Depolama alanı ile ilgili dikkat edilecek noktalar
Örtülü önek önbelleğe alma ile önbellek dosyaları, istemci uygulamasının özel depolama alanına kaydedilir. Bu durum, uygulamanızın depolama alanı kullanımını artırır. Şifrelenmiş önbellek dosyaları ve orijinal önek metni de dahil olmak üzere ilişkili meta verileri depolanır. Aşağıdaki depolama alanı ile ilgili dikkat edilecek noktaları göz önünde bulundurun:
- Önbellek sayısı, LRU (En Son Kullanılmayan) mekanizmasıyla yönetilir. Toplam maksimum önbellek miktarı aşıldığında en az kullanılan önbellekler otomatik olarak silinir.
- İstem önbelleği boyutları, önekin uzunluğuna bağlıdır.
Ön ek önbelleğe alma işleminden oluşturulan tüm önbellekleri temizlemek için
generativeMode.clearImplicitCaches()yöntemini kullanın.
Açık önbellek yönetimi kullanma
Prompt API, geliştiricilere önbelleklerin nasıl oluşturulduğu, arandığı, kullanıldığı ve kaldırıldığı konusunda daha hassas kontrol sağlamak için açık önbellek yönetimi yöntemleri içerir. Bu manuel işlemler, sistemin otomatik önbellek yönetiminden bağımsız olarak çalışır.
Bu örnekte, açık önbellek yönetiminin nasıl başlatılacağı ve çıkarımın nasıl yapılacağı gösterilmektedir:
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();
Bu örnekte, generativeModel.caches kullanarak açıkça yönetilen önbelleklerin nasıl sorgulanacağı, alınacağı ve silineceği gösterilmektedir:
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);