*非官方的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
谷歌工作区
谷歌地图
谷歌航班
谷歌酒店
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 或更高版本。