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>

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多