Project Icon

Gemini-API

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

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

Gemini 横幅

PyPI 下载量 依赖 许可证 代码风格

GitHub 星标 GitHub 问题 CI

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

星标历史

星标历史图表

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号