การแคชบริบท

ในเวิร์กโฟลว์ 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 และกำหนดค่า 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 เมื่อใช้แคช