Buforowanie kontekstu

W typowym przepływie pracy związanym z AI możesz wielokrotnie przekazywać te same tokeny wejściowe modelem. Za pomocą funkcji buforowania kontekstu interfejsu Gemini API możesz przekazywać niektóre treści do modelu, zapisz tokeny wejściowe w pamięci podręcznej, a następnie odwołać się do tokenów w pamięci podręcznej . W przypadku niektórych woluminów korzystanie z tokenów w pamięci podręcznej jest niższe niż wielokrotne przekazywanie tych samych tokenów.

Możesz wybrać, jak długo pamięć podręczna ma być przechowywana w pamięci podręcznej zanim tokeny zostaną automatycznie usunięte. Czas trwania tego buforowania wynosi nazywany czasem życia (TTL). Jeśli nie zostanie ustawiona, domyślna wartość TTL to 1 godzina. koszt buforowania zależy od rozmiaru tokena wejściowego i tego, jak długo tokeny trwałe.

Kontekstowe buforowanie obsługuje zarówno Gemini 1.5 Pro, jak i Gemini 1.5 Flash.

Kiedy używać pamięci podręcznej kontekstu

Kontekstowe buforowanie sprawdza się szczególnie w sytuacjach, w których w krótszym kontekście wielokrotnie odwołują się do początkowego kontekstu. Rozważ użycie buforowanie kontekstowe dla przypadków użycia takich jak:

  • czatboty z obszernymi instrukcjami systemowymi,
  • Wielokrotne analizowanie długich plików wideo
  • Cykliczne zapytania dotyczące dużych zbiorów dokumentów
  • Częsta analiza repozytorium kodu lub naprawa błędów

Jak buforowanie obniża koszty

Kontekstowe przechowywanie danych w pamięci podręcznej to płatna funkcja zaprojektowana w celu zmniejszenia ogólnych kosztów operacyjnych. Płatności są ustalane na podstawie następujących czynników:

  1. Cache token count (Liczba tokenów pamięci podręcznej): liczba tokenów wejściowych w pamięci podręcznej, rozliczanych w obniżoną stawkę, gdy pojawi się ona w kolejnych promptach.
  2. Czas przechowywania: czas przechowywania tokenów w pamięci podręcznej (TTL). rozliczane na podstawie czasu TTL liczby tokenów w pamięci podręcznej. Nie ma minimalnej wartości lub maksymalnych granic wartości TTL.
  3. Inne czynniki: obowiązują inne opłaty, np. za tokeny w pamięci podręcznej. i tokeny wyjściowe.

Aktualne ceny znajdziesz w cenniku interfejsu Gemini API. . Aby dowiedzieć się, jak liczyć tokeny, przeczytaj sekcję Token .

Jak korzystać z pamięci podręcznej kontekstu

W tej sekcji zakładamy, że masz zainstalowany pakiet Gemini SDK i skonfigurowany interfejs API zgodnie z opisem w krótkim wprowadzeniu.

Generuj treści z wykorzystaniem pamięci podręcznej

Przykład poniżej pokazuje, jak generować treści przy użyciu systemu z pamięci podręcznej instrukcje i plik wideo.

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)

Wyświetlenie listy pamięci podręcznych

Nie masz możliwości pobrania ani wyświetlenia zawartości pamięci podręcznej, ale możesz pobrać metadane pamięci podręcznej (name, model, display_name, usage_metadata, create_time, update_time i expire_time).

Aby wyświetlić metadane wszystkich przesłanych pamięci podręcznych, użyj polecenia CachedContent.list():

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

Zaktualizuj pamięć podręczną

Możesz ustawić nowy ttl lub expire_time dla pamięci podręcznej. Zmiana innych ustawień informacje o pamięci podręcznej nie są obsługiwane.

Ten przykład pokazuje, jak zaktualizować pole ttl pamięci podręcznej za pomocą CachedContent.update()

import datetime

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

Usuwanie pamięci podręcznej

Usługa buforowania udostępnia operację usuwania do ręcznego usuwania treści z pamięci podręcznej. Z przykładu poniżej dowiesz się, jak usunąć pamięć podręczną przy użyciu CachedContent.delete()

cache.delete()

Uwagi dodatkowe

Gdy korzystasz z pamięci podręcznej kontekstu, pamiętaj o tych kwestiach:

  • Minimalna liczba tokenów wejściowych do buforowania kontekstu wynosi 32 768, a Maksimum jest takie samo jak maksimum dla danego modelu. (Więcej informacji znajdziesz na stronie liczenia tokenów znajdziesz w Przewodniku po tokenach).
  • Model nie rozróżnia między tokenami w pamięci podręcznej a zwykłymi tokenami tokeny wejściowe. Treść w pamięci podręcznej jest po prostu prefiksem promptu.
  • Nie ma specjalnych limitów stawki ani wykorzystania w przypadku kontekstowego buforowania treści. standard obowiązują limity liczby żądań dla GenerateContent, a limity tokenów uwzględniają pamięć podręczną tokeny.
  • Liczba tokenów przechowywanych w pamięci podręcznej jest zwracana w sekcji usage_metadata z tworzenia, pobierania i wyświetlania listy operacji pamięci podręcznej, a także GenerateContent w przypadku korzystania z pamięci podręcznej.