Gemini-API

Gemini-API

异步Python封装库实现Google Gemini AI功能集成

Gemini-API是一个基于Google Gemini网页应用的异步Python封装库。该项目通过逆向工程实现了持久化Cookie、ImageFx支持和扩展功能等特性,能够自动分类文本和图像输出。库采用asyncio进行异步处理,支持多轮对话、图像识别和生成等功能,为开发者提供了便捷的Gemini AI集成方案。其接口设计简洁,类似官方API,易于使用。

Gemini-APIPython异步AIGoogleGithub开源项目
<p align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/5f82c3e3-97a5-4187-9d0b-c67ba18414e3.png" width="55%" alt="Gemini 横幅" align="center"> </p> <p align="center"> <a href="https://pypi.org/project/gemini-webapi"> <img src="https://img.shields.io/pypi/v/gemini-webapi" alt="PyPI"></a> <a href="https://pepy.tech/project/gemini-webapi"> <img src="https://static.pepy.tech/badge/gemini-webapi" alt="下载量"></a> <a href="https://github.com/HanaokaYuzu/Gemini-API/network/dependencies"> <img src="https://img.shields.io/librariesio/github/HanaokaYuzu/Gemini-API" alt="依赖"></a> <a href="https://github.com/HanaokaYuzu/Gemini-API/blob/master/LICENSE"> <img src="https://img.shields.io/github/license/HanaokaYuzu/Gemini-API" alt="许可证"></a> <a href="https://github.com/psf/black"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/a1814e94-4859-4816-96d5-762ceca09012.svg" alt="代码风格"></a> </p> <p align="center"> <a href="https://star-history.com/#HanaokaYuzu/Gemini-API"> <img src="https://img.shields.io/github/stars/HanaokaYuzu/Gemini-API?style=social" alt="GitHub 星标"></a> <a href="https://github.com/HanaokaYuzu/Gemini-API/issues"> <img src="https://img.shields.io/github/issues/HanaokaYuzu/Gemini-API?style=social&logo=github" alt="GitHub 问题"></a> <a href="https://github.com/HanaokaYuzu/Gemini-API/actions/workflows/pypi-publish.yml"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/6ffd53e8-b0bc-4187-a806-2b000788a73a.svg" alt="CI"></a> </p>

<img src="https://yellow-cdn.veclightyear.com/835a84d5/80778147-98de-49b6-8de3-8723c1d54244.svg" width="35px" alt="Gemini 图标" /> Gemini-API

一个为 Google Gemini 网页应用(前身为 Bard)设计的异步 Python 封装器,通过逆向工程实现。

特性

  • 持久化 Cookies - 在后台自动刷新 cookies。为长期运行的服务进行了优化。
  • ImageFx 支持 - 支持获取由 ImageFx(Google 最新的 AI 图像生成器)生成的图像。
  • 扩展支持 - 支持使用 Gemini 扩展(如 YouTube 和 Gmail)生成内容。
  • 分类输出 - 自动对响应中的文本、网络图像和 AI 生成的图像进行分类。
  • 官方风格 - 提供简洁优雅的接口,灵感来自 Google Generative AI 的官方 API。
  • 异步 - 利用 asyncio 高效运行生成任务并返回输出。

目录

安装

[!注意]

此软件包需要 Python 3.10 或更高版本。

使用 pip 安装/更新软件包。

pip install -U gemini_webapi

可选地,本软件包提供了一种从本地浏览器自动导入 cookies 的方法。要启用此功能,还需安装 browser-cookie3。支持的平台和浏览器可以在这里找到。

pip install -U browser-cookie3

认证

[!提示]

如果已安装 browser-cookie3,可以跳过此步骤直接进入使用方法部分。只需确保您已在浏览器中登录 https://gemini.google.com

  • 转到 https://gemini.google.com 并使用您的 Google 账户登录
  • 按 F12 打开 Web 检查器,转到"网络"标签页并刷新页面
  • 点击任意请求,复制 __Secure-1PSID__Secure-1PSIDTS 的 cookie 值

[!注意]

如果您的应用程序部署在容器化环境中(如 Docker),您可能希望使用卷来持久化 cookies,以避免每次容器重建时都需要重新认证。

以下是一个示例 docker-compose.yml 文件的部分内容:

services: main: volumes: - ./gemini_cookies:/usr/local/lib/python3.12/site-packages/gemini_webapi/utils/temp

