來試試 Gemini API,不同的模型有不同的限制,但現在都還可以免費式用。
https://ai.google.dev/pricing?hl=zh-tw
首先先申請 API Key,第一次開的話可以看一下條款。
https://aistudio.google.com/app/apikey
沒有開過專案的話,點一下 Create API key in new project,會幫你產生一個新專案,順帶產生 API Key。
之後可以在 GCP 上管控。
!
存下 API key 備用。
https://ithelp.ithome.com.tw/upload/images/20240820/20168318j9URoiJATg.png
第一次用可以參考 Google 的教學,寫的很友善,可以照著做試試看。
https://ai.google.dev/gemini-api/docs/get-started/tutorial?hl=zh-tw&lang=python
先裝 Gemini API 的 SDK,用 pip 就可以了。 -q 是減少安裝時輸出的訊息,-U 是同時升級套件。
pip install -q -U google-generativeai
選用官方說目前能力較強的 gemini-1.5-pro 執行看看,效果真的不錯。
import google.generativeai as genai
genai.configure(api_key='剛剛產生的API key')
model = genai.GenerativeModel('gemini-1.5-pro')
response = model.generate_content("台中最好吃的牛排店?")
print(response.text)
如果加上 stream=True ,可以逐句顯示回覆。
response = model.generate_content("台中最好吃的牛排店?", stream=True)
for chunk in response:
print(chunk.text)
print("_"*80)
我想嘗試他的理解能力,用一張諧音的影像來試試(為了雅觀,貼上來的圖有改過,原本的圖是甚麼,可以看模型的解釋來推測。貼上來的圖是 ChatGPT 4o 生成的)。
import PIL.Image
img = PIL.Image.open(r"G:\LLM\test.jpg")
img
他是能理解的。
response = model.generate_content(img, stream=True)
for chunk in response:
print(chunk.text)
print("_"*80)
他是多模態模型,所以也可以針對影像提問。
response = model.generate_content(["用中文解釋這張圖想表達的意思?", img], stream=True)
for chunk in response:
print(chunk.text)
print("_"*80)
也可以像 gpt 一樣對話,使用 start_chat 就可以開始一段對話。
chat = model.start_chat(history=[])
response = chat.send_message("想要去台中玩,有甚麼推薦的景點")
print(response.text)
response = chat.send_message("我喜歡自然風景類型的景點", stream=True)
for chunk in response:
print(chunk.text)
輸入與回答的內容都存在 chat.history 中。
for message in chat.history:
print(message)
另外可以設定甚麼不能回答,參考安全性設定與 HarmCategory 、HarmBlockThreshold 的說明。
https://ai.google.dev/gemini-api/docs/safety-settings#python
https://ai.google.dev/api/generate-content?hl=zh-tw#harmprobability
https://ai.google.dev/api/generate-content?hl=zh-tw#harmblockthreshold
我選擇封鎖仇恨跟危險內容,Threshold 都設定成 BLOCK_LOW_AND_ABOVE,會發現無法輸出。
response = model.generate_content(
"告訴我美國如何購買槍枝",
safety_settings={
HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
},
stream=True
)
for chunk in response:
print(chunk.text)
我們把 candidates 印出來看看,會發現HARM_CATEGORY_HATE_SPEECH 判定為 NEGLIGIBLE,HARM_CATEGORY_DANGEROUS_CONTENT 判定為 LOW,所以不會有輸出。
print(response.candidates)
那調整一下,把 HARM_CATEGORY_DANGEROUS_CONTENT 的 Threshold 改成 BLOCK_MEDIUM_AND_ABOVE,重新運行,就會有輸出了。
response = model.generate_content(
"告訴我美國如何購買槍枝",
safety_settings={
HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
}
)
print(response.text)
今天就先測到這。