Gemini-API
Gemini-API 是一个基于 Python 开发的异步封装库,旨在通过逆向工程方式,让开发者能够直接在代码中调用谷歌 Gemini 网页版(原 Bard)的强大功能。它主要解决了官方 API 在某些高级特性(如原生视频/音频生成、深度研究流程)或免费额度使用上的限制,让用户无需复杂配置即可利用现有的谷歌账号访问完整的网页端能力。
这款工具特别适合需要灵活集成 AI 能力的开发者、研究人员以及希望自动化工作流的技术爱好者。其核心亮点在于支持“持久化 Cookie"自动刷新,非常适合构建需长期运行的后台服务;同时,它原生支持图像、视频及音频的生成与编辑,并能完整执行包含计划创建和状态轮询的“深度研究”任务。此外,Gemini-API 还兼容自定义系统提示词(Gems)、扩展插件(如 YouTube、Gmail),并提供分类输出和流式传输模式。整体接口设计简洁优雅,风格贴近谷歌官方生成式 AI SDK,结合异步架构,能高效处理多轮对话及大并发任务,是连接本地应用与 Gemini 网页智能的桥梁。
使用场景
某初创公司的内容运营团队需要构建一个 7x24 小时运行的自动化新闻摘要与多媒体报告系统,旨在将全球科技资讯转化为包含图文、音频的每日简报。
没有 Gemini-API 时
- 多模态能力割裂:官方 API 对免费用户限制较多,团队需分别调用不同接口生成文本、图片和音频,导致代码逻辑复杂且维护成本极高。
- 会话状态难维持:缺乏原生的持久化 Cookie 管理,长时间运行的服务经常因会话过期而中断,需人工频繁干预重新登录。
- 深度研究缺失:无法直接触发 Google 原生的“深度研究”工作流,只能编写复杂的爬虫脚本模拟搜索,效率低且容易触发反爬机制。
- 实时流式输出困难:难以实现类似网页端的打字机效果,用户生成报告时需等待全部内容处理完毕才能查看,体验延迟严重。
- 扩展功能受限:无法便捷地调用 YouTube 或 Gmail 等原生扩展插件,导致简报中缺少最新的视频素材和邮件上下文信息。
使用 Gemini-API 后
- 原生多模态整合:利用其原生支持的视频、音频及图像生成功能,通过统一的异步 Python 接口即可一次性产出丰富的多媒体报告。
- 自动会话保活:借助后台自动刷新 Cookie 的特性,系统实现了真正的无人值守运行,彻底解决了会话中断问题。
- 一键深度调研:直接调用内置的深度研究工作流,自动完成计划制定、状态轮询和结果获取,大幅提升了资讯挖掘的深度与准确性。
- 流畅流式响应:开启流模式后,系统能实时_yield_部分生成内容,让用户在报告生成过程中即可预览进度,显著降低感知延迟。
- 生态插件无缝对接:轻松集成 YouTube 和 Gmail 等扩展插件,自动抓取最新视频链接和邮件关键信息,丰富了简报的内容维度。
Gemini-API 通过逆向工程完美复刻了网页端的全部高级特性,让开发者能以极低的成本构建出具备官方完整能力的企业级自动化应用。
运行环境要求
- Linux
- macOS
- Windows
未说明
未说明