[!注意]

API 的自动 cookie 刷新功能不需要 browser-cookie3,并且默认是启用的。它允许您保持 API 服务运行而不用担心 cookie 过期。

此功能可能导致您需要在浏览器中重新登录 Google 账户。这是预期的行为,不会影响 API 的功能。

为避免这种情况,建议从单独的浏览器会话获取 cookies,并尽快关闭它以获得最佳利用(例如,在浏览器的隐私模式下进行新的登录)。更多详情可以在这里找到。

使用方法

初始化

导入所需的包,并使用上一步获得的 cookies 初始化客户端。成功初始化后,API 将在后台自动刷新 __Secure-1PSIDTS,只要进程保持活跃。

import asyncio from gemini_webapi import GeminiClient # 将 "COOKIE VALUE HERE" 替换为您实际的 cookie 值。 # 如果您的账户没有 Secure_1PSIDTS,请将其留空。 Secure_1PSID = "COOKIE VALUE HERE" Secure_1PSIDTS = "COOKIE VALUE HERE" async def main(): # 如果安装了 browser-cookie3,只需使用 `client = GeminiClient()` client = GeminiClient(Secure_1PSID, Secure_1PSIDTS, proxies=None) await client.init(timeout=30, auto_close=False, close_delay=300, auto_refresh=True) asyncio.run(main())

[!提示]

auto_closeclose_delay 是可选参数,用于在一定时间不活动后自动关闭客户端。此功能默认禁用。在像聊天机器人这样的长期运行服务中,建议将 auto_close 设置为 True,并配合合理的 close_delay 秒数,以更好地管理资源。

从文本生成内容

通过调用 GeminiClient.generate_content 提出一次性快速问题。

async def main(): response = await client.generate_content("Hello World!") print(response.text) asyncio.run(main())

[!提示]

如果您只想查看响应文本,可以直接使用 print(response) 获得相同的输出

从图像生成内容

Gemini 支持图像识别和从图像生成内容。您可以选择将图像作为 bytes 类型的文件数据列表,或者 strpathlib.Path 类型的文件路径列表,与文本提示一起传递给 GeminiClient.generate_content

async def main(): response = await client.generate_content( "描述这些图像中的每一个", images=["assets/banner.png", "assets/favicon.png"], ) print(response.text) asyncio.run(main())

多轮对话

如果您想保持对话的连续性,请使用 GeminiClient.start_chat 创建一个 ChatSession 对象,并通过它发送消息。对话历史将在每轮对话后自动处理和更新。

async def main(): chat = client.start_chat() response1 = await chat.send_message("简要介绍一下欧洲") response2 = await chat.send_message("那里的人口是多少?") print(response1.text, response2.text, sep="\n\n----------------------------------\n\n") asyncio.run(main())

[!提示]

GeminiClient.generate_content 一样,ChatSession.send_message 也接受 image 作为可选参数。

继续之前的对话

要手动检索之前的对话,您可以在创建新的 ChatSession 时将之前 ChatSession 的元数据传递给 GeminiClient.start_chat。或者,如果您需要在当前 Python 进程结束后访问它们,可以将之前的元数据保存到文件或数据库中。

async def main(): # 开始新的聊天会话 chat = client.start_chat() response = await chat.send_message("今天天气真好") # 保存聊天的元数据 previous_session = chat.metadata # 加载之前的对话 previous_chat = client.start_chat(metadata=previous_session) response = await previous_chat.send_message("我之前的消息是什么?") print(response) asyncio.run(main())

获取响应中的图像

API 输出中的图像以 Image 对象列表的形式存储。您可以通过调用 image.titleimage.urlimage.alt 分别访问图像的标题、URL 和描述。

async def main(): response = await client.generate_content("给我发一些猫的图片") for image in response.images: print(image, "\n\n----------------------------------\n") asyncio.run(main())

使用 ImageFx 生成图像

2022年2月,Google 推出了一个名为 ImageFx 的新 AI 图像生成器,并将其集成到 Gemini 中。您可以通过自然语言简单地要求 Gemini 使用 ImageFx 生成图像。

[!IMPORTANT]

Google对Gemini的图像生成功能有一些限制,所以其可用性可能因地区/账户而异。以下是从官方文档复制的摘要(截至2024年2月15日):

Gemini应用程序中的图像生成功能在大多数国家可用,欧洲经济区(EEA)、瑞士和英国除外。它仅支持英语提示

