ในเวิร์กโฟลว์ AI ทั่วไป คุณอาจส่งโทเค็นอินพุตเดียวกันซ้ำแล้วซ้ำเล่า โมเดล เมื่อใช้ฟีเจอร์การแคชบริบทของ Gemini API คุณจะส่งเนื้อหาบางอย่างได้ ไปยังโมเดลครั้งเดียว แคชโทเค็นอินพุต แล้วอ้างอิงโทเค็นที่แคชไว้ สำหรับคำขอต่อๆ ไป ในบางวอลุ่ม การใช้โทเค็นที่แคชไว้จะมีต้นทุนต่ำกว่า มากกว่าการส่งผ่านกลุ่ม โทเค็นเดียวกันซ้ำๆ
เมื่อแคชชุดโทเค็น คุณจะเลือกระยะเวลาที่คุณต้องการให้แคชเก็บได้ อยู่ก่อนที่โทเค็นจะถูกลบโดยอัตโนมัติ ระยะเวลาการแคชนี้คือ ซึ่งเรียกว่า time to Live (TTL) หากไม่ได้ตั้งค่า TTL จะใช้ค่าเริ่มต้นเป็น 1 ชั่วโมง ต้นทุนสำหรับการแคชจะขึ้นอยู่กับขนาดโทเค็นอินพุตและระยะเวลาที่คุณต้องการให้ โทเค็นให้คงอยู่
การแคชบริบทรองรับทั้ง Gemini 1.5 Pro และ Gemini 1.5 Flash
กรณีที่ควรใช้การแคชบริบท
การแคชบริบทเหมาะอย่างยิ่งกับสถานการณ์ที่ มีการอ้างอิงบริบทเบื้องต้นซ้ำๆ โดยคำขอที่สั้นกว่า ลองใช้ การแคชบริบทสำหรับกรณีการใช้งานต่างๆ เช่น
- แชทบ็อตที่มีคำแนะนำของระบบที่ครอบคลุม
- การวิเคราะห์ไฟล์วิดีโอยาวๆ ซ้ำ
- การค้นหาที่เกิดซ้ำสำหรับชุดเอกสารขนาดใหญ่
- การวิเคราะห์ที่เก็บโค้ดหรือการแก้ไขข้อบกพร่องบ่อยครั้ง
การแคชช่วยลดต้นทุนได้อย่างไร
การแคชบริบทเป็นฟีเจอร์แบบชำระเงินที่ออกแบบมาเพื่อลดต้นทุนในการดำเนินการโดยรวม การเรียกเก็บเงินจะขึ้นอยู่กับปัจจัยต่อไปนี้
- จำนวนโทเค็นแคช: จำนวนโทเค็นอินพุตที่แคชไว้ ซึ่งเรียกเก็บเงินตาม อัตราที่ลดลงเมื่อรวมอยู่ในข้อความแจ้งต่อๆ มา
- ระยะเวลาการจัดเก็บ: ระยะเวลาที่จะจัดเก็บโทเค็นที่แคชไว้ (TTL) เรียกเก็บเงินตามระยะเวลา TTL ของจำนวนโทเค็นที่แคชไว้ ไม่มีจำนวนเงินขั้นต่ำ หรือขอบเขตสูงสุดใน TTL
- ปัจจัยอื่นๆ: จะมีค่าใช้จ่ายอื่นๆ เช่น โทเค็นอินพุตที่ไม่ได้แคช และโทเค็นเอาต์พุต
โปรดดูรายละเอียดราคาล่าสุดได้ที่ราคาของ 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
เมื่อใช้แคช