今天測試看看處理 pdf 的能力。
一樣先設定好 API KEY 跟模型,接著把測試的 pdf 下載下來。
import google.generativeai as genai
genai.configure(api_key='自己的 API key')
model = genai.GenerativeModel('gemini-1.5-flash')
!wget -O gemini.pdf https://storage.googleapis.com/cloud-samples-data/generative-ai/pdf/2403.05530.pdf
接著用 upload_file 把 pdf 上傳到雲端,可以加上 display_name 參數來指定 display_name。
sample_file = genai.upload_file( path="gemini.pdf" , display_name="Gemini 1.5 PDF")
他可以讀取多份文件分析,我再多上傳了兩份不同的文件,看看效果。
sample_file_2 = genai.upload_file( path="testPdfA.pdf" , display_name="Test PDF A")
sample_file_3 = genai.upload_file( path="testPdfB.pdf" , display_name="Test PDF B")
response = model.generate_content([sample_file, sample_file_2, sample_file_3, '針對這三份文件,各寫一段簡介'])
print(response.text)
他有正確的讀懂出我上傳的其他兩份文件。
現在雲端上有多份檔案,我們把他們列出來看一下狀況。
for file in genai.list_files():
print(f"{file.name}, {file.display_name}, URI: {file.uri}")
他們的 UNIQUE KEY 是 name,可以通過 name 取得、刪除檔案。我來把自己額外上傳的兩份刪掉。
genai.delete_file("files/6**********1")
genai.delete_file("files/g**********z")
for file in genai.list_files():
print(f"{file.name}, {file.display_name}, URI: {file.uri}")
接下來試試看他寫程式的能力。
有兩個方法可以設定,第一個方式是在呼叫 generate_content 的時候設定,加上 tools = 'code_execution' 即可。
model = genai.GenerativeModel(model_name = 'gemini-1.5-pro')
response = model.generate_content("用 python 寫一個只允許數字的正規表達式", tools = 'code_execution')
print(response.text)
我小改一下讓他多跑兩個測試,一樣是可以正確運行的。
import re
for string in ["12345", "A123", "123中文"]:
match = re.match(r"^\d+$", string)
if match:
print("The string contains only digits.")
else:
print("The string does not contain only digits.")
第二個方式是在選擇 model 時啟用這個功能。
model = genai.GenerativeModel(
model_name = 'gemini-1.5-pro',
tools = 'code_execution'
)
response = model.generate_content('寫一個譨把英文字母全轉大寫的 python 程式.')
print(response.text)
直接複製來用,是可以運行的。
def to_uppercase(text):
"""將輸入的文字轉換為全部大寫。
Args:
text: 要轉換的文字。
Returns:
全部大寫的文字。
"""
return text.upper()
text = "Hello, world!"
uppercase_text = to_uppercase(text)
print(f"原始文字:{text}")
print(f"大寫文字:{uppercase_text}")
如果是要在 chat 模式下使用此功能,也是要在讀 model 的時候就設定好。
model = genai.GenerativeModel(
model_name = 'gemini-1.5-pro',
tools = 'code_execution'
)
chat = model.start_chat()
response = chat.send_message('用 python 寫一支程式計算出前50個質數的和 ')
print(response.text)
複製起來測試,也是可以正確運行。
def is_prime(n):
"""檢查一個數字是否為質數。"""
if n <= 1:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
primes = []
num = 2
while len(primes) < 50:
if is_prime(num):
primes.append(num)
num += 1
sum_of_primes = sum(primes)
print(f"前 50 個質數的和是: {sum_of_primes}")
今天就測到這邊。
參考
https://ai.google.dev/gemini-api/docs/document-processing?hl=zh-tw&authuser=1&lang=python
https://ai.google.dev/api/files?authuser=1&hl=zh-tw
https://ai.google.dev/gemini-api/docs/code-execution?hl=zh-tw&authuser=1&lang=python