Dalam alur kerja AI standar, Anda dapat meneruskan token input yang sama berulang kali ke model. Dengan menggunakan fitur penyimpanan dalam cache konteks Gemini API, Anda dapat meneruskan beberapa konten ke model satu kali, menyimpan token input dalam cache, lalu merujuk ke token yang di-cache untuk permintaan berikutnya. Pada volume tertentu, menggunakan token yang di-cache akan lebih hemat biaya daripada meneruskan korpus token yang sama berulang kali.
Saat menyimpan kumpulan token dalam cache, Anda dapat memilih berapa lama cache tersebut akan ada sebelum token dihapus secara otomatis. Durasi penyimpanan dalam cache ini disebut time to live (TTL). Jika tidak disetel, TTL akan ditetapkan secara default ke 1 jam. Biaya untuk penyimpanan dalam cache bergantung pada ukuran token input dan berapa lama Anda ingin token tetap ada.
Cache konteks mendukung Gemini 1.5 Pro dan Gemini 1.5 Flash.
Kapan harus menggunakan cache konteks
Cache konteks sangat cocok untuk skenario saat konteks awal yang substansial dirujuk berulang kali oleh permintaan yang lebih singkat. Pertimbangkan untuk menggunakan cache konteks untuk kasus penggunaan seperti:
- Chatbot dengan petunjuk sistem yang lengkap
- Analisis berulang pada file video yang panjang
- Kueri berulang terhadap set dokumen besar
- Analisis repositori kode atau perbaikan bug yang sering dilakukan
Cara penyimpanan dalam cache mengurangi biaya
Caching konteks adalah fitur berbayar yang dirancang untuk mengurangi biaya operasional secara keseluruhan. Penagihan didasarkan pada faktor-faktor berikut:
- Jumlah token cache: Jumlah token input yang di-cache, ditagih dengan tarif yang lebih rendah jika disertakan dalam perintah berikutnya.
- Durasi penyimpanan: Jumlah waktu token yang di-cache disimpan (TTL), ditagih berdasarkan durasi TTL jumlah token yang di-cache. Tidak ada batas minimum atau maksimum pada TTL.
- Faktor lainnya: Biaya lain berlaku, seperti untuk token input dan token output yang tidak di-cache.
Untuk mengetahui detail harga terbaru, lihat halaman harga Gemini API. Untuk mempelajari cara menghitung token, lihat Panduan token.
Cara menggunakan cache konteks
Bagian ini mengasumsikan bahwa Anda telah menginstal Gemini SDK (atau telah menginstal curl) dan telah mengonfigurasi kunci API, seperti yang ditunjukkan dalam mulai cepat.
Membuat konten menggunakan cache
Contoh berikut menunjukkan cara membuat konten menggunakan petunjuk sistem dan file video yang di-cache.
import { GoogleGenerativeAI } from '@google/generative-ai';
import {
FileState,
GoogleAICacheManager,
GoogleAIFileManager,
} from '@google/generative-ai/server';
// A helper function that uploads the video to be cached.
async function uploadMp4Video(filePath, displayName) {
const fileManager = new GoogleAIFileManager(process.env.API_KEY);
const fileResult = await fileManager.uploadFile(filePath, {
displayName,
mimeType: 'video/mp4',
});
const { name, uri } = fileResult.file;
// Poll getFile() on a set interval (2 seconds here) to check file state.
let file = await fileManager.getFile(name);
while (file.state === FileState.PROCESSING) {
console.log('Waiting for video to be processed.');
// Sleep for 2 seconds
await new Promise((resolve) => setTimeout(resolve, 2_000));
file = await fileManager.getFile(name);
}
console.log(`Video processing complete: ${uri}`);
return fileResult;
}
// Download video file
// curl -O https://storage.googleapis.com/generativeai-downloads/data/Sherlock_Jr_FullMovie.mp4
const pathToVideoFile = 'Sherlock_Jr_FullMovie.mp4';
// Upload the video.
const fileResult = await uploadMp4Video(pathToVideoFile, 'Sherlock Jr. video');
// Construct a GoogleAICacheManager using your API key.
const cacheManager = new GoogleAICacheManager(process.env.API_KEY);
// Create a cache with a 5 minute TTL.
const displayName = 'sherlock jr movie';
const model = 'models/gemini-1.5-flash-001';
const systemInstruction =
'You are an expert video analyzer, and your job is to answer ' +
"the user's query based on the video file you have access to.";
let ttlSeconds = 300;
const cache = await cacheManager.create({
model,
displayName,
systemInstruction,
contents: [
{
role: 'user',
parts: [
{
fileData: {
mimeType: fileResult.file.mimeType,
fileUri: fileResult.file.uri,
},
},
],
},
],
ttlSeconds,
});
// Get your API key from https://aistudio.google.com/app/apikey
// Access your API key as an environment variable.
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
// Construct a `GenerativeModel` which uses the cache object.
const genModel = genAI.getGenerativeModelFromCachedContent(cache);
// Query the model.
const result = await genModel.generateContent({
contents: [
{
role: 'user',
parts: [
{
text:
'Introduce different characters in the movie by describing ' +
'their personality, looks, and names. Also list the ' +
'timestamps they were introduced for the first time.',
},
],
},
],
});
console.log(result.response.usageMetadata);
// The output should look something like this:
//
// {
// promptTokenCount: 696220,
// candidatesTokenCount: 270,
// totalTokenCount: 696490,
// cachedContentTokenCount: 696191
// }
console.log(result.response.text());
Mencantumkan cache
Anda tidak dapat mengambil atau melihat konten dalam cache, tetapi Anda dapat mengambil
metadata cache (name
, model
, displayName
, usageMetadata
,
createTime
, updateTime
, dan expireTime
).
Untuk mencantumkan metadata untuk semua cache yang diupload, gunakan GoogleAICacheManager.list()
:
const listResult = await cacheManager.list();
listResult.cachedContents.forEach((cache) => {
console.log(cache);
});
Mengupdate cache
Anda dapat menetapkan ttl
atau expireTime
baru untuk cache. Mengubah hal lain
tentang cache tidak didukung.
Contoh berikut menunjukkan cara mengupdate ttl
cache menggunakan
GoogleAICacheManager.update()
.
const ttlSeconds = 2 * 60 * 60;
const updateParams = { cachedContent: { ttlSeconds } };
const updatedCache = await cacheManager.update(cacheName, updateParams);
Menghapus cache
Layanan penyimpanan dalam cache menyediakan operasi penghapusan untuk menghapus konten secara manual
dari cache. Contoh berikut menunjukkan cara menghapus cache menggunakan
GoogleAICacheManager.delete()
.
await cacheManager.delete(cacheName);
Pertimbangan tambahan
Perhatikan pertimbangan berikut saat menggunakan penyimpanan dalam cache konteks:
- Jumlah token input minimum untuk penyimpanan dalam cache konteks adalah 32.768, dan maksimum sama dengan maksimum untuk model tertentu. (Untuk mengetahui informasi selengkapnya tentang menghitung token, lihat Panduan token).
- Model ini tidak membedakan antara token yang di-cache dan token input reguler. Konten yang di-cache hanyalah awalan untuk perintah.
- Tidak ada batas penggunaan atau kapasitas khusus untuk penyimpanan dalam cache konteks; batas kapasitas standar untuk
GenerateContent
berlaku, dan batas token mencakup token yang disimpan dalam cache. - Jumlah token yang di-cache ditampilkan di
usage_metadata
dari operasi pembuatan, pengambilan, dan listingan layanan cache, dan juga diGenerateContent
saat menggunakan cache.