程式環境都會用colab 來執行程式,如果要在其他環境執行,請自行修改哦
colab 事前準備:設定專案和 API 金鑰
載入gemini
#pip install -q -U google-generativeai
import google.generativeai as genai
API 金鑰
from google.colab import userdata
API_KEY=userdata.get('GOOGLE_API_KEY')
#genai.configure(api_key="YOUR_API_KEY")
# Configure the client library by providing your API key.
genai.configure(api_key=API_KEY)
Gemini 內容快取是一種機制,讓您能將之前的對話或特定資訊儲存起來,以便在後續的互動中直接取用。這就像是我們人類在對話時,會根據之前的談話內容來調整接下來的話題一樣。
簡單來說,內容快取就是讓 Gemini 記住過去的對話,以便提供更個人化、更相關的回應。
內容快取特別適用於 較短的要求會重複參照初始背景資訊。建議做法 適合不同用途的情境快取功能
內容快取是一項付費功能,旨在降低整體作業成本。 費用取決於下列因素:
使用快取系統產生內容 操作說明和影片檔案
from google.generativeai import caching
import datetime
import time
# 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=(
'您是一位視訊分析專家,您的工作就是回答 '
'用戶根據您有權存取的視訊檔案進行的查詢。'
),
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([(
'透過描述介紹電影中的不同角色 '
'他們的個性、外表和名字。還列出時間戳'
'他們是第一次被介紹。')])
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)
回答
Waiting for video to be processed.
Waiting for video to be processed.
Waiting for video to be processed.
Waiting for video to be processed.
Waiting for video to be processed.
Waiting for video to be processed.
Waiting for video to be processed.
Waiting for video to be processed.
Video processing complete: https://generativelanguage.googleapis.com/v1beta/files/rphv6iwli2q
prompt_token_count: 696217
candidates_token_count: 215
total_token_count: 696432
cached_content_token_count: 696190
好的,以下是以他們在電影中第一次出現的時間戳為基準,列出這部電影中不同角色的描述:
這部電影看起來真的很有趣!你想要問我更多關於這部電影的問題嗎?
系統無法擷取或查看快取內容,但可以擷取 快取中繼資料 (name、model、display_name、usage_metadata、 create_time、update_time 和 expire_time)。
for c in caching.CachedContent.list():
print(c)
回答
CachedContent(
name='cachedContents/9aoti1owt4zh',
model='models/gemini-1.5-flash-001',
display_name='sherlock jr movie',
usage_metadata={
'total_token_count': 696190,
},
create_time=2024-10-01 14:42:56.193759+00:00,
update_time=2024-10-01 14:42:56.193759+00:00,
expire_time=2024-10-01 14:47:26.023881+00:00
)
您可以為快取設定新的 ttl 或 expire_time。變更任何其他設定 就不支援快取
import datetime
cache.update(ttl=datetime.timedelta(hours=2))
快取服務提供手動移除內容的刪除作業。
cache.delete()