Pembuatan cache konteks

Dalam alur kerja AI biasa, Anda mungkin meneruskan token input yang sama berulang kali ke suatu model. Dengan 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 memerlukan biaya yang lebih rendah daripada meneruskan korpus token yang sama berulang kali.

Saat Anda meng-cache serangkaian token, Anda dapat memilih berapa lama Anda ingin menyimpannya di cache ada sebelum token dihapus secara otomatis. Durasi penyimpanan dalam cache ini yang disebut time to live (TTL). Jika tidak disetel, TTL secara default ditetapkan ke 1 jam. Tujuan biaya untuk caching tergantung pada ukuran token input dan berapa lama Anda token untuk 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 di mana konteks awal dirujuk berulang kali oleh permintaan yang lebih singkat. Pertimbangkan untuk menggunakan cache konteks untuk kasus penggunaan seperti:

  • Chatbot dengan petunjuk sistem 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

Penyimpanan cache 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, ditagih dengan pengurangan tarif jika 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 batas maksimum pada TTL.
  3. Faktor lain: Biaya lain berlaku, seperti untuk token input yang tidak di-cache dan token output.

Untuk mengetahui detail harga terbaru, lihat harga Gemini API halaman kami. Untuk mempelajari cara menghitung token, lihat Token panduan kami.

Cara menggunakan cache konteks

Bagian ini mengasumsikan bahwa Anda telah menginstal Gemini SDK dan mengonfigurasi API seperti yang ditunjukkan dalam panduan memulai.

Membuat konten menggunakan cache

Contoh berikut menunjukkan cara membuat konten menggunakan sistem yang di-cache petunjuk dan file video.

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 bisa mendapatkan 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 mengenai cache tersebut 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 secara manual dari cache. Contoh berikut menunjukkan cara menghapus cache menggunakan CachedContent.delete().

cache.delete()

Pertimbangan tambahan

Ingatlah selalu hal-hal berikut saat menggunakan penyimpanan dalam cache konteks:

  • Jumlah token input minimum untuk penyimpanan dalam cache konteks adalah 32.768, dan maksimum sama dengan nilai maksimum untuk model tertentu. (Untuk info selengkapnya tentang token penghitungan, lihat Panduan token).
  • Model ini tidak membedakan antara token yang di-cache dan token reguler token input. Konten yang di-cache hanyalah awalan pada perintah.
  • Tidak ada batas penggunaan atau rasio khusus untuk penyimpanan dalam cache konteks; standar batas kapasitas untuk GenerateContent berlaku, dan batas token mencakup cache token kata.
  • Jumlah token yang di-cache ditampilkan dalam usage_metadata dari membuat, memperoleh, dan membuat daftar operasi layanan cache, dan juga di GenerateContent saat menggunakan cache.