iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
生成式 AI

Gemini 多模態大型語言模型大小事系列 第 21

Gemini 多模態大型語言模型大小事 Day21 - 內容快取

  • 分享至 

  • xImage
  •  

前言

    程式環境都會用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 內容快取是一種機制,讓您能將之前的對話或特定資訊儲存起來,以便在後續的互動中直接取用。這就像是我們人類在對話時,會根據之前的談話內容來調整接下來的話題一樣。

簡單來說,內容快取就是讓 Gemini 記住過去的對話,以便提供更個人化、更相關的回應。

使用內容快取的時機

內容快取特別適用於 較短的要求會重複參照初始背景資訊。建議做法 適合不同用途的情境快取功能

  • 具備豐富系統操作說明的聊天機器人
  • 重複分析長篇影片檔案
  • 針對大型文件集執行週期性查詢
  • 頻繁分析程式碼存放區或修正錯誤

快取功能如何降低成本

內容快取是一項付費功能,旨在降低整體作業成本。 費用取決於下列因素:

  • 快取權杖數量:快取的輸入權杖數量,由多個 降低比率
  • 儲存時間長度:儲存快取權杖的時間 (TTL)、 計費依據為快取權杖數量的存留時間。沒有最低金額限制 或存留時間的最大值
  • 其他因素:可能須支付其他費用,例如非快取輸入權杖 輸出符記

如何使用內容快取?

使用快取系統產生內容 操作說明和影片檔案

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

好的,以下是以他們在電影中第一次出現的時間戳為基準,列出這部電影中不同角色的描述:

  • 0:13 - 一位名叫 威爾史密斯 的年輕男子,看起來是一個笨拙且熱心的年輕人,他渴望成為一名偵探。
  • 1:26 - 一位名叫 華德克蘭 的男子,他看起來很富有且盛氣凌人。
  • 1:51 - 一位名叫 湯瑪斯墨菲 的男子,他看起來很嚴厲且固執。
  • 2:06 - 一位名叫 凱薩琳麥奎爾 的年輕女子,她看起來很天真且可愛。
  • 2:26 - 一位名叫 喬凱頓 的男子,他看起來像農夫,性格友善且粗俗。

這部電影看起來真的很有趣!你想要問我更多關於這部電影的問題嗎?

列出快取

系統無法擷取或查看快取內容,但可以擷取 快取中繼資料 (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()

上一篇
Gemini 多模態大型語言模型大小事 Day20 -使用嵌入功能搜尋文件
下一篇
Gemini 多模態大型語言模型大小事 Day22 - 瞭解及計算符記
系列文
Gemini 多模態大型語言模型大小事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言