Memoria e kontekstit

Në një rrjedhë pune tipike të AI, ju mund t'i kaloni të njëjtat argumente hyrëse vazhdimisht tek një model. Gemini API ofron dy mekanizma të ndryshëm të memorizimit:

  • Memoria e nënkuptuar (e aktivizuar automatikisht në modelet Gemini 2.5, pa garanci për kursimin e kostos)
  • Memorie e qartë (mund të aktivizohet manualisht në shumicën e modeleve, garanci për kursimin e kostos)

Regjistrimi i qartë në memorie është i dobishëm në rastet kur dëshironi të garantoni kursime të kostos, por me një punë të shtuar të zhvilluesit.

Memorie e nënkuptuar

Memoria e nënkuptuar është aktivizuar si parazgjedhje për të gjitha modelet Gemini 2.5. Ne kalojmë automatikisht kursimet e kostos nëse kërkesa juaj arrin në cache. Nuk ka asgjë që duhet të bëni për ta mundësuar këtë. Është efektive që nga 8 maj 2025. Numri minimal i shenjave të hyrjes për ruajtjen në memorien e kontekstit është 1024 për Flash 2.5 dhe 4096 për 2.5 Pro.

Për të rritur mundësinë e një goditjeje të nënkuptuar të cache:

  • Provoni të vendosni përmbajtje të mëdha dhe të zakonshme në fillim të kërkesës suaj
  • Përpiquni të dërgoni kërkesa me parashtesë të ngjashme në një kohë të shkurtër

Ju mund të shihni numrin e shenjave që ishin goditje në cache në fushën usage_metadata të objektit të përgjigjes.

Memorie e qartë

Duke përdorur veçorinë e ruajtjes eksplicite të Gemini API, ju mund t'i kaloni disa përmbajtje modelit një herë, të ruani memorien e shenjave të hyrjes dhe më pas t'i referoheni argumenteve të ruajtura në memorie për kërkesat e mëvonshme. Në vëllime të caktuara, përdorimi i argumenteve të ruajtura në memorie është kosto më e ulët sesa kalimi në të njëjtin korpus tokenësh në mënyrë të përsëritur.

Kur ruani një grup argumentesh, mund të zgjidhni për sa kohë dëshironi të ekzistojë cache përpara se të fshihen automatikisht shenjat. Kjo kohëzgjatje memorie quhet koha për të jetuar (TTL). Nëse nuk është caktuar, TTL është parazgjedhur në 1 orë. Kostoja e ruajtjes në memorie varet nga madhësia e tokenit të hyrjes dhe nga sa kohë dëshironi që tokenët të vazhdojnë.

Ky seksion supozon se keni instaluar një Gemini SDK (ose keni instaluar curl) dhe se keni konfiguruar një çelës API, siç tregohet në fillimin e shpejtë .

Gjeneroni përmbajtje duke përdorur një cache

Shembulli i mëposhtëm tregon se si të gjeneroni përmbajtje duke përdorur një udhëzim të sistemit të ruajtur dhe skedar video.

Videot

import os
import pathlib
import requests
import time

from google import genai
from google.genai import types

client = genai.Client()

# Download video file
url = 'https://storage.googleapis.com/generativeai-downloads/data/SherlockJr._10min.mp4'
path_to_video_file = pathlib.Path('SherlockJr._10min.mp4')
if not path_to_video_file.exists():
  with path_to_video_file.open('wb') as wf:
    response = requests.get(url, stream=True)
    for chunk in response.iter_content(chunk_size=32768):
      wf.write(chunk)

# Upload the video using the Files API
video_file = client.files.upload(file=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 = client.files.get(name=video_file.name)

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

# You must use an explicit version suffix: "-flash-001", not just "-flash".
model='models/gemini-2.0-flash-001'

# Create a cache with a 5 minute TTL
cache = client.caches.create(
    model=model,
    config=types.CreateCachedContentConfig(
      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="300s",
  )
)

# Construct a GenerativeModel which uses the created cache.
response = client.models.generate_content(
  model = model,
  contents= (
    'Introduce different characters in the movie by describing '
    'their personality, looks, and names. Also list the timestamps '
    'they were introduced for the first time.'),
  config=types.GenerateContentConfig(cached_content=cache.name)
)

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)

PDF

from google import genai
from google.genai import types
import io
import httpx

client = genai.Client()

long_context_pdf_path = "https://www.nasa.gov/wp-content/uploads/static/history/alsj/a17/A17_FlightPlan.pdf"

# Retrieve and upload the PDF using the File API
doc_io = io.BytesIO(httpx.get(long_context_pdf_path).content)

document = client.files.upload(
  file=doc_io,
  config=dict(mime_type='application/pdf')
)

model_name = "gemini-2.0-flash-001"
system_instruction = "You are an expert analyzing transcripts."

# Create a cached content object
cache = client.caches.create(
    model=model_name,
    config=types.CreateCachedContentConfig(
      system_instruction=system_instruction,
      contents=[document],
    )
)

# Display the cache details
print(f'{cache=}')

# Generate content using the cached prompt and document
response = client.models.generate_content(
  model=model_name,
  contents="Please summarize this transcript",
  config=types.GenerateContentConfig(
    cached_content=cache.name
  ))

