diff --git a/README.md b/README.md index 253dc99..3dd4503 100644 --- a/README.md +++ b/README.md @@ -7,29 +7,28 @@ ### 📋 当前支持列表 -| 网站名称 | 文本支持 | 图片支持 | 官方网址 | -| :--- | :---: | :---: | :--- | -| **LMArena** | ✅ | ✅ | [lmarena.ai](https://lmarena.ai/) | -| **Gemini Enterprise Business** | ✅ | ✅ | [business.gemini.google](https://business.gemini.google/) | -| **Nano Banana Free** | ❌ | ✅ | [nanobananafree.ai](https://nanobananafree.ai/) | -| **zAI** | ❌ | ✅ | [zai.is](https://zai.is/) | -| **Google Gemini** | ❌ | ✅ | [gemini.google.com](https://gemini.google.com/) | +| 网站名称 | 文本支持 | 图片支持 | +| :--- | :---: | :---: | +| [**LMArena**](https://lmarena.ai/) | ✅ | ✅ | +| [**Gemini Enterprise Business**](https://business.gemini.google/) | ✅ | ✅ | +| [**Nano Banana Free**](https://nanobananafree.ai/) | ❌ | ✅ | +| [**zAI**](https://zai.is/) | ❌ | ✅ | +| [**Google Gemini**](https://gemini.google.com/) | ❌ | ✅ | + +> 未来可能会支持更多网站... ### ✨ 主要特性 - 🤖 **拟人交互**:模拟人类打字与鼠标轨迹,通过特征伪装规避自动化检测。 - 🔄 **接口兼容**:提供标准 OpenAI 格式接口,支持流式响应与心跳保活。 - 🚀 **并发隔离**:支持多窗口并发执行,可配置独立代理,实现多账号浏览器实例级数据隔离。 -- 🖼️ **多个后端**:支持 LMArena、Gemini 等多平台,单次请求可处理多张参考图片。 - 🛡️ **稳定防护**:内置任务队列、负载均衡、故障转移、错误重试等基础功能。 --- ## 🚀 快速部署 -本项目支持 **源码直接运行(推荐)** 和 **Docker 容器化部署** 两种方式。 - -> 因开发者自用时是直接源码运行,Docker未经测试可能更新滞后且可能有问题,如有相关建议可提出,帮助项目完善 Docker 的运行方式 +本项目支持 **源码直接运行** 和 **Docker 容器化部署** 两种方式。 ### 📋 环境要求 - **Node.js**: v20.0.0+ (ABI 115+) @@ -50,28 +49,28 @@ 2. **启动服务** ```bash - npm start -- -login # 首次运行(进入首个Worker的登录模式) - npm start -- -login=workerName # 首次运行(进入指定Worker的登录模式) - npm start # 标准运行 + # 标准运行 + npm start + + # Linux 命令行启动 + npm start -- -xvfb -vnc ``` ### 🐳 方式二:Docker 部署 -> ⚠️ **特别说明**:首次运行需设置 `LOGIN_MODE=true`(true可以改为workerName),并通过 VNC 客户端连接 `localhost:5900` 完成网页登录验证。 +> ⚠️ **特别说明**:登录相关操作可以在 WebUI 的虚拟显示器板块进行,也可通过 RealVNC 等工具连接(需添加映射 VNC 端口,默认非被占用的情况下为 5900) **Docker CLI** ```bash -docker run -d --name lmarena-automator \ - -p 3000:3000 -p 5900:5900 \ +docker run -d --name webai-2api \ + -p 3000:3000 \ -v "$(pwd)/data:/app/data" \ - -e LOGIN_MODE=true \ --shm-size=2gb \ - foxhui/lmarena-imagen-automator:latest + foxhui/webai-2api:latest ``` **Docker Compose** ```bash -# 确保 docker-compose.yml 中 LOGIN_MODE=true docker-compose up -d ``` @@ -81,54 +80,23 @@ docker-compose up -d ### ⚠️ 首次使用必读 -1. **启动登录模式**: +1. **完成初始化**: + - Linux 用户使用 `npm start -- -xvfb -vnc` 启动程序,然后使用 WebUI 或者第三方工具连接 VNC + - 手动登录账号 + - 在输入框发送任意消息,触发并完成 CloudFlare/reCAPTCHA 验证及服务条款同意 +2. **运行建议**: + - **WebUI 和 VNC 传输过程均未加密,若在公网环境运行请走 SSH 隧道或者使用 Caddy/Nginx 为 WebUI 添加 HTTPS 连接** ```bash - npm start -- -login # 启动第一个 Worker 进行登录 - npm start -- -login=workerName # 启动指定 Worker 进行登录 + # SSH隧道方法:在本地终端运行,将服务器 5900 端口映射到本地 + ssh -L 5900:127.0.0.1:5900 root@服务器IP ``` - - Linux 用户使用 `npm start -- -xvfb -vnc` 进入登录模式且创建虚拟显示器到 VNC。 -2. **完成初始化**: - - 手动登录账号。 - - 在输入框发送任意消息,触发并完成 CloudFlare/reCAPTCHA 验证及服务条款同意。 -3. **运行建议**:初始化完成后可切换回标准模式,但为降低风控,**强烈建议长期保持非无头模式运行**。 - -### 📑 配置文件结构 - -项目使用 `config.yaml` 进行配置,核心结构如下: - -```yaml -backend: - pool: - strategy: least_busy # 调度策略 - instances: # 浏览器实例列表 - - name: "browser_01" # 实例 ID - userDataMark: "01" # 数据目录标识 - proxy: # 实例级代理 - enable: true - type: socks5 - host: 127.0.0.1 - port: 1080 - workers: # 该实例下的 Worker - - name: "lmarena_01" - type: lmarena - - name: "zai_01" - type: zai_is - - name: "merge" - type: merge # 单标签聚合模式 - mergeTypes: [zai_is, lmarena] - mergeMonitor: zai_is # 空闲时挂机监控的后端 (可选,留空则不启用) -``` - -**说明**: -- 每个 `instance` 代表一个独立的浏览器进程 -- 同一 `instance` 下的 `workers` 共享浏览器数据和登录状态 -- 使用 Google OAuth 等统一登录时,只需登录一次即可用于所有 Worker - -详细配置请参考 `config.example.yaml`。 - + - 初始化完成后可切换回标准模式,但为降低风控,**强烈建议长期保持非无头模式运行** ### 接口使用说明 +> [!TIP] +> **详细文档**:请访问 [WebAI2API 文档中心](https://foxhui.github.io/WebAI2API/) 获取更全面的配置指南与接口说明。 + #### 1. OpenAI 兼容接口 > [!WARNING] @@ -142,78 +110,6 @@ backend: POST http://127.0.0.1:3000/v1/chat/completions ``` -
-📄 查看API请求示例 - -**请求示例(非流式)** -```bash -curl -X POST http://127.0.0.1:3000/v1/chat/completions \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer your-secret-key" \ - -d '{ - "model": "gemini-3-pro-image-preview", - "messages": [ - { - "role": "user", - "content": [ - { - "type": "text", - "text": "generate a cat" - } - ] - } - ] - }' -``` - -**响应格式(非流式)** -```json -{ - "id": "chatcmpl-1732374740123", - "object": "chat.completion", - "created": 1732374740, - "model": "gemini-3-pro-image-preview", - "choices": [{ - "index": 0, - "message": { - "role": "assistant", - "content": "![generated](data:image/jpeg;base64,/9j/4AAQ...)" - }, - "finish_reason": "stop" - }] -} -``` - -**请求示例(流式 - 推荐)** -```bash -curl -X POST http://127.0.0.1:3000/v1/chat/completions \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer your-secret-key" \ - -d '{ - "model": "gemini-3-pro-image-preview", - "stream": true, - "messages": [ - { - "role": "user", - "content": "generate a cat" - } - ] - }' -``` - -**响应格式(流式)** -``` -data: {"id":"chatcmpl-1732374740123","object":"chat.completion.chunk","created":1732374740,"model":"gemini-3-pro-image-preview","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]} - -: keep-alive -: keep-alive - -data: {"id":"chatcmpl-1732374740123","object":"chat.completion.chunk","created":1732374740,"model":"gemini-3-pro-image-preview","choices":[{"index":0,"delta":{"content":"![generated](data:image/jpeg;base64,/9j/4AAQ...)"},"finish_reason":"stop"}]} - -data: [DONE] -``` -
- #### 参数说明 | 参数 | 说明 | @@ -234,44 +130,6 @@ data: [DONE] GET http://127.0.0.1:3000/v1/models ``` -
-📄 查看API请求示例 - -**请求示例** -```bash -curl -X GET http://127.0.0.1:3000/v1/models \ - -H "Authorization: Bearer your-secret-key" -``` - -**响应格式** -```json -{ - "object": "list", - "data": [ - { - "id": "seedream-4-high-res-fal", - "object": "model", - "created": 1732456789, - "owned_by": "internal_server" - }, - { - "id": "lmarena/seedream-4-high-res-fal", - "object": "model", - "created": 1732456789, - "owned_by": "lmarena" - }, - { - "id": "gemini-3-pro-image-preview", - "object": "model", - "created": 1732456789, - "owned_by": "internal_server" - } - ] -} -``` - -
- #### 3. 获取 Cookies **功能说明**:可利用本项目的自动续登功能获取最新 Cookie 给其他工具使用。 @@ -282,47 +140,6 @@ curl -X GET http://127.0.0.1:3000/v1/models \ GET http://127.0.0.1:3000/v1/cookies (?name=browser_default&domain=lmarena.ai) ``` -
-📄 查看API请求示例 - -**请求示例** -```bash -curl -X GET http://127.0.0.1:3000/v1/cookies \ - -H "Authorization: Bearer your-secret-key" -``` - -**响应格式** -```json -{ - "instance": "browser_default", - "cookies": [ - { - "name": "_GRECAPTCHA", - "value": "09ADxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", - "domain": "www.google.com", - "path": "/recaptcha", - "expires": 1780000000, - "httpOnly": true, - "secure": true, - "sameSite": "None" - }, - { - "name": "OTZ", - "value": "8888888_24_24__24_", - "domain": "accounts.google.com", - "path": "/", - "expires": 1760000000, - "httpOnly": false, - "secure": true, - "sameSite": "None" - } - .......... more - ] -} -``` - -
- #### 4. 多模态请求 (图生图/文生图) **功能说明**:支持在消息中附带图片进行对话或生成。 @@ -334,129 +151,19 @@ curl -X GET http://127.0.0.1:3000/v1/cookies \ | **数据格式** | 必须使用 Base64 Data URL 格式 (如 `data:image/jpeg;base64,...`) | | **自动转换** | 为保证兼容性与传输速度,服务器会自动将所有图片转换为 JPG 格式 | -
-📄 查看API请求示例 - -**请求示例** -```json -{ - "model": "gemini-3-pro-image-preview", - "messages": [{ - "role": "user", - "content": [ - { - "type": "text", - "text": "make it more colorful" - }, - { - "type": "image_url", - "image_url": { - "url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAA..." - } - } - ] - }] -} -``` - -
- ---- - -## 🔧 常见问题 - -
-❌ 请求被拒绝 (429 Too Many Requests) - -**问题**: 并发请求过多 - -**解决方案**: -- 该问题仅存在未开启流式保活时出现 -- 队列限制:1 个并发 + 2 个排队 (总计 3 个) -- 修改 `config.yaml` 中的`queue.maxQueueSize` (不建议) -- 等待当前任务完成后再提交新任务 - -
- -
-❌ reCAPTCHA 验证失败 - -**问题**: 返回 `recaptcha validation failed` - -**解决方案**: -- 这是 LMArena 的人机验证机制 -- 建议: - - 降低请求频率 - - 首次使用时手动完成一次验证 (关闭 headless 模式) - - 使用稳定和纯净的 IP 地址 (可使用 [ping0.cc](https://ping0.cc) 查询IP地址纯净度) - -
- -
-❌ 图像生成超时 - -**问题**: 任务超过 120 秒未完成 - -**解决方案**: -- 启用流式保活确保客户端不会主动断开连接 -- 检查网络连接是否稳定 -- 某些复杂提示词可能需要更长时间 - -
- -
-🐧 【Linux 环境下非无头模式运行】 - -**问题**: 需要在 Linux 服务器上显示浏览器界面(如手动过验证码) - -**解决方案**: - -**方法一:X11 转发** -- 推荐使用 WindTerm 等终端工具,开启 X-Server 功能 -- 在 SSH 会话设置中启用 X11 转发 (Forward X11) - -**方法二:Xvfb + X11VNC (推荐)** -使用虚拟显示器运行程序,并通过 VNC 远程查看。 - -1. **使用内置命令启动 (简便)** - ```bash - npm start -- -xvfb -vnc - ``` - -2. **手动配置** - 如果内置命令无法满足需求,可手动分步执行: - - a. **启动虚拟显示器并运行程序** (屏幕号 99 可按需修改): - ```bash - xvfb-run --server-num=99 --server-args="-ac -screen 0 1920x1080x24" npm start - ``` - - b. **将虚拟显示器映射至 VNC**: - ```bash - x11vnc -display :99 -localhost -nopw -once -noxdamage -ncache 10 -forever - ``` - -3. **建立 SSH 隧道连接 VNC** (安全推荐): - ```bash - # 在本地终端运行,将服务器 5900 端口映射到本地 - ssh -L 5900:127.0.0.1:5900 root@服务器IP - ``` - 随后使用 VNC 客户端连接 `127.0.0.1:5900` 即可。 - -
- --- ## 📊 设备配置参考 -| 资源 | 最低配置 | 推荐配置 | -| :--- | :--- | :--- | -| **CPU** | 1 核 | 2 核及以上 | -| **内存** | 1 GB | 2 GB 及以上 | +| 资源 | 最低配置 | 推荐配置(单实例) | 推荐配置(多实例) | +| :--- | :--- | :--- | :--- | +| **CPU** | 1 核 | 2 核及以上 | 2 核及以上 | +| **内存** | 1 GB | 2 GB 及以上 | 4 GB 及以上 | +| **磁盘** | 2 GB 可用空间 | 5 GB 及以上 | 7 GB 及以上 | **实测环境表现** (均为单浏览器实例): -- **Oracle 免费机** (1C1G, Debian 12):资源紧张,比较卡顿,仅供尝鲜或轻度使用。 -- **阿里云轻量云** (2C2G, Debian 11):运行流畅稳定,为本项目开发测试基准环境。 +- **Oracle 免费机** (1C1G, Debian 12):资源紧张,比较卡顿,仅供尝鲜或轻度使用 +- **阿里云轻量云** (2C2G, Debian 11):运行流畅,项目开发测试所用机型 ## 📄 许可证和免责声明 diff --git a/docker-compose.yaml b/docker-compose.yaml index b90c0c8..b4457d7 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -5,10 +5,7 @@ services: restart: unless-stopped ports: - "3000:3000" # API + WebUI - - "5900:5900" # VNC volumes: - ./data:/app/data # 数据和配置持久化,config.yaml 会自动生成到此目录 - environment: - - DISPLAY=:99 shm_size: '2gb' init: true