Skip to content

Node.js+Playwright服务器,通过模拟 OpenAI API 的方式来访问 Google AI Studio 网页版,服务器无缝交互转发gemini模型对话。这使得兼容 OpenAI API 的客户端(如 Open WebUI, NextChat 等)可以使用 AI Studio 的无限额度及能力。经测试因无法绕过自动化检测故暂不支持无头模式启动实例

License

Notifications You must be signed in to change notification settings

leodknuth/AIstudioProxyAPI

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AI Studio Proxy Server

点我查看演示视频

这是一个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 本身可能有请求频率限制、内容策略限制等,代理服务器无法绕过这些限制。

🚀 开始使用

1. 先决条件

  • Node.js: v16 或更高版本。
  • NPM / Yarn / PNPM: 用于安装依赖。
  • Google Chrome / Chromium: 需要安装浏览器本体。
  • Google AI Studio 账号: 并能正常访问和使用。

2. 安装

  1. 克隆仓库:

    git clone https://github.com/CJackHwang/AIstudioProxyAPI
    cd AIstudioProxyAPI
  2. 安装依赖: 根据你的包管理器选择:

    npm install
    #
    yarn install
    #
    pnpm install

    这将安装 express, playwright, @playwright/test, cors

3. 运行

现在,只需要运行一个脚本即可启动所有服务:

node auto_connect_aistudio.cjs

这个脚本会执行以下操作:

  1. 检查依赖: 确认 express, playwright, @playwright/test, cors 已安装,且 server.cjs 文件存在。
  2. 检查 Chrome 调试端口 (8848):
    • 如果端口空闲:
      • 它会提示您先手动关闭其他可能干扰的 Chrome 实例。
      • 然后尝试自动查找并启动一个新的 Chrome 实例,并打开远程调试端口。
    • 如果端口被占用:
      • 它会提示端口已被占用,并询问您如何处理:
        • [Y] (默认): 尝试连接到当前占用端口的现有 Chrome 实例。
        • [n]: 尝试自动结束占用该端口的进程,然后启动一个新的 Chrome 实例。
      • 如果选择 [n] 且自动结束进程失败,脚本会提示您手动处理后重试。
  3. 连接 Playwright: 尝试连接到 Chrome 的调试端口。
  4. 管理 AI Studio 页面:
    • 在连接的浏览器中查找已打开的 AI Studio 页面。
    • 如果找到,会尝试导航到 /prompts/new_chat 页面。
    • 如果没有找到合适的页面(或找到了Google登录页),会打开一个新的页面并导航到 https://aistudio.google.com/prompts/new_chat
    • 重要: 如果是首次访问或需要登录,您需要在 Chrome 窗口中手动完成登录操作。
  5. 启动 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 连接成功,服务已准备就绪!
-------------------------------------------------------------

此时,代理服务已准备就绪。

4. 配置客户端 (以 Open WebUI 为例)

  1. 打开 Open WebUI。
  2. 进入 "设置" -> "连接"。
  3. 在 "模型" 部分,点击 "添加模型"。
  4. 模型名称: 输入你想要的名字,例如 aistudio-gemini
  5. API 基础 URL: 输入代理服务器的地址,例如 http://localhost:2048/v1 (注意包含 /v1)。
  6. API 密钥: 留空或输入任意字符 (服务器不验证)。
  7. 保存设置。
  8. 现在,你应该可以在 Open WebUI 中选择 aistudio-gemini 模型并开始聊天了。

💻 多平台指南

  • macOS:
    • auto_connect_aistudio.cjs 通常能自动找到 Chrome。
    • 防火墙可能会提示是否允许 Node.js 接受网络连接,请允许。
  • Linux:
    • 确保已安装 google-chrome-stablechromium-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 页面没有崩溃。
    • 尝试关闭所有相关进程(nodechrome),然后重新运行 node auto_connect_aistudio.cjs
    • 检查 errors 目录下是否有截图和 HTML 文件,它们可能包含 AI Studio 页面的错误信息或状态。
  • 客户端 (如 Open WebUI) 无法连接或请求失败:
    • 确认客户端配置的 API 基础 URL 是否正确 (http://localhost:2048/v1)。
    • 检查 server.cjs 运行的终端是否有错误输出。
    • 确保客户端和服务器在同一个网络中,且防火墙没有阻止从客户端到服务器 2048 端口的连接。
  • 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 快照。
  • AI 回复不完整、格式错误或包含 <<<START_RESPONSE>>> 标记:
    • AI Studio 的 Web UI 输出有时不稳定或格式与预期不符。服务器尽力解析,但可能失败。
    • 非流式请求:如果返回的 JSON 中缺少 response 字段或无法解析,服务器可能返回空内容或原始 JSON 字符串。检查 errors 快照确认 AI Studio 页面的实际输出。
    • 流式请求:如果 AI 未按预期输出 Markdown 代码块或起始标记,流式传输可能提前中断或包含非预期内容。
    • 这可能是项目本身的局限性,尝试调整 Prompt 或稍后重试。

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📄 License

MIT

About

Node.js+Playwright服务器,通过模拟 OpenAI API 的方式来访问 Google AI Studio 网页版,服务器无缝交互转发gemini模型对话。这使得兼容 OpenAI API 的客户端(如 Open WebUI, NextChat 等)可以使用 AI Studio 的无限额度及能力。经测试因无法绕过自动化检测故暂不支持无头模式启动实例

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 100.0%