此功能在任何特定Gemini应用程序中的可用性也仅限于该应用程序支持的语言和国家。

目前,此功能不向18岁以下用户开放。

async def main(): response = await client.generate_content("生成一些猫的图片") for image in response.images: print(image, "\n\n----------------------------------\n") asyncio.run(main())

[!NOTE]

默认情况下,当被要求发送图像时(如上例所示),Gemini会发送从网络获取的图像,而不是使用AI模型生成图像,除非你在提示中特别要求"生成"图像。在这个包中,网络图像和生成的图像被分别视为WebImageGeneratedImage,并会在输出中自动分类。

将图像保存到本地文件

你可以通过调用Image.save()将Gemini返回的图像保存到/temp下的本地文件。你可以选择通过传递pathfilename参数来指定文件路径和文件名,并通过传递skip_invalid_filename=True来跳过无效文件名的图像。这适用于WebImageGeneratedImage

async def main(): response = await client.generate_content("生成一些猫的图片") for i, image in enumerate(response.images): await image.save(path="temp/", filename=f"cat_{i}.png", verbose=True) asyncio.run(main())

使用Gemini扩展生成内容

[!IMPORTANT]

要在API中访问Gemini扩展,你必须先在Gemini网站上激活它们。与图像生成一样,Google对Gemini扩展的可用性也有限制。以下是从官方文档复制的摘要(截至2024年2月18日):

要在Gemini应用程序中使用扩展:

使用你自己管理的个人Google账户登录。扩展(包括Google Workspace扩展)目前不适用于学校、企业或其他组织的Google Workspace账户。

启用Gemini应用程序活动。扩展仅在Gemini应用程序活动开启时可用。

重要提示:目前,扩展仅支持英语、日语和韩语

在为你的账户激活扩展后,你可以通过自然语言或在提示前加上"@"后跟扩展关键词来在你的提示中访问它们。

async def main(): response1 = await client.generate_content("@Gmail 我邮箱里最新的消息是什么?") print(response1, "\n\n----------------------------------\n") response2 = await client.generate_content("@Youtube Taylor Swift最近的活动是什么?") print(response2, "\n\n----------------------------------\n") asyncio.run(main())

[!NOTE]

对于可用地区的限制,实际上只要求你的Google账户的首选语言设置为上述三种支持语言之一即可。你可以在这里更改你的语言设置。

检查并切换到其他回复候选

来自Gemini的响应通常包含多个具有不同生成内容的回复候选。你可以检查所有候选并选择一个来继续对话。默认情况下,第一个候选会被自动选择。

async def main(): # 开始对话并列出所有回复候选 chat = client.start_chat() response = await chat.send_message("给我推荐一本科幻小说。") for candidate in response.candidates: print(candidate, "\n\n----------------------------------\n") if len(response.candidates) > 1: # 通过手动选择候选来控制正在进行的对话流程 new_candidate = chat.choose_candidate(index=1) # 在这里选择第二个候选 followup_response = await chat.send_message("告诉我更多关于它的信息。") # 将基于选择的候选生成内容 print(new_candidate, followup_response, sep="\n\n----------------------------------\n\n") else: print("只有一个可用候选。") asyncio.run(main())

控制日志级别

你可以将包的日志级别设置为以下值之一:DEBUGINFOWARNINGERRORCRITICAL。默认值为INFO

from gemini_webapi import set_log_level set_log_level("DEBUG")

参考资料

Google AI Studio

acheong08/Bard

星标历史

<p align="center"> <a href="https://star-history.com/#HanaokaYuzu/Gemini-API"> <img src="https://api.star-history.com/svg?repos=HanaokaYuzu/Gemini-API&type=Date" width="75%" alt="星标历史图表"></a> </p>

编辑推荐精选

Qwen2.5-VL

Qwen2.5-VL

一款强大的视觉语言模型,支持图像和视频输入

Qwen2.5-VL 是一款强大的视觉语言模型,支持图像和视频输入,可用于多种场景,如商品特点总结、图像文字识别等。项目提供了 OpenAI API 服务、Web UI 示例等部署方式,还包含了视觉处理工具,有助于开发者快速集成和使用,提升工作效率。

HunyuanVideo

HunyuanVideo

HunyuanVideo 是一个可基于文本生成高质量图像和视频的项目。

