컨텍스트 캐싱

<ph type="x-smartling-placeholder"></ph>

일반적인 AI 워크플로에서는 동일한 입력 토큰을 모델입니다. Gemini API 컨텍스트 캐싱 기능을 사용하여 일부 콘텐츠를 입력 토큰을 캐시하고 캐시된 토큰을 참조한 다음 후속 요청에 사용할 수 있습니다. 특정 볼륨에서는 캐시된 토큰을 사용하면 비용이 저렴함 훨씬 더 효율적입니다

토큰 세트를 캐시할 때 토큰 세트를 캐시할 기간을 선택할 수 있습니다. 존재할 수도 있습니다 이 캐싱 기간은 TTL (수명)이라고 합니다. 설정하지 않으면 TTL 기본값은 1시간입니다. 이 캐싱 비용은 입력 토큰 크기와 유지될 수 있습니다

컨텍스트 캐싱은 Gemini 1.5 Pro와 Gemini 1.5 Flash를 모두 지원합니다.

컨텍스트 캐싱을 사용해야 하는 경우

컨텍스트 캐싱은 특히 메모리에 상당한 양의 데이터가 있는 초기 컨텍스트는 더 짧은 요청에서 반복적으로 참조됩니다. 다음과 같은 방법을 사용해 보세요. 다음과 같은 사용 사례를 위한 컨텍스트 캐싱:

  • 광범위한 시스템 안내가 포함된 챗봇
  • 긴 동영상 파일에 대한 반복적인 분석
  • 대규모 문서 집합에 대한 반복 쿼리
  • 빈번한 코드 저장소 분석 또는 버그 수정

캐싱으로 비용이 절감되는 방식

컨텍스트 캐싱은 전체 운영 비용을 절감하도록 설계된 유료 기능입니다. 결제는 다음 요소를 기준으로 합니다.

  1. 캐시 토큰 수: 캐시된 입력 토큰의 수입니다. 할인율을 적용받을 수 있습니다.
  2. 저장 기간: 캐시된 토큰이 저장되는 시간 (TTL)입니다. 캐시된 토큰 개수의 TTL 기간에 따라 요금이 청구됩니다. 최소 CPM이 없음 최대 경계를 설정할 수 있습니다
  3. 기타 요인: 캐시되지 않은 입력 토큰과 같은 기타 요금이 적용됩니다. 사용할 수 있습니다

최신 가격 책정에 관한 자세한 내용은 Gemini API 가격 책정을 참고하세요. 페이지를 참조하세요. 토큰을 계산하는 방법은 토큰을 참조하세요. 가이드를 참조하세요.

컨텍스트 캐싱 사용 방법

이 섹션에서는 Gemini SDK를 설치하고 API를 구성했다고 가정합니다. 키에 표시된 대로 빠른 시작에 나와 있습니다.

캐시를 사용하여 콘텐츠 생성

다음 예는 캐시된 시스템을 사용하여 콘텐츠를 생성하는 방법을 보여줍니다. 명령어와 동영상 파일을 다운로드합니다.

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)

캐시 나열

캐시된 콘텐츠를 가져오거나 볼 수는 없지만 캐시 메타데이터 (name, model, display_name, usage_metadata, create_time, update_time, expire_time)

업로드된 모든 캐시의 메타데이터를 나열하려면 CachedContent.list()를 사용합니다.

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

캐시 업데이트

캐시에 새 ttl 또는 expire_time를 설정할 수 있습니다. 다른 항목 변경 지원되지 않는다는 것을 알 수 있습니다.

다음 예는 다음을 사용하여 캐시의 ttl를 업데이트하는 방법을 보여줍니다. CachedContent.update()

import datetime

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

캐시 삭제

캐싱 서비스는 콘텐츠를 수동으로 삭제하는 삭제 작업을 제공합니다. 삭제합니다. 다음 예는 다음을 사용하여 캐시를 삭제하는 방법을 보여줍니다. CachedContent.delete()

cache.delete()

추가 고려사항

컨텍스트 캐싱을 사용할 때 다음 고려사항에 유의하세요.

  • 컨텍스트 캐싱의 최소 입력 토큰 수는 32,768개이며, 최대는 지정된 모델의 최댓값과 동일합니다. (자세한 내용은 토큰 가이드를 참조하세요.
  • 모델은 캐시된 토큰과 일반 토큰을 구별하지 않습니다. 입력 토큰입니다. 캐시된 콘텐츠는 단순히 프롬프트의 접두사입니다.
  • 컨텍스트 캐싱에는 특별한 비율이나 사용량 제한이 없습니다. 표준 GenerateContent에 대한 비율 제한이 적용되며 토큰 한도에는 캐시된 요금이 포함됩니다. 토큰입니다.
  • 캐시된 토큰의 수는 다음에서 usage_metadata에 반환됩니다. 캐시 서비스의 생성, 가져오기, 나열 작업과 캐시 사용 시 GenerateContent