การแคชบริบท

ในเวิร์กโฟลว์ AI ทั่วไป คุณอาจส่งโทเค็นอินพุตเดียวกันซ้ำๆ ไปยังโมเดล เมื่อใช้ฟีเจอร์การแคชบริบทของ Gemini API คุณสามารถส่งเนื้อหาบางส่วนไปยังโมเดลได้เพียงครั้งเดียว แคชโทเค็นอินพุต แล้วอ้างอิงโทเค็นที่แคชไว้สำหรับคำขอในครั้งต่อๆ ไป ในบางวอลุ่ม การใช้โทเค็นที่แคชไว้จะมีต้นทุนต่ำกว่าการส่งต่อในกลุ่มโทเค็นเดียวกันซ้ำๆ

เมื่อแคชชุดโทเค็น คุณจะเลือกระยะเวลาที่ต้องการให้แคชอยู่ได้ก่อนที่ระบบจะลบโทเค็นโดยอัตโนมัติ ระยะเวลาการแคชนี้เรียกว่า Time to Live (TTL) หากไม่ได้ตั้งค่า TTL ไว้ ระบบจะใช้ค่าเริ่มต้นเป็น 1 ชั่วโมง ค่าใช้จ่ายในการแคชจะขึ้นอยู่กับขนาดของโทเค็นอินพุตและระยะเวลาที่คุณต้องการให้โทเค็นคงอยู่

การแคชบริบทรองรับทั้ง Gemini 1.5 Pro และ Gemini 1.5 Flash

กรณีที่ควรใช้การแคชบริบท

การแคชบริบทเหมาะอย่างยิ่งกับสถานการณ์ที่มีการอ้างอิงบริบทเริ่มต้นจำนวนมากซ้ำๆ โดยคำขอที่สั้นกว่า ลองใช้แคชตามบริบทสําหรับกรณีการใช้งาน เช่น

  • แชทบ็อตที่มีวิธีการของระบบอย่างละเอียด
  • การวิเคราะห์ไฟล์วิดีโอที่มีความยาวซ้ำๆ
  • การค้นหาที่ซ้ำกันกับชุดเอกสารขนาดใหญ่
  • การวิเคราะห์ที่เก็บโค้ดหรือการแก้ไขข้อบกพร่องบ่อยครั้ง

การแคชช่วยลดต้นทุนได้อย่างไร

การแคชบริบทเป็นฟีเจอร์แบบชำระเงินที่ออกแบบมาเพื่อลดต้นทุนในการดำเนินการโดยรวม การเรียกเก็บเงินจะอิงตามปัจจัยต่อไปนี้

  1. จำนวนโทเค็นแคช: จำนวนโทเค็นอินพุตที่แคชไว้ ซึ่งจะเรียกเก็บเงินในอัตราที่ลดลงเมื่อรวมอยู่ในข้อความแจ้งที่ตามมา
  2. ระยะเวลาพื้นที่เก็บข้อมูล: ระยะเวลาที่ระบบจะจัดเก็บโทเค็นที่แคชไว้ (TTL) โดยเรียกเก็บตามระยะเวลา TTL ของจำนวนโทเค็นที่แคชไว้ TTL ไม่มีขีดจำกัดต่ำสุดหรือสูงสุด
  3. ปัจจัยอื่นๆ: จะมีค่าใช้จ่ายอื่นๆ เช่น โทเค็นอินพุตที่ไม่ได้แคชและโทเค็นเอาต์พุต

ดูรายละเอียดราคาล่าสุดได้ที่หน้าราคาของ Gemini API โปรดดูวิธีนับโทเค็นที่คำแนะนำเกี่ยวกับโทเค็น

วิธีใช้การแคชบริบท

ส่วนนี้จะถือว่าคุณติดตั้ง Gemini SDK (หรือติดตั้ง Curl ไว้แล้ว) และได้กำหนดค่าคีย์ 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 เมื่อใช้แคช