Bağlamı önbelleğe alma

Tipik bir yapay zeka iş akışında, bir modele aynı giriş jetonlarını tekrar tekrar iletebilirsiniz. Gemini API bağlam önbelleğe alma özelliğini kullanarak bazı içerikleri modele bir kez aktarabilir, giriş jetonlarını önbelleğe alabilir ve ardından sonraki istekler için önbelleğe alınan jetonlara başvurabilirsiniz. Belirli hacimlerde, önbelleğe alınmış jetonları kullanmak aynı jeton grubunu tekrar tekrar iletmek yerine daha düşük maliyetlidir.

Bir jeton grubunu önbelleğe aldığınızda, jetonlar otomatik olarak silinmeden önce önbelleğin ne kadar süre boyunca var olmasını istediğinizi seçebilirsiniz. Bu önbelleğe alma süresine geçerlilik süresi (TTL) denir. Ayarlanmazsa TTL varsayılan olarak 1 saat olur. Önbelleğe alma maliyeti, giriş jetonu boyutuna ve jetonların ne kadar süreyle kalmasını istediğinize bağlıdır.

Bağlam önbelleğe alma, modele göre değişir.

Bağlam önbelleğe alma ne zaman kullanılır?

Bağlam önbelleğe alma, özellikle önemli bir başlangıç bağlamının daha kısa istekler tarafından tekrar tekrar referans verildiği senaryolara uygundur. Aşağıdaki gibi kullanım alanları için bağlama dayalı önbelleğe alma özelliğini kullanabilirsiniz:

  • Kapsamlı sistem talimatları içeren chatbot'lar
  • Uzun video dosyalarının tekrarlı analizi
  • Büyük doküman kümelerine yönelik yinelenen sorgular
  • Sık sık kod deposu analizi veya hata düzeltme

Bağlam önbelleğe alma özelliğini kullanma

Bu bölümde, hızlı başlangıç bölümünde gösterildiği gibi bir Gemini SDK'sı (veya curl) yüklediğiniz ve bir API anahtarı yapılandırdığınız varsayılmaktadır.

Önbelleği kullanarak içerik oluşturma

Aşağıdaki örnekte, önbelleğe alınmış bir sistem talimatı ve metin dosyası kullanılarak nasıl içerik oluşturulacağı gösterilmektedir.

import {
  GoogleGenAI,
  createUserContent,
  createPartFromUri,
} from "@google/genai";

const ai = new GoogleGenAI({ apiKey: "GEMINI_API_KEY" });

async function main() {
  const doc = await ai.files.upload({
    file: "path/to/file.txt",
    config: { mimeType: "text/plain" },
  });
  console.log("Uploaded file name:", doc.name);

  const modelName = "gemini-2.0-flash-001";
  const cache = await ai.caches.create({
    model: modelName,
    config: {
      contents: createUserContent(createPartFromUri(doc.uri, doc.mimeType)),
      systemInstruction: "You are an expert analyzing transcripts.",
    },
  });
  console.log("Cache created:", cache);

  const response = await ai.models.generateContent({
    model: modelName,
    contents: "Please summarize this transcript",
    config: { cachedContent: cache.name },
  });
  console.log("Response text:", response.text);
}

await main();

Önbellekleri listeleme

Önbelleğe alınmış içeriği almak veya görüntülemek mümkün değildir ancak önbelleğe alınmış meta verileri (name, model, displayName, usageMetadata, createTime, updateTime ve expireTime) alabilirsiniz.

Yüklenen tüm önbellekleri meta verileriyle birlikte listelemek için GoogleGenAI.caches.list() kullanın:

console.log("My caches:");
const pager = await ai.caches.list({ config: { pageSize: 10 } });
let page = pager.page;
while (true) {
  for (const c of page) {
    console.log("    ", c.name);
  }
  if (!pager.hasNextPage()) break;
  page = await pager.nextPage();
}

Önbelleği güncelleme

Önbelleğe yeni bir ttl veya expireTime ayarlayabilirsiniz. Önbelleğe alma ile ilgili başka bir şeyin değiştirilmesi desteklenmez.

Aşağıdaki örnekte, GoogleGenAI.caches.update() kullanılarak bir önbelleğin ttl değerinin nasıl güncelleneceği gösterilmektedir.

const ttl = `${2 * 3600}s`; // 2 hours in seconds
const updatedCache = await ai.caches.update({
  name: cache.name,
  config: { ttl },
});
console.log("After update (TTL):", updatedCache);

Önbelleği silme

Önbelleğe alma hizmeti, içeriği önbellekten manuel olarak kaldırmak için bir silme işlemi sağlar. Aşağıdaki örnekte, GoogleGenAI.caches.delete() kullanılarak bir önbelleğin nasıl silineceği gösterilmektedir.

await ai.caches.delete({ name: cache.name });

Önbelleğe alma maliyetleri nasıl azaltır?

Bağlam önbelleğe alma, genel operasyon maliyetlerini azaltmak için tasarlanmış ücretli bir özelliktir. Faturalandırma aşağıdaki faktörlere göre yapılır:

  1. Önbelleğe alınan jeton sayısı: Sonraki istemlere dahil edildiğinde daha düşük bir oranda faturalandırılan, önbelleğe alınan giriş jetonlarının sayısı.
  2. Depolama süresi: Önbelleğe alınan jetonların depolandığı süre (TTL). Önbelleğe alınan jeton sayısının TTL süresine göre faturalandırılır. TTL için minimum veya maksimum sınır yoktur.
  3. Diğer faktörler: Önbelleğe alınmamış giriş jetonları ve çıkış jetonları gibi diğer ücretler geçerlidir.

Güncel fiyatlandırma ayrıntıları için Gemini API fiyatlandırma sayfasına bakın. Jetonları nasıl sayacağınızı öğrenmek için Jeton kılavuzuna göz atın.

Göz önünde bulundurulacak diğer noktalar

Bağlam önbelleğe alma özelliğini kullanırken aşağıdaki hususları göz önünde bulundurun:

  • Bağlam önbelleğe alma için minimum giriş jetonu sayısı 4.096'tır ve maksimum değer, belirli modelin maksimum değeriyle aynıdır. (Jeton sayma hakkında daha fazla bilgi için Jeton rehberi başlıklı makaleyi inceleyin.)
  • Model, önbelleğe alınmış jetonlar ile normal giriş jetonları arasında herhangi bir ayrım yapmaz. Önbelleğe alınmış içerik, istemin ön ekinde yer alır.
  • Bağlam önbelleğe alma işleminde özel bir ücret veya kullanım sınırı yoktur. GenerateContent için standart ücret sınırları geçerlidir ve jeton sınırları, önbelleğe alınmış jetonları içerir.
  • Önbelleğe alınan jetonların sayısı, önbelleğe alma hizmetinin oluşturma, alma ve listeleme işlemlerinden usage_metadata içinde ve önbelleğe alma işlemi sırasında GenerateContent içinde döndürülür.