这是一个Node.js+Playwright服务器,通过模拟 OpenAI API 的方式来访问 Google AI Studio 网页版,服务器无缝交互转发gemini对话。这使得兼容 OpenAI API 的客户端(如 Open WebUI, NextChat 等)可以使用 AI Studio 的无限额度及能力
- OpenAI API 兼容: 提供
/v1/chat/completions和/v1/models端点,兼容大多数 OpenAI 客户端。 - 流式响应: 支持
stream=true,实现打字机效果。 - 非流式响应: 支持
stream=false,一次性返回完整 JSON 响应。 - 系统提示词 (System Prompt): 支持通过请求体中的
messages数组的system角色或额外的system_prompt字段传递系统提示词。 - 内部 Prompt 优化: 自动包装用户输入,指导 AI Studio 输出特定格式(流式为 Markdown 代码块,非流式为 JSON),并包含起始标记
<<<START_RESPONSE>>>以便解析。 - 自动连接脚本 (
auto_connect_aistudio.cjs):- 自动查找并启动 Chrome/Chromium 浏览器,开启调试端口。
- 自动检测并尝试连接已存在的 Chrome 调试实例。
- 提供交互式选项,允许用户选择连接现有实例或自动结束冲突进程。
- 自动查找或打开 AI Studio 的
New chat页面。 - 自动启动
server.cjs。
- 服务端 (
server.cjs):- 连接到由
auto_connect_aistudio.cjs管理的 Chrome 实例。 - 处理 API 请求,通过 Playwright 操作 AI Studio 页面。
- 解析 AI Studio 的响应,提取有效内容。
- 提供简单的 Web UI (
/) 进行基本测试。 - 提供健康检查端点 (
/health)。
- 连接到由
- 错误快照: 在 Playwright 操作或响应解析出错时,自动在
errors目录下保存页面截图和 HTML,方便调试。 - 依赖检测: 两个脚本在启动时都会检查所需依赖,并提供安装指导。
- 跨平台设计: 旨在支持 macOS, Linux 和 Windows (WSL 推荐)。
- 非官方项目: 本项目与 Google 无关,依赖于对 AI Studio Web 界面的自动化操作,可能因 AI Studio 页面更新而失效。
- 安全性: 启动 Chrome 时开启了远程调试端口 (默认为
8848),请确保此端口仅在受信任的网络环境中使用,或通过防火墙规则限制访问。切勿将此端口暴露到公网。 - 稳定性: 由于依赖浏览器自动化,其稳定性不如官方 API。长时间运行或频繁请求可能导致页面无响应或连接中断,可能需要重启浏览器或服务器。
- AI Studio 限制: AI Studio 本身可能有请求频率限制、内容策略限制等,代理服务器无法绕过这些限制。
- Node.js: v16 或更高版本。
- NPM / Yarn / PNPM: 用于安装依赖。
- Google Chrome / Chromium: 需要安装浏览器本体。
- Google AI Studio 账号: 并能正常访问和使用。
-
克隆仓库:
git clone https://github.com/CJackHwang/AIstudioProxyAPI cd AIstudioProxyAPI -
安装依赖: 根据你的包管理器选择:
npm install # 或 yarn install # 或 pnpm install
这将安装
express,playwright,@playwright/test,cors。
现在,只需要运行一个脚本即可启动所有服务:
node auto_connect_aistudio.cjs这个脚本会执行以下操作:
- 检查依赖: 确认
express,playwright,@playwright/test,cors已安装,且server.cjs文件存在。 - 检查 Chrome 调试端口 (
8848):- 如果端口空闲:
- 它会提示您先手动关闭其他可能干扰的 Chrome 实例。
- 然后尝试自动查找并启动一个新的 Chrome 实例,并打开远程调试端口。
- 如果端口被占用:
- 它会提示端口已被占用,并询问您如何处理:
- [Y] (默认): 尝试连接到当前占用端口的现有 Chrome 实例。
- [n]: 尝试自动结束占用该端口的进程,然后启动一个新的 Chrome 实例。
- 如果选择
[n]且自动结束进程失败,脚本会提示您手动处理后重试。
- 它会提示端口已被占用,并询问您如何处理:
- 如果端口空闲:
- 连接 Playwright: 尝试连接到 Chrome 的调试端口。
- 管理 AI Studio 页面:
- 在连接的浏览器中查找已打开的 AI Studio 页面。
- 如果找到,会尝试导航到
/prompts/new_chat页面。 - 如果没有找到合适的页面(或找到了Google登录页),会打开一个新的页面并导航到
https://aistudio.google.com/prompts/new_chat。 - 重要: 如果是首次访问或需要登录,您需要在 Chrome 窗口中手动完成登录操作。
- 启动 API 服务器: 如果以上步骤成功,脚本会自动在后台启动
node server.cjs。
当 server.cjs 成功启动并连接到 Playwright 后,您将在终端看到类似以下的输出(来自 server.cjs):
=============================================================
🚀 AI Studio Proxy Server (v2.17+) 🚀
=============================================================
🔗 监听地址: http://localhost:2048
- Web UI (测试): http://localhost:2048/
- API 端点: http://localhost:2048/v1/chat/completions
- 模型接口: http://localhost:2048/v1/models
-------------------------------------------------------------
✅ Playwright 连接成功,服务已准备就绪!
-------------------------------------------------------------
此时,代理服务已准备就绪。
- 打开 Open WebUI。
- 进入 "设置" -> "连接"。
- 在 "模型" 部分,点击 "添加模型"。
- 模型名称: 输入你想要的名字,例如
aistudio-gemini。 - API 基础 URL: 输入代理服务器的地址,例如
http://localhost:2048/v1(注意包含/v1)。 - API 密钥: 留空或输入任意字符 (服务器不验证)。
- 保存设置。
- 现在,你应该可以在 Open WebUI 中选择
aistudio-gemini模型并开始聊天了。
- macOS:
auto_connect_aistudio.cjs通常能自动找到 Chrome。- 防火墙可能会提示是否允许 Node.js 接受网络连接,请允许。
- Linux:
- 确保已安装
google-chrome-stable或chromium-browser。 - 如果脚本找不到 Chrome,你可能需要修改
auto_connect_aistudio.cjs中的getChromePath函数,或者创建一个符号链接。 - 某些 Linux 发行版可能需要安装额外的 Playwright 依赖库,参考 Playwright Linux 文档。
- 确保已安装
- Windows:
- 强烈建议使用 WSL (Windows Subsystem for Linux)。在 WSL 中按照 Linux 指南操作通常更顺畅。
- 直接在 Windows 上运行 (不推荐):
auto_connect_aistudio.cjs可能需要手动修改getChromePath函数来指定 Chrome 的路径 (C:\Program Files\...\chrome.exe)。注意路径中的反斜杠可能需要转义。- 防火墙设置需要允许 Node.js 和 Chrome 监听和连接端口。
- 由于文件系统和权限差异,可能会遇到未知问题,例如端口检查或进程结束操作失败。
auto_connect_aistudio.cjs启动失败或报错:- 依赖未找到: 确保按照提示运行了
npm install或等效命令。 - Chrome 路径找不到: 确认 Chrome/Chromium 已安装,并根据需要修改
auto_connect_aistudio.cjs中的getChromePath函数。 - 端口被占用且无法自动清理: 根据脚本提示,手动查找并结束占用
8848端口的进程。 - 连接 Playwright 超时: 确认 Chrome 是否已成功启动并响应,防火墙是否阻止本地连接
127.0.0.1:8848。 - 打开/导航 AI Studio 页面失败: 检查网络连接,尝试手动在浏览器中打开
https://aistudio.google.com/prompts/new_chat并完成登录。
- 依赖未找到: 确保按照提示运行了
server.cjs启动时提示端口被占用 (EADDRINUSE):- 检查是否有其他程序 (包括旧的服务器实例) 正在使用
2048端口 (或你在server.cjs中设置的SERVER_PORT)。关闭冲突程序或更改端口配置。
- 检查是否有其他程序 (包括旧的服务器实例) 正在使用
- 服务器日志显示 Playwright 未就绪或连接失败 (在
server.cjs启动后):- 这通常意味着
auto_connect_aistudio.cjs启动的 Chrome 实例意外关闭或无响应了。 - 确保 Chrome 窗口没有被关闭,AI Studio 页面没有崩溃。
- 尝试关闭所有相关进程(
node和chrome),然后重新运行node auto_connect_aistudio.cjs。 - 检查
errors目录下是否有截图和 HTML 文件,它们可能包含 AI Studio 页面的错误信息或状态。
- 这通常意味着
- 客户端 (如 Open WebUI) 无法连接或请求失败:
- 确认客户端配置的 API 基础 URL 是否正确 (
http://localhost:2048/v1)。 - 检查
server.cjs运行的终端是否有错误输出。 - 确保客户端和服务器在同一个网络中,且防火墙没有阻止从客户端到服务器
2048端口的连接。
- 确认客户端配置的 API 基础 URL 是否正确 (
- API 请求返回 5xx 错误:
- 503 Service Unavailable / Playwright not ready: 通常是
server.cjs无法连接到 Chrome (见上文)。 - 504 Gateway Timeout: 请求处理时间超过了
server.cjs中设置的RESPONSE_COMPLETION_TIMEOUT(默认为 5 分钟)。可能是 AI Studio 响应慢或卡住了。 - 502 Bad Gateway / AI Studio Error:
server.cjs在 AI Studio 页面上检测到了错误提示 (例如toast消息),或者无法正确解析 AI 的响应。检查errors目录下的快照。 - 500 Internal Server Error:
server.cjs内部发生未捕获的错误。检查服务器日志和errors快照。
- 503 Service Unavailable / Playwright not ready: 通常是
- AI 回复不完整、格式错误或包含
<<<START_RESPONSE>>>标记:- AI Studio 的 Web UI 输出有时不稳定或格式与预期不符。服务器尽力解析,但可能失败。
- 非流式请求:如果返回的 JSON 中缺少
response字段或无法解析,服务器可能返回空内容或原始 JSON 字符串。检查errors快照确认 AI Studio 页面的实际输出。 - 流式请求:如果 AI 未按预期输出 Markdown 代码块或起始标记,流式传输可能提前中断或包含非预期内容。
- 这可能是项目本身的局限性,尝试调整 Prompt 或稍后重试。
欢迎提交 Issue 和 Pull Request!