HunyuanVideo 是一个专注于文本到图像及视频生成的项目。它具备强大的视频生成能力,支持多种分辨率和视频长度选择,能根据用户输入的文本生成逼真的图像和视频。使用先进的技术架构和算法,可灵活调整生成参数,满足不同场景的需求,是文本生成图像视频领域的优质工具。

WebUI for Browser Use

WebUI for Browser Use

一个基于 Gradio 构建的 WebUI,支持与浏览器智能体进行便捷交互。

WebUI for Browser Use 是一个强大的项目,它集成了多种大型语言模型,支持自定义浏览器使用,具备持久化浏览器会话等功能。用户可以通过简洁友好的界面轻松控制浏览器智能体完成各类任务,无论是数据提取、网页导航还是表单填写等操作都能高效实现,有利于提高工作效率和获取信息的便捷性。该项目适合开发者、研究人员以及需要自动化浏览器操作的人群使用,在 SEO 优化方面,其关键词涵盖浏览器使用、WebUI、大型语言模型集成等,有助于提高网页在搜索引擎中的曝光度。

xiaozhi-esp32

xiaozhi-esp32

基于 ESP32 的小智 AI 开发项目,支持多种网络连接与协议,实现语音交互等功能。

xiaozhi-esp32 是一个极具创新性的基于 ESP32 的开发项目,专注于人工智能语音交互领域。项目涵盖了丰富的功能,如网络连接、OTA 升级、设备激活等,同时支持多种语言。无论是开发爱好者还是专业开发者,都能借助该项目快速搭建起高效的 AI 语音交互系统,为智能设备开发提供强大助力。

olmocr

olmocr

一个用于 OCR 的项目,支持多种模型和服务器进行 PDF 到 Markdown 的转换,并提供测试和报告功能。

olmocr 是一个专注于光学字符识别(OCR)的 Python 项目,由 Allen Institute for Artificial Intelligence 开发。它支持多种模型和服务器,如 vllm、sglang、OpenAI 等,可将 PDF 文件的页面转换为 Markdown 格式。项目还提供了测试框架和 HTML 报告生成功能,方便用户对 OCR 结果进行评估和分析。适用于科研、文档处理等领域,有助于提高工作效率和准确性。

飞书多维表格

飞书多维表格

飞书多维表格 ×DeepSeek R1 满血版

飞书多维表格联合 DeepSeek R1 模型,提供 AI 自动化解决方案,支持批量写作、数据分析、跨模态处理等功能,适用于电商、短视频、影视创作等场景,提升企业生产力与创作效率。关键词:飞书多维表格、DeepSeek R1、AI 自动化、批量处理、企业协同工具。

CSM

CSM

高质量语音生成模型

CSM 是一个开源的语音生成项目,它提供了一个基于 Llama-3.2-1B 和 CSM-1B 的语音生成模型。该项目支持多语言,可生成多种声音,适用于研究和教育场景。通过使用 CSM,用户可以方便地进行语音合成,同时项目还提供了水印功能,确保生成音频的可追溯性和透明度。

agents-course

agents-course

Hugging Face 的 AI 智能体课程,涵盖多种智能体框架及相关知识

本项目是 Hugging Face 推出的 AI 智能体课程,深入介绍了 AI 智能体的相关概念,如大语言模型、工具使用等。课程包含多个单元,详细讲解了不同的智能体框架,如 smolagents 和 LlamaIndex,提供了丰富的学习资源和实践案例。适合对 AI 智能体感兴趣的开发者和学习者,有助于提升他们在该领域的知识和技能。

RagaAI-Catalyst

RagaAI-Catalyst

用于 AI 项目管理和 API 交互的工具集,助力 AI 项目高效开发与管理。

RagaAI-Catalyst 是一款专注于 AI 领域的强大工具集,为开发者提供了便捷的项目管理、API 交互、令牌管理等功能。支持多 API 密钥上传,能快速创建、列出和管理 AI 项目,还可获取项目用例和指标信息。适用于各类 AI 开发场景,提升开发效率,推动 AI 项目顺利开展。

smolagents

smolagents

一个包含多种工具和文档处理功能,适用于 LLM 使用的项目。

smolagents 是一个功能丰富的项目,提供了如文件格式转换、网页内容读取、语义搜索等多种工具,支持将常见文件类型或网页转换为 Markdown,方便进行文档处理和信息提取,能满足不同场景下的需求,提升工作效率和数据处理能力。

下拉加载更多