Pembuatan cache konteks

Dalam alur kerja AI standar, Anda dapat meneruskan token input yang sama berulang kali ke model. Dengan menggunakan fitur penyimpanan cache konteks Gemini API, Anda dapat meneruskan beberapa konten ke model sekali, meng-cache token input, lalu merujuk ke token yang di-cache untuk permintaan berikutnya. Pada volume tertentu, menggunakan token yang di-cache lebih murah daripada meneruskan korpus token yang sama berulang kali.

Saat meng-cache kumpulan token, Anda dapat memilih berapa lama cache akan disimpan 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 cache bergantung pada ukuran token input dan berapa lama Anda ingin token dipertahankan.

Penyimpanan dalam cache konteks mendukung Gemini 1.5 Pro dan Gemini 1.5 Flash.

Kapan harus menggunakan cache konteks

Cache konteks sangat cocok untuk skenario ketika 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 terhadap file video yang panjang
  • Kueri berulang pada kumpulan dokumen berukuran besar
  • Analisis repositori kode yang sering atau perbaikan bug

Bagaimana penyimpanan dalam cache dapat mengurangi biaya

Caching konteks adalah fitur berbayar yang dirancang untuk mengurangi biaya operasional secara keseluruhan. Penagihan didasarkan pada faktor-faktor berikut:

  1. Jumlah token cache: Jumlah token input yang di-cache, yang ditagih dengan tarif lebih rendah saat disertakan dalam perintah berikutnya.
  2. Durasi penyimpanan: Jumlah waktu token yang di-cache disimpan (TTL), ditagih berdasarkan durasi TTL dari jumlah token yang di-cache. Tidak ada batas minimum atau maksimum pada TTL.
  3. 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 os
import google.generativeai as genai
from google.generativeai import caching
import datetime
import time

# Get your API key from https://aistudio.google.com/app/apikey
# and access your API key as an environment variable.
# To authenticate from a Colab, see
# https://github.com/google-gemini/cookbook/blob/main/quickstarts/Authentication.ipynb
genai.configure(api_key=os.environ['API_KEY'])

# Download video file
# curl -O https://storage.googleapis.com/generativeai-downloads/data/Sherlock_Jr_FullMovie.mp4

path_to_video_file = 'Sherlock_Jr_FullMovie.mp4'

# Upload the video using the Files API
video_file = genai.upload_file(path=path_to_video_file)

# Wait for the file to finish processing
while video_file.state.name == 'PROCESSING':
  print('Waiting for video to be processed.')
  time.sleep(2)
  video_file = genai.get_file(video_file.name)

print(f'Video processing complete: {video_file.uri}')

# Create a cache with a 5 minute TTL
cache = caching.CachedContent.create(
    model='models/gemini-1.5-flash-001',
    display_name='sherlock jr movie', # used to identify the cache
    system_instruction=(
        '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.'
    ),
    contents=[video_file],
    ttl=datetime.timedelta(minutes=5),
)

# Construct a GenerativeModel which uses the created cache.
model = genai.GenerativeModel.from_cached_content(cached_content=cache)

# Query the model
response = model.generate_content([(
    'Introduce different characters in the movie by describing '
    'their personality, looks, and names. Also list the timestamps '
    'they were introduced for the first time.')])

print(response.usage_metadata)

# The output should look something like this:
#
# prompt_token_count: 696219
# cached_content_token_count: 696190
# candidates_token_count: 214
# total_token_count: 696433

print(response.text)

Mencantumkan cache

Konten yang di-cache tidak dapat diambil atau dilihat, tetapi Anda dapat mengambil metadata cache (name, model, display_name, usage_metadata, create_time, update_time, dan expire_time).

Guna mencantumkan metadata untuk semua cache yang diupload, gunakan CachedContent.list():

for c in caching.CachedContent.list():
  print(c)

Mengupdate cache

Anda dapat menyetel ttl atau expire_time baru untuk cache. Mengubah hal lain tentang cache tidak didukung.

Contoh berikut menunjukkan cara mengupdate ttl cache menggunakan CachedContent.update().

import datetime

cache.update(ttl=datetime.timedelta(hours=2))

Menghapus cache

Layanan penyimpanan cache menyediakan operasi penghapusan untuk menghapus konten dari cache secara manual. Contoh berikut menunjukkan cara menghapus cache menggunakan CachedContent.delete().

cache.delete()

Pertimbangan tambahan

Perhatikan pertimbangan berikut saat menggunakan cache konteks:

  • Jumlah token input minimum untuk penyimpanan dalam cache konteks adalah 32.768, dan maksimum sama dengan jumlah maksimum untuk model yang diberikan. (Untuk informasi selengkapnya tentang penghitungan 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 di-cache.
  • Jumlah token yang di-cache ditampilkan dalam usage_metadata dari operasi pembuatan, perolehan, dan daftar layanan cache, dan juga di GenerateContent saat menggunakan cache.