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:
- 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.
- 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.
- 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żeGenerateContent
w przypadku korzystania z pamięci podręcznej.