# (Optional) Print usage metadata for insights into the API call
print(f'{response.usage_metadata=}')

# Print the generated text
print('\n\n', response.text)

Listoni cache

Nuk është e mundur të rikuperoni ose shikoni përmbajtjen e ruajtur në memorie, por mund të merrni meta të dhënat e memories ( name , model , display_name , usage_metadata , create_time , update_time dhe expire_time ).

Për të listuar meta të dhënat për të gjitha memoriet e ngarkuara, përdorni CachedContent.list() :

for cache in client.caches.list():
  print(cache)

Për të marrë meta të dhënat për një objekt memorie, nëse e dini emrin e tij, përdorni get :

client.caches.get(name=name)

Përditëso një cache

Ju mund të vendosni një ttl të ri ose expire_time për një memorie të fshehtë. Ndryshimi i ndonjë gjëje tjetër në lidhje me cache nuk mbështetet.

Shembulli i mëposhtëm tregon se si të përditësohet ttl e një cache duke përdorur client.caches.update() .

from google import genai
from google.genai import types

client.caches.update(
  name = cache.name,
  config  = types.UpdateCachedContentConfig(
      ttl='300s'
  )
)

Për të caktuar kohën e skadimit, ai do të pranojë ose një objekt datetime ose një varg datatime të formatuar me ISO ( dt.isoformat() , si 2025-01-27T16:02:36.473528+00:00 ). Ora juaj duhet të përfshijë një zonë kohore ( datetime.utcnow() nuk bashkëngjit një zonë kohore, datetime.now(datetime.timezone.utc) bashkëngjit një zonë kohore).

from google import genai
from google.genai import types
import datetime

# You must use a time zone-aware time.
in10min = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(minutes=10)

client.caches.update(
  name = cache.name,
  config  = types.UpdateCachedContentConfig(
      expire_time=in10min
  )
)

Fshi një cache

Shërbimi i memorizimit ofron një operacion fshirjeje për heqjen manuale të përmbajtjes nga cache. Shembulli i mëposhtëm tregon se si të fshini një cache:

client.caches.delete(cache.name)

Memorie e qartë duke përdorur bibliotekën OpenAI

Nëse jeni duke përdorur një bibliotekë OpenAI , mund të aktivizoni memorien e qartë duke përdorur veçorinë cached_contentextra_body .

Kur të përdoret memoria specifike

Ruajtja në memorie e kontekstit është veçanërisht e përshtatshme për skenarët ku një kontekst thelbësor fillestar referohet në mënyrë të përsëritur nga kërkesa më të shkurtra. Merrni parasysh përdorimin e memories së kontekstit për rastet e përdorimit të tilla si:

  • Chatbots me udhëzime të gjera të sistemit
  • Analiza e përsëritur e skedarëve video të gjatë
  • Pyetje të përsëritura kundër grupeve të mëdha të dokumenteve
  • Analiza e shpeshtë e depove të kodit ose rregullimi i gabimeve

Sa memorie e qartë zvogëlon kostot

Ruajtja në memorie e kontekstit është një veçori me pagesë e krijuar për të reduktuar kostot e përgjithshme operacionale. Faturimi bazohet në faktorët e mëposhtëm:

  1. Numri i shenjave të memories së memories: Numri i shenjave hyrëse të ruajtura në memorie, të faturuar me një tarifë të reduktuar kur përfshihen në kërkesat pasuese.
  2. Kohëzgjatja e ruajtjes: Sasia e kohës që ruhen argumentet e ruajtura në memorie (TTL), e faturuar bazuar në kohëzgjatjen TTL të numrit të shenjave të ruajtura në memorie. Nuk ka kufij minimalë ose maksimalë në TTL.
  3. Faktorë të tjerë: Zbatohen tarifa të tjera, si p.sh. për shenjat hyrëse dhe ato dalëse jo të ruajtura në memorie të fshehtë.

Për detaje të përditësuara të çmimeve, referojuni faqes së çmimeve të Gemini API. Për të mësuar se si të numëroni shenjat, shihni udhëzuesin Token .

Konsiderata shtesë

Mbani parasysh konsideratat e mëposhtme kur përdorni memorien e kontekstit:

  • Numri minimal i shenjave hyrëse për ruajtjen në memorien e kontekstit është 1024 për 2.5 Flash dhe 2048 për 2.5 Pro. Maksimumi është i njëjtë me maksimumin për modelin e dhënë. (Për më shumë rreth numërimit të shenjave, shihni udhëzuesin Token ).
  • Modeli nuk bën asnjë dallim midis argumenteve të ruajtura në memorie dhe shenjave të zakonshme të hyrjes. Përmbajtja e memorizuar është një parashtesë e kërkesës.
  • Nuk ka kufizime të veçanta të tarifave ose përdorimit në memorien e kontekstit; zbatohen kufijtë standardë të tarifave për GenerateContent dhe kufijtë e tokenit përfshijnë argumentet e ruajtura në memorie të fshehtë.
  • Numri i shenjave të ruajtura në memorie kthehet në usage_metadata nga operacionet e krijimit, marrjes dhe listimit të shërbimit të memories së memories, dhe gjithashtu në GenerateContent kur përdorni cache.