*非官方的Python 包裝器 python-gemini-api 可供面臨頻繁身份驗證問題或無法使用 Google 驗證的使用者使用。包裝器使用 cookie 值透過逆向工程與 Google Gemini 互動。該項目涉及與 Antonio Cheong 的合作。
在官方方面,Google 提供了部分免費、乾淨的官方 Gemini API 和 SDK,可以透過 Python 套件 google-generativeai 靈活地存取和使用它們。
提示
| 2024-03-26 | [參見程式碼範例]
使用 Open Router 查看暫時免費的開源 LLM API。 (免費限制:10 個請求/分鐘)
| 2024年5月20日 |根據地區/國家(IP)和帳戶的不同,邏輯上會有一些變化。用戶需要檢查以下內容以找到適合自己的邏輯。該軟體包仍然適用於最常見的用例。
BOT_SERVER
參數self._sid
self._rcid
|紙|官方網站 |官方API | API文件|
Gemini 是由 Google DeepMind 開發的一系列生成式 AI 模型,專為多模式用例而設計。 Gemini API 讓您可以存取 Gemini Pro 和 Gemini Pro Vision 型號。 2024年2月,Google的Bard服務變更為Gemini 。
模型 | 類型 | 使用權 | 細節 |
---|---|---|---|
雙子座 | 所有權 | 應用程式介面[13] | Google DeepMind 專有的多模式人工智慧,包括 Gemini Pro 和 Gemini Pro Vision 等高階模型。存取僅限於 API 使用;可以透過論文和網站獲得更多見解。 [1][2] |
芽 | 開源 | 可下載 免費API | 適合 QA 和摘要等任務的開源文字到文字語言模型。權重可下載以供本地使用,詳細文件可透過論文和網站提供。 [3][4] |
代碼傑瑪 | 開源 | 可下載 | 此開源模型專為程式設計任務而設計,提供可下載的權重,以幫助開發人員進行程式碼產生和類似活動。有關更多信息,請參閱相關論文、部落格文章和 Hugging Face 集合。 [5][6][7] |
這是一個源自 Bard API 專案的 Python 包裝器,旨在以 REST 格式擷取來自 Gemini Web 的回應。由於速率限制和阻塞問題,對於 Gemini 來說,同步客戶端比非同步客戶端更受歡迎。
pip install python-gemini-api
pip install git+https://github.com/dsdanielpark/Gemini-API.git
對於更新版本,使用如下:
pip install -q -U python-gemini-api
造訪 https://gemini.google.com/
開啟瀏覽器,首先嘗試自動收集 cookie。
from gemini import Gemini
client = Gemini ( auto_cookies = True )
# Testing needed as cookies vary by region.
# client = Gemini(auto_cookies=True, target_cookies=["__Secure-1PSID", "__Secure-1PSIDTS"])
# client = Gemini(auto_cookies=True, target_cookies="all") # You can pass whole cookies
response = client . generate_content ( "Hello, Gemini. What's the weather like in Seoul today?" )
print ( response . payload )
(手動) F12
瀏覽器控制台 → Session: Application
→ Cookies
→ 複製一些工作 cookie 集的值。如果不起作用,請轉到步驟 3。
首先單獨嘗試__Secure-1PSIDCC
。如果不起作用,請使用__Secure-1PSID
和__Secure-1PSIDTS
。還是沒有成功?試試這四個 cookie: __Secure-1PSIDCC
、 __Secure-1PSID
、 __Secure-1PSIDTS
、 NID
。如果都不起作用,請繼續執行步驟 3 並考慮傳送整個 cookie 檔案。
(建議)透過瀏覽器擴充功能匯出 Gemini 網站 cookie。例如,使用 Chrome 擴充功能 ExportThisCookies,開啟並複製 txt 檔案內容。
重要的
嘗試不同的 Google 帳戶和瀏覽器設定以找到有效的 cookie。成功可能因 IP 和帳戶狀態而異。連線後,cookie 通常會在一個月內保持有效。繼續測試直到成功。
產生內容:傳回解析後的回應。
from gemini import Gemini cookies = { "" : "" } # Cookies may vary by account or region. Consider sending the entire cookie file. client = Gemini ( cookies = cookies ) # You can use various args response = client . generate_content ( "Hello, Gemini. What's the weather like in Seoul today?" ) response . payload
從圖像生成內容:您可以使用圖像作為輸入。
from gemini import Gemini cookies = { "" : "" } client = Gemini ( cookies = cookies ) # You can use various args response = client . generate_content ( "What does the text in this image say?" , image = 'folder/image.jpg' ) response . payload
筆記
如果generate_content方法傳回空負載,請嘗試再次執行它,而不會重新初始化Gemini物件。
使用環境變數設定語言和 Gemini 版本:
設定 Gemini 回應語言(可選):在此處檢查支援的語言。預設為英語。
import os
os . environ [ "GEMINI_LANGUAGE" ] = "KR" # Setting Gemini response language (Optional)
os . environ [ "GEMINI_ULTRA" ] = "1" # Switch to Gemini-advanced response (Experimental, Optional)
# In some accounts, access to Gemini Ultra may not be available. If that's the case, please revert it back to "0".
請以 dict 格式明確聲明cookies
。您也可以使用cookie_fp
輸入包含 cookie 的檔案的路徑(支援 *.json、*.txt)。檢查資產資料夾中的範例 cookie 檔案。
from gemini import Gemini
cookies = {
"__Secure-1PSIDCC" : "value" ,
"__Secure-1PSID" : "value" ,
"__Secure-1PSIDTS" : "value" ,
"NID" : "value" ,
# Cookies may vary by account or region. Consider sending the entire cookie file.
}
client = Gemini ( cookies = cookies )
# client = Gemini(cookie_fp="folder/cookie_file.json") # (*.json, *.txt) are supported.
# client = Gemini(auto_cookies=True) # Or use auto_cookies paprameter
將auto_cookie
設為True
,並調整target_cookies
。 Gemini WebUI 必須在瀏覽器中處於作用中狀態。 browser_cookie3 啟用自動 cookie 收集,但更新可能尚未完成。
傳回 Gemini 的回應,但第一個回應可能為空。
from gemini import Gemini
cookies = {}
client = Gemini ( cookies = cookies )
prompt = "Tell me about Large Language Model."
response = client . generate_content ( prompt )
print ( response . payload )
重要的
不要重複發送相同的提示。如果會話連線成功且generate_content
運作良好,則關閉Gemini網站。如果 Gemini 網站在瀏覽器中保持開啟狀態,cookie 可能會更快過期。
generate_content 函數的輸出是GeminiModelOutput
,具有以下結構:
Gemini-API/gemini/src/model/output.py
fdf064c 中的第 16 行
發送請求:傳回請求的payload和status_code,讓偵錯更容易。
from gemini import Gemini
cookies = {}
client = Gemini ( cookies = cookies )
response_text , response_status = client . send_request ( "Hello, Gemini. Tell me about Large Language Models." )
print ( response_text )
您可以透過存取Gemini
類別中的request_count
屬性來追蹤發出的請求總數。
返回 Gemini 產生的文字。
from gemini import Gemini
cookies = {}
client = Gemini ( cookies = cookies )
prompt = "Hello, Gemini. Tell me about Large Language Models."
response = client . generate_content ( prompt )
print ( response . text )
返回 Gemini 生成的圖像。
非同步下載器
from gemini import Gemini , GeminiImage
cookies = {}
client = Gemini ( cookies = cookies )
response = client . generate_content ( "Hello, Gemini. Tell me about Large Language Models." )
generated_images = response . generated_images # Check generated images [Dict]
await GeminiImage . save ( generated_images , "output" , cookies )
# image_data_dict = await GeminiImage.fetch_images_dict(generated_images, cookies)
# await GeminiImage.save_images(image_data_dict, "output")
在 IPython 中顯示圖像您可以顯示圖像或以位元組格式將其傳輸到另一個應用程式。
import io
from gemini import Gemini , GeminiImage
from IPython . display import display , Image
cookies = {}
client = Gemini ( cookies = cookies )
bytes_images_dict = GeminiImage . fetch_images_dict_sync ( generated_images , cookies ) # Get bytes images dict
for image_name , image_bytes in bytes_images_dict . items ():
print ( image_name )
image = Image ( data = image_bytes )
display ( image )
同步下載器
from gemini import Gemini , GeminiImage
cookies = {}
client = Gemini ( cookies = cookies )
response = client . generate_content ( "Create illustrations of Seoul, South Korea." )
generated_images = response . generated_images # Check generated images [Dict]
GeminiImage . save_sync ( generated_images , save_path = "output" , cookies = cookies )
# You can use byte type image dict for printing images as follow:
# bytes_images_dict = GeminiImage.fetch_images_dict_sync(generated_images, cookies) # Get bytes images dict
# GeminiImage.save_images_sync(bytes_images_dict, path="output") # Save to dir
非同步下載器包裝器
import asyncio
from gemini import GeminiImage
async def save_generated_images ( generated_images , save_path = "output" , cookies = cookies ):
await GeminiImage . save ( generated_images , save_path = save_path , cookies = cookies )
# Run the async function
if __name__ == "__main__" :
cookies = {}
client = Gemini ( cookies = cookies )
response = client . generate_content ( "Create illustrations of Seoul, South Korea." )
generated_images = response . generated_images
asyncio . run ( save_generated_images ( generated_images , save_path = "output" , cookies = cookies ))
GeminiImage.save
方法邏輯
import asyncio
from gemini import Gemini , GeminiImage
async def save_generated_images ( generated_images , save_path = "output" , cookies = cookies ):
image_data_dict = await GeminiImage . fetch_images_dict ( generated_images , cookies ) # Get bytes images dict asynchronously
await GeminiImage . save_images ( image_data_dict , save_path = save_path )
# Run the async function
if __name__ == "__main__" :
cookies = {}
client = Gemini ( cookies = cookies )
response = client . generate_content ( "Create illustrations of Seoul, South Korea." )
generated_images = response . generated_images
asyncio . run ( save_generated_images ( generated_images , save_path = "output" , cookies = cookies ))
筆記
使用 GeminiImage 進行影像處理。 web_images
無需 cookie 即可運作,但對於像 Gemini 的generated_image
這樣的映像,請傳遞 cookie。從 Google 儲存下載影像需要 Cookie。檢查回應或使用現有的 cookies 變數。
返回雙子座響應的圖像。
非同步下載器
from gemini import Gemini , GeminiImage
cookies = {}
client = Gemini ( cookies = cookies )
response = client . generate_content ( "Give me a picture of Stanford." )
response_images = response . web_images # Check generated images
await GeminiImage . save ( response_images , "output" )
# image_data_dict = await GeminiImage.fetch_images_dict(response_images)
# await GeminiImage.save_images(image_data_dict, "output")
同步下載器
from gemini import Gemini , GeminiImage
cookies = {}
client = Gemini ( cookies = cookies )
response = client . generate_content ( "Give me a picture of Stanford." )
response_images = response . web_images # Check response images
GeminiImage . save_sync ( response_images , save_path = "output" )
# You can use byte type image dict as follow:
# bytes_images_dict = GeminiImage.fetch_bytes_sync(response_images) # Get bytes images dict
# GeminiImage.save_images_sync(bytes_images_dict, save_path="output") # Save to path
非同步下載器包裝器
import asyncio
from gemini import Gemini , GeminiImage
async def save_response_web_imagse ( response_images , save_path = "output" ):
await GeminiImage . save ( response_images , save_path = save_path )
if __name__ == "__main__" :
cookies = {}
client = Gemini ( cookies = cookies )
response = client . generate_content ( "Give me a picture of Stanford." )
response_images = response . web_images
asyncio . run ( save_response_web_imagse ( response_images , save_path = "output" ))
GeminiImage.save
方法邏輯
import asyncio
from gemini import Gemini , GeminiImage
async def save_response_web_imagse ( response_images , save_path = "output" ):
image_data_dict = await GeminiImage . fetch_images_dict ( response_images ) # Get bytes images dict asynchronously
await GeminiImage . save_images ( image_data_dict , save_path = save_path )
# Run the async function
if __name__ == "__main__" :
cookies = {}
client = Gemini ( cookies = cookies )
response = client . generate_content ( "Give me a picture of Stanford." )
response_images = response . web_images
asyncio . run ( save_response_web_imagse ( response_images , save_path = "output" ))
將圖像作為輸入並返回回應。
image = 'folder/image.jpg'
# image = open('folder/image.jpg', 'rb').read() # (jpg, jpeg, png, webp) are supported.
# Image file path or Byte-formatted image array
response = client . generate_content ( "What does the text in this image say?" , image = image )
print ( response )
首先,您必須連結 Google Workspace,才能透過 Gemini 網路擴充程式啟動此擴充功能。請參閱官方通知並查看隱私權政策以了解更多詳細資訊。
擴展標誌
@Gmail, @Google Drive, @Google Docs, @Google Maps, @Google Flights, @Google Hotels, @YouTube
response = client . generate_content ( "@YouTube Search clips related with Google Gemini" )
response . response_dict
谷歌工作區
Google地圖
Google航班
Google飯店
Youtube
您可以透過設定其回應候選 ID (RCID) 來指定特定回應。
# Generate content for the prompt "Give me some information about the USA."
response1 = client . generate_content ( "Give me some information about the USA." )
# After reviewing the responses, choose the one you prefer and copy its RCID.
client . rcid = "rc_xxxx"
# Now, generate content for the next prompt "How long does it take from LA to New York?"
response2 = client . generate_content ( "How long does it take from LA to New York?" )
# However, RCID may not persist. If parsing fails, reset `client.rcid` to None.
# client.rcid = None
在 Gemini 中,generate_content 傳回第一個回應。這可能會因長度或排序而異。因此,您可以指定所選回應的索引從 0 到n,如下所示。但是,如果只有 1 個回應,請將其恢復為 0。
from gemini import GeminiModelOutput
GeminiModelOutput . chosen = 1 # default is 0
response_choice_1 = client . generate_content ( "Give me some information about the USA." )
# If not all Gemini returns are necessarily plural, revert back to 0 in case of errors.
# GeminiModelOutput.chosen = 0
解析回應文字以提取所需的值。
使用Gemini.generate_custom_content
,指定自訂解析以提取特定值。預設使用 ParseMethod1 和 ParseMethod2,如果需要,您可以將自訂解析方法作為參數傳遞。請參閱custom_parser.py。
# You can create a parser method that takes response_text as the input for custom_parser.
response_text , response_status = client . send_request ( "Give me some information about the USA." )
# Use custom_parser function or class inheriting from BaseParser
response = client . generate_custom_content ( "Give me some information about the USA." , * custom_parser )
Gemini-API/gemini/client.py
31b8424 中的第 323 行
如果您想避免要求被封鎖和禁止,請使用 Crawlbase 的智慧代理。它將您的連線請求轉送到代理池中隨機輪換的 IP 位址,然後再到達目標網站。人工智慧和機器學習的結合可以更有效地避免驗證碼和封鎖。安全通訊端層 (SSL) 等級的參數可能需要加入到標頭中。與verify=False
結合使用。
# Get your proxy url at crawlbase https://crawlbase.com/docs/smart-proxy/get/
proxy_url = "http://xxxxx:@smartproxy.crawlbase.com:8012"
proxies = { "http" : proxy_url , "https" : proxy_url }
client = Gemini ( cookies = cookies , proxies = proxies , timeout = 30 , verify = False )
client . session . header [ "crawlbaseAPI-Parameters" ] = "country=US"
client . generate_content ( "Hello, Gemini. Give me a beautiful photo of Seoul's scenery." )
對於標準情況,使用 Gemini 類別;對於例外情況,請使用會話物件。建立新的 bot Gemini 伺服器時,調整 Headers.MAIN。
import requests
from gemini import Gemini , Headers
cookies = {}
session = requests . Session ()
session . headers = Headers . MAIN
for key , value in cookies . items ():
session . cookies . update ({ key : value })
client = Gemini ( session = session ) # You can use various args
response = client . generate_content ( "Hello, Gemini. Tell me about Large Language Model." )
探索本文檔中的其他功能。
如果您想開發自己的簡單程式碼,可以從這個簡單的程式碼範例開始。
準備必要的物品並在 Google AI Studio 取得 API 金鑰。在 Python 3.9 或更高版本上安裝並輸入頒發的 API 金鑰。詳細請參閱教學。
pip install -q -U google-generativeai
import google . generativeai as genai
GOOGLE_API_KEY = ""
genai . configure ( api_key = GOOGLE_API_KEY )
model = genai . GenerativeModel ( 'gemini-pro' )
response = model . generate_content ( "Write me a poem about Machine Learning." )
print ( response . text )
如果您有足夠的GPU資源,您可以直接下載權重,而不是使用Gemini API產生內容。考慮 Gemma 和 Code Gemma,這是一個可供本地使用的開源模型。
Gemma 模型是 Google 的輕量級、進階文字到文字、僅限解碼器的語言模型,源自 Gemini 研究。它們有英文版本,提供開放的權重和變體,非常適合回答問題和總結等任務。欲了解更多信息,請訪問 Gemma-7b 型號卡。
from transformers import AutoTokenizer , AutoModelForCausalLM
tokenizer = AutoTokenizer . from_pretrained ( "google/gemma-7b" )
model = AutoModelForCausalLM . from_pretrained ( "google/gemma-7b" )
input_text = "Write me a poem about Machine Learning."
input_ids = tokenizer ( input_text , return_tensors = "pt" )
outputs = model . generate ( ** input_ids )
print ( tokenizer . decode ( outputs [ 0 ]))
CodeGemma 是 Google 為程式碼 LLM 推出的官方版本,於 2024 年 4 月 9 日發布。您可以探索 Code Gemma 模型並查看模型卡以了解更多詳細資訊。
from transformers import GemmaTokenizer , AutoModelForCausalLM
tokenizer = GemmaTokenizer . from_pretrained ( "google/codegemma-7b-it" )
model = AutoModelForCausalLM . from_pretrained ( "google/codegemma-7b-it" )
input_text = "Write me a Python function to calculate the nth fibonacci number."
input_ids = tokenizer ( input_text , return_tensors = "pt" )
outputs = model . generate ( ** input_ids )
print ( tokenizer . decode ( outputs [ 0 ]))
OpenRouter 為選定模型提供臨時免費推理。從 Open Router API 取得 API 金鑰,並在 Open Router 型號中查看免費型號。主要使用0美元代幣成本的模型;其他型號可能會產生費用。請參閱免費的開源 LLM API 指南以了解更多資訊。
由於速率限制和阻塞問題,同步客戶端比非同步客戶端更受 Gemini 青睞,但 OpenRouter 為非同步實作提供了可靠的開源 LLM。 (免費限制:10 個請求/分鐘)
from gemini import OpenRouter
OPENROUTER_API_KEY = ""
gemma_client = OpenRouter ( api_key = OPENROUTER_API_KEY , model = "google/gemma-7b-it:free" )
prompt = "Do you know UCA academy in Korea? https://blog.naver.com/ulsancoding"
response = gemma_client . create_chat_completion ( prompt )
print ( response )
# payload = gemma_client.generate_content(prompt)
# print(payload.json())
免費型號清單包括:
google/gemma-7b-it:free
- 來自 Google 的 google/gemma-7b ***mistralai/mistral-7b-instruct:free
- Mistralai/Mistral-7B-Instruct-v0.1,用於 Mistral AI 的指令 ****huggingfaceh4/zephyr-7b-beta:free
- HuggingFaceH4/zephyr-7b-beta ***openchat/openchat-7b:free
- openchat/openchat 用來聊天 **openrouter/cinematika-7b:free
- jondurbin/cinematika-7b-v0.1undi95/toppy-m-7b:free
- Undi95/Toppy-M-7Bgryphe/mythomist-7b:free
- Gryphe/MythoMist-7bnousresearch/nous-capybara-7b:free
- NousResearch/Nous-Capybara-7B-V1 來自 Nous Research 使用Crawlbase API進行高效率的資料抓取來訓練AI模型,擁有98%的成功率和99.9%的正常運作時間。它啟動速度快,符合 GDPR/CCPA 標準,支援海量資料提取,並受到超過 7 萬開發者的信賴。
在使用此軟體包之前,請先查看 HanaokaYuzu/Gemini-API 和官方 Google Gemini API。您可以在常見問題和問題頁面上找到大多數幫助。
衷心感謝任何有關新功能或錯誤的報告。非常感謝您對程式碼的寶貴回饋。由於Google服務API介面的變化,可能會頻繁出現錯誤。有助於改進的問題報告和拉取請求始終受到歡迎。我們努力維持一個活躍且禮貌的開放社區。
口渴之前先挖井。
我們謹向所有貢獻者表達誠摯的謝意。
該軟體包旨在重新實現 Bard API 的功能,儘管 Gemini 的官方 API 已經可用,但該功能已因深受喜愛的開源社群的貢獻而存檔。
Bard API 和 Gemini API 的貢獻者。
需要使用我的邏輯修改非同步客戶端,並透過 browser_cookie3 自動收集 cookie,以及實作其他 Bard API 功能(例如程式碼提取、匯出到 Replit、圖形繪製等)。
請注意,在查看自動 cookie 收集時,cookie 似乎在發送收集請求後立即過期。使其更加用戶友好的努力沒有成功。此外,即使傳回為 None,_sid 值似乎也能正常運作。
最後,如果CustomParser和ResponseParser演算法不能正常運行,可以透過相關部分的條件語句更新新的解析方法。
我不打算積極管理這個儲存庫。請先查看 HanaokaYuzu/Gemini-API。
謝謝您,祝您有美好的一天。
麻省理工學院許可證,2024 年。使用者必須負責任地使用此軟體包並自行承擔風險。該專案是個人倡議,不隸屬於 Google,也不受 Google 認可。推薦使用Google官方API。
警告使用者對 GeminiAPI 承擔全部法律責任。未經谷歌認可。過度使用可能會導致帳戶受到限制。政策或帳戶狀態的變更可能會影響功能。利用問題和討論頁面。
Python 3.7 或更高版本。