快速开始
Gemini-API
一个针对 Google Gemini 网页应用(前身为 Bard)的逆向工程异步 Python 封装库。
特性
- 持久化 Cookie - 自动在后台刷新 Cookie。专为常开服务优化。
- 图像生成 - 原生支持通过自然语言生成和编辑图像。
- 视频与音频生成 - 原生支持生成视频以及音频/音乐内容。
- 深度研究 - 提供完整的深度研究工作流程,包括计划创建、状态轮询和结果获取。
- 系统提示词 - 支持使用 Gemini Gems 自定义模型的系统提示词。
- 扩展支持 - 支持使用 Gemini 扩展,如 YouTube 和 Gmail,生成内容。
- 分类输出 - 对响应中的文本、思考、图片、视频和音频进行分类。
- 流式模式 - 支持流式生成,可在生成过程中逐步返回部分输出。
- CLI 工具 - 独立的命令行界面,方便快速交互。
- 官方风格 - 提供简洁优雅的接口,灵感源自 Google Generative AI 的官方 API。
- 异步支持 - 使用
asyncio运行生成任务,并高效地返回结果。
目录
安装
[!注意]
本包需要 Python 3.10 或更高版本。
使用 pip 安装或更新该包。
pip install -U gemini_webapi
可选地,该包还提供通过可选依赖 browser-cookie3 从本地浏览器自动导入 Cookie 的功能。若要启用此功能,请安装 gemini_webapi[browser]。支持的平台和浏览器请参阅 此处。
pip install -U gemini_webapi[browser]
身份验证
[!TIP]
如果已安装
browser-cookie3,您可以跳过此步骤,直接前往使用方法部分。只需确保您已在浏览器中登录 https://gemini.google.com。
- 访问 https://gemini.google.com 并使用您的 Google 帐户登录
- 按 F12 打开开发者工具,切换到
Network选项卡,并刷新页面 - 点击任意请求,复制
__Secure-1PSID和__Secure-1PSIDTS的 Cookie 值
[!NOTE]
如果您的应用部署在容器化环境中(例如 Docker),建议将 Cookie 存储在卷中以持久化保存,从而避免每次容器重建时都需要重新进行身份验证。您可以设置
GEMINI_COOKIE_PATH环境变量来指定自动刷新的 Cookie 存储路径。请确保该路径对应用程序可写。以下是一个示例
docker-compose.yml文件的部分内容:
services:
main:
environment:
GEMINI_COOKIE_PATH: /tmp/gemini_webapi
volumes:
- ./gemini_cookies:/tmp/gemini_webapi
[!NOTE]
API 的自动刷新 Cookie 功能无需依赖
browser-cookie3,并且默认已启用。它允许您持续运行 API 服务,而无需担心 Cookie 过期的问题。使用此功能时,可能需要您再次在浏览器中登录 Google 帐户。这是预期行为,不会影响 API 的正常功能。
为了避免这种情况,建议从一个独立的浏览器会话中获取 Cookie,并在获取完成后尽快关闭该会话,以达到最佳效果(例如,在浏览器的隐私模式下进行全新登录)。更多详情请参阅 此处。
使用方法
初始化
导入所需的包,并使用上一步获取的 Cookie 初始化客户端。初始化成功后,只要进程保持运行,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, proxy=None)
await client.init(timeout=30, auto_close=False, close_delay=300, auto_refresh=True)
asyncio.run(main())
[!TIP]
auto_close和close_delay是可选参数,用于在一定时间无活动后自动关闭客户端。此功能默认关闭。对于聊天机器人等始终在线的服务,建议将auto_close设置为True,并合理设置close_delay值,以更好地管理资源。
生成内容
通过调用 GeminiClient.generate_content 发送单轮问题,该方法会返回一个 gemini_webapi.ModelOutput 对象,其中包含生成的文本、图片、思考内容以及对话元数据。
async def main():
response = await client.generate_content("Hello World!")
print(response.text)
asyncio.run(main())
[!TIP]
如果您只想查看响应文本,可以直接使用
print(response)来获得相同输出。
使用文件生成内容
Gemini 支持文件输入,包括图片和文档。您可以选择将文件路径列表(以 str 或 pathlib.Path 格式)与文本提示一起传递给 GeminiClient.generate_content。
async def main():
response = await client.generate_content(
"请介绍这两份文件的内容。它们之间有什么联系吗?",
files=["assets/sample.pdf", Path("assets/banner.png")],
)
print(response.text)
asyncio.run(main())
多轮对话
如果您希望保持对话的连续性,可以使用 GeminiClient.start_chat 创建一个 gemini_webapi.ChatSession 对象,并通过该对象发送消息。对话历史将自动处理并在每一轮结束后更新。
async def main():
chat = client.start_chat()
response1 = await chat.send_message(
"请介绍这两份文件的内容。它们之间有什么联系吗?",
files=["assets/sample.pdf", Path("assets/banner.png")],
)
print(response1.text)
response2 = await chat.send_message(
"请使用图像生成工具,用另一种字体和设计修改横幅。"
)
print(response2.text, response2.images, sep="\n\n----------------------------------\n\n")
asyncio.run(main())
[!TIP]
与
GeminiClient.generate_content类似,ChatSession.send_message也接受image作为可选参数。
继续之前的对话
要手动检索之前的对话,可以在创建新的 ChatSession 时,将先前 ChatSession 的元数据传递给 GeminiClient.start_chat。或者,您也可以将之前的元数据持久化到文件或数据库中,以便在当前 Python 进程退出后仍能访问这些信息。
async def main():
# 开始一个新的聊天会话
chat = client.start_chat()
await chat.send_message("今天天气真好")
# 保存聊天的元数据
previous_session = chat.metadata
# 加载之前的对话
previous_chat = client.start_chat(metadata=previous_session)
await previous_chat.send_message("我之前发了什么消息?")
print(await previous_chat.send_message("我之前发了什么消息?"))
asyncio.run(main())
阅读对话历史
您可以通过调用 GeminiClient.read_chat 并传入聊天 ID 来阅读特定聊天的对话历史。该方法会返回一个 ChatHistory 对象,其中包含按时间顺序从最新到最旧排列的 ChatTurn 对象列表。
async def main():
chat = client.start_chat()
await chat.send_message("法国的首都是哪里?")
# 阅读聊天历史
history = await client.read_chat(chat.cid)
if history:
for turn in history.turns:
print(f"[{turn.role.upper()}] {turn.text}")
print("\n----------------------------------\n")
asyncio.run(main())
要列出所有最近的聊天,可以使用 GeminiClient.list_chats:
async def main():
chats = client.list_chats()
if chats:
for chat_info in chats:
print(f"{chat_info.cid}: {chat_info.title}")
asyncio.run(main())
从 Gemini 历史中删除之前的对话
您可以通过调用 GeminiClient.delete_chat 并传入聊天 ID,从服务器端删除特定的聊天记录。
async def main():
# 开始一个新的聊天会话
chat = client.start_chat()
await chat.send_message("这是一个临时对话。")
# 删除该聊天
await client.delete_chat(chat.cid)
print(f"聊天已删除:{chat.cid}")
asyncio.run(main())```
### 临时模式
您可以通过将 `temporary=True` 传递给 `GeminiClient.generate_content` 或 `ChatSession.send_message` 来开始一个临时聊天。临时聊天不会保存在 Gemini 的历史记录中。
```python
async def main():
response = await client.generate_content("Hello World!", temporary=True)
print(response.text, "\n\n----------------------------------\n\n")
chat = client.start_chat()
await chat.send_message("Fine weather today", temporary=False)
response2 = await chat.send_message("What's my last message?", temporary=True)
print(response2.text)
asyncio.run(main())
流式模式
对于较长的回复,您可以使用流式模式,在生成时逐步接收部分输出。这能提供更流畅的用户体验,尤其适用于聊天机器人等实时应用。
generate_content_stream 方法会生成 ModelOutput 对象,其中的 text_delta 属性仅包含自上次生成以来接收到的新字符,从而便于显示增量更新。
async def main():
async for chunk in client.generate_content_stream(
"What's the difference between 'await' and 'async for'?"
):
print(chunk.text_delta, end="", flush=True)
print()
asyncio.run(main())
[!TIP]
流式模式接受与
generate_content相同的参数。您还可以在多轮对话中使用ChatSession.send_message_stream进行流式交互。
选择语言模型
您可以通过将 model 参数传递给 GeminiClient.generate_content 或 GeminiClient.start_chat 来指定要使用的语言模型。默认值为 unspecified。
可用模型会在初始化时根据您的账户层级动态发现。Model 枚举提供了便捷的快捷方式。
from gemini_webapi.constants import Model
async def main():
response1 = await client.generate_content(
"What's your language model version? Reply with the version number only.",
model=Model.BASIC_FLASH,
)
print(f"Model version ({Model.BASIC_FLASH.model_name}): {response1.text}")
chat = client.start_chat(model="gemini-3-pro")
response2 = await chat.send_message("What's your language model version? Reply with the version number only.")
print(f"Model version (gemini-3-pro): {response2.text}")
asyncio.run(main())
您也可以直接传递自定义的模型头信息字符串,以访问未列出的模型。
# 必须包含 "model_name" 和 "model_header" 键
custom_model = {
"model_name": "xxx",
"model_header": {
"x-goog-ext-525001261-jspb": "[1,null,null,null,'e6fa609c3fa255c0',null,null,null,[4]]"
},
}
response = await client.generate_content(
"What's your model version?",
model=custom_model
)
列出可用模型
客户端会在初始化时动态发现您账户可用的模型。使用 GeminiClient.list_models 可查看所有可用模型及其详细信息。
async def main():
await client.init() # 确保客户端已初始化
models = client.list_models()
if models:
for model in models:
print(f"{model.display_name}: {model.model_name}")
asyncio.run(main())
使用 Gemini Gems 应用系统提示
系统提示可以通过 Gemini Gems 应用于对话中。要使用某个宝石,您可以将 gem 参数传递给 GeminiClient.generate_content 或 GeminiClient.start_chat。gem 可以是宝石 ID 字符串或 gemini_webapi.Gem 对象。单次对话中只能应用一个宝石。
[!TIP]
存在一些系统预设的宝石,默认情况下不会对用户显示(因此可能无法正常工作)。使用
client.fetch_gems(include_hidden=True)可将其包含在获取结果中。
async def main():
# 获取当前账户的所有宝石,包括预设和用户创建的
await client.fetch_gems(include_hidden=False)
# 获取后,宝石会被缓存在 `GeminiClient.gems` 中
gems = client.gems
# 获取您想要使用的宝石
system_gems = gems.filter(predefined=True)
coding_partner = system_gems.get(id="coding-partner")
response1 = await client.generate_content(
"What's your system prompt?",
gem=coding_partner,
)
print(response1.text)
# 另一个使用用户自定义宝石的例子
# 宝石 ID 是一致的字符串,可将其存储起来,避免每次都重新获取宝石
your_gem = gems.get(name="Your Gem Name")
your_gem_id = your_gem.id
chat = client.start_chat(gem=your_gem_id)
response2 = await chat.send_message("What's your system prompt?")
print(response2)
管理自定义宝石
您可以通过 API 以编程方式创建、更新和删除自定义宝石。请注意,预设的系统宝石无法修改或删除。
创建自定义宝石
使用名称、系统提示(指令)以及可选的描述来创建一个新的自定义宝石:
async def main():
# 创建一个新的自定义宝石
new_gem = await client.create_gem(
name="Python Tutor",
prompt="You are a helpful Python programming tutor.",
description="A specialized gem for Python programming"
)
print(f"Custom gem created: {new_gem}")
# 在对话中使用新创建的宝石
response = await client.generate_content(
"Explain how list comprehensions work in Python",
gem=new_gem
)
print(response.text)
asyncio.run(main())
更新现有宝石
[!NOTE]
更新宝石时,必须提供所有参数(名称、提示、描述),即使您只想更改其中一个。
async def main():
# 获取一个自定义宝石(假设您有一个名为“Python Tutor”的宝石)
await client.fetch_gems()
python_tutor = client.gems.get(name="Python Tutor")
# 用新的指令更新宝石
updated_gem = await client.update_gem(
gem=python_tutor, // 也可以传入宝石 ID 字符串
name="Advanced Python Tutor",
prompt="You are an expert Python programming tutor.",
description="An advanced Python programming assistant"
)
print(f"Custom gem updated: {updated_gem}")
asyncio.run(main())
删除自定义宝石
async def main():
# 获取要删除的宝石
await client.fetch_gems()
gem_to_delete = client.gems.get(name="Advanced Python Tutor")
# 删除宝石
await client.delete_gem(gem_to_delete) // 也可以传入宝石 ID 字符串
print(f"Custom gem deleted: {gem_to_delete.name}")
asyncio.run(main())
获取模型的思考过程
当使用具备思考能力的模型时,模型的思考过程会被填充到 ModelOutput.thoughts 中。
async def main():
response = await client.generate_content(
"1加1等于多少?", model="gemini-3-pro"
)
print(response.thoughts)
print(response.text)
asyncio.run(main())
获取响应中的图片
API 输出中的图片以 gemini_webapi.Image 对象列表的形式存储。你可以通过调用 Image.title、Image.url 和 Image.alt 分别获取图片的标题、URL 和描述。
async def main():
response = await client.generate_content("给我一些猫的图片")
for image in response.images:
print(image, "\n\n----------------------------------\n\n")
asyncio.run(main())
生成和编辑图片
你可以使用自然语言请求 Gemini 利用 Google 最新的图像模型 Nano Banana 来生成和编辑图片。
[!IMPORTANT]
Google 对 Gemini 的图像生成功能有一些限制,因此其可用性可能因地区或账户而异。以下是摘自官方文档(截至 2025 年 9 月 10 日)的摘要:
此功能在任何特定 Gemini 应用程序中的可用性也仅限于该应用程序支持的语言和国家。
目前,此功能对 18 岁以下的用户不可用。
要使用此功能,你必须登录 Gemini 应用程序。
你可以通过调用 Image.save() 将 Gemini 返回的图片保存到本地。可选地,你可以通过向该函数传递 path 和 filename 参数来指定文件路径和文件名。这适用于 WebImage 和 GeneratedImage。
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)
print(image, "\n\n----------------------------------\n\n")
asyncio.run(main())
[!NOTE]
默认情况下,当被要求发送图片时(如上例所示),Gemini 会发送从网上抓取的图片,而不是使用 AI 模型生成图片,除非你在提示中明确要求它“生成”图片。在此软件包中,网络图片和生成图片分别被视为
WebImage和GeneratedImage,并在输出中自动分类。
获取视频和音频
Gemini 可以生成视频以及音频/音乐内容。这些内容分别以 GeneratedVideo 和 GeneratedMedia 对象的形式返回在 ModelOutput.videos 和 ModelOutput.media 中。你可以像处理图片一样将它们保存到磁盘。
[!NOTE]
你可能需要有效的订阅才能访问 Gemini 的视频和音频生成功能。
async def main():
response = await client.generate_content("生成一段猫咪玩耍的短视频")
# 保存生成的视频
for video in response.videos:
result = await video.save(path="temp/", verbose=True)
print(f"视频已保存:{result}")
# 保存生成的媒体(音频/音乐)
for media in response.media:
result = await media.save(path="temp/", verbose=True)
print(f"媒体已保存:{result}")
asyncio.run(main())
[!NOTE]
GeneratedMedia.save()接受一个download_type参数:"audio"、"video"或"both"(默认)。生成的视频/音频可能需要一些时间来渲染——保存方法会自动轮询,直到内容准备就绪。
使用 Gemini 扩展生成内容
[!IMPORTANT]
要在 API 中访问 Gemini 扩展,你必须先在Gemini 网站上启用它们。与图像生成一样,Google 对 Gemini 扩展的可用性也有一定的限制。以下是摘自官方文档(截至 2025 年 3 月 19 日)的摘要:
要将应用连接到 Gemini,你必须开启 Gemini 应用活动功能。
要使用此功能,你必须登录 Gemini 应用程序。
重要提示:如果你未满 18 岁,Google Workspace 和 Maps 应用目前仅支持使用英语提示与 Gemini 交互。
在为你的账户启用扩展后,你可以在提示中以自然语言形式或以“@”加上扩展关键词的方式访问它们。
async def main():
response1 = await client.generate_content("@Gmail 我的邮箱里最新的一条消息是什么?")
print(response1, "\n\n----------------------------------\n\n")
response2 = await client.generate_content("@Youtube 泰勒·斯威夫特最近在做什么?")
print(response2, "\n\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\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())
深度研究
Gemini 的深度研究功能是一个自主的研究代理,它会浏览网页、分析资料来源,并生成一份全面的报告。您可以通过 API 以编程方式访问此功能。
[!NOTE]
您可能需要有效的订阅才能使用 Gemini 的深度研究功能。
快速单次调用方法:
async def main():
result = await client.deep_research(
"比较前三大云服务提供商及其 AI 产品",
poll_interval=10.0,
timeout=600.0,
)
print(f"完成:{result.done}")
print(result.text)
asyncio.run(main())
分步工作流,以便获得更精细的控制:
async def main():
# 第一步:创建研究计划
plan = await client.create_deep_research_plan(
"量子计算领域的最新进展有哪些?"
)
print(f"标题:{plan.title}")
print(f"预计完成时间:{plan.eta_text}")
for step in plan.steps:
print(f" - {step}")
# 第二步:开始研究
await client.start_deep_research(plan)
# 第三步:轮询检查是否完成
result = await client.wait_for_deep_research(
plan,
poll_interval=10.0,
timeout=600.0,
on_status=lambda s: print(f"状态:{s.state}"),
)
print(result.text)
asyncio.run(main())
日志配置
本包使用 loguru 进行日志记录,并提供 set_log_level 函数来控制日志级别。您可以将日志级别设置为以下值之一:DEBUG、INFO、WARNING、ERROR 和 CRITICAL。默认值为 INFO。
from gemini_webapi import set_log_level
set_log_level("DEBUG")
[!NOTE]
首次调用
set_log_level将会 全局地 移除所有现有的 loguru 处理器。为了避免此问题并获得对日志行为更高级的控制,您可能希望直接使用 loguru 来配置日志记录。
命令行工具
为了方便在终端中与 Gemini 交互,我们提供了一个独立的命令行工具 (cli.py)。它支持单轮提问、多轮对话、深度研究、图片下载以及账户诊断等功能。
Cookie 设置
请从 gemini.google.com 导出您的 Cookie,并将其保存为 JSON 文件。CLI 支持多种格式:
{ "__Secure-1PSID": "value...", "__Secure-1PSIDTS": "value..." }
您也可以使用浏览器 Cookie 扩展程序导出的文件(支持对象数组格式)。
[!NOTE]
CLI 在每次运行后会自动将更新后的 Cookie 持久化回 JSON 文件。如果您不想启用此行为,可以使用
--no-persist参数。
CLI 命令
全局选项(置于子命令之前):
--cookies-json PATH Cookie JSON 文件路径(必填)
--proxy URL 代理 URL(或使用 HTTPS_PROXY 环境变量)
--model NAME 模型名称(参见 'models' 命令)
--verbose 启用调试日志
--no-persist 不在运行后更新 Cookie 文件
--request-timeout SEC HTTP 请求超时时间(默认:300 秒)
可用命令:
# 提问(默认为流式输出)
python cli.py --cookies-json cookies.json ask "什么是量子计算?"
# 带图片输入的提问
python cli.py --cookies-json cookies.json ask --image photo.jpg "描述这张照片"
# 非流式输出模式
python cli.py --cookies-json cookies.json ask --no-stream "你好"
# 继续对话(使用上一次输出的聊天 ID)
python cli.py --cookies-json cookies.json reply c_abc123 "再告诉我一些吧"
# 列出聊天历史
python cli.py --cookies-json cookies.json list
# 查看特定聊天记录
python cli.py --cookies-json cookies.json read c_abc123
# 列出可用模型
python cli.py --cookies-json cookies.json models
# 下载生成的图片
python cli.py --cookies-json cookies.json download "https://..." -o output.png
# 账户诊断(检查功能可用性)
python cli.py --cookies-json cookies.json inspect
深度研究工作流
CLI 支持 Gemini 的深度研究功能——一个能够自主浏览网页、分析资料来源并生成综合报告的研究代理。
# 1. 提交研究任务
python cli.py --cookies-json cookies.json research send --prompt "2025 年 AI 芯片竞争"
# 2. 检查进度(使用步骤 1 中的聊天 ID)
python cli.py --cookies-json cookies.json research check c_abc123
# 3. 获取完整结果
python cli.py --cookies-json cookies.json research get c_abc123
# 4. 将结果保存到文件
python cli.py --cookies-json cookies.json research get c_abc123 --output report.md
参考文献
星标用户
版本历史
v2.0.02026/04/06v1.21.02026/03/06v1.20.02026/03/03v1.19.22026/02/14v1.19.12026/02/10v1.19.02026/02/09v1.18.12026/02/04v1.18.02026/02/03v1.17.32025/12/05v1.17.22025/12/02v1.17.12025/11/21v1.17.02025/11/20v1.16.02025/10/15v1.15.22025/09/03v1.15.12025/09/02v1.15.02025/08/27v1.14.42025/08/12v1.14.32025/07/18v1.14.22025/07/04v1.14.12025/07/04常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

