feat: 配置文件机制修改,优化WebUI日志排列

This commit is contained in:
foxhui
2025-12-23 03:14:02 +08:00
parent ce72c5f9ec
commit d75c84f4c5
27 changed files with 275 additions and 426 deletions
+66 -64
View File
@@ -2,7 +2,11 @@
<p align="center">
<img src="https://github.com/user-attachments/assets/296a518e-c42b-4e39-8ff6-9b4381ed4f6e" width="49%" />
<img src="https://github.com/user-attachments/assets/06f31024-ecd4-48d2-9789-eedc98c9c5b9" width="49%" />
<img src="https://github.com/user-attachments/assets/bfa30ece-6947-4f18-b2c9-ccc8087b7e89" width="49%" />
</p>
<p align="center">
<img src="https://github.com/user-attachments/assets/5b15ebd2-7593-4f0e-8561-83d6ba5d88ab" width="49%" />
<img src="https://github.com/user-attachments/assets/53deea29-4071-4a07-8a61-211761c5f2f7" width="49%" />
</p>
## 📑 目录
@@ -17,15 +21,15 @@
## 📝 项目简介
**WebAI2API** 是一个基于 **Camoufox (Playwright)** 的网页版 AI 服务转通用 API 的工具。通过模拟人类操作与 LMArena、Gemini 等网站交互,提供兼容 **OpenAI 格式** 的接口服务,同时支持 **多窗口并发****多账号管理**(浏览器实例数据隔离)。
**WebAI2API** 是一个基于 **Camoufox (Playwright)** 的网页版 AI 服务转通用 API 的工具。通过模拟人类操作与 LMArena、Gemini 等网站交互, 提供兼容 **OpenAI 格式** 的接口服务, 同时支持 **多窗口并发****多账号管理**(浏览器实例数据隔离)。
### ✨ 主要特性
- 🤖 **拟人交互**: 模拟人类打字与鼠标轨迹,通过特征伪装规避自动化检测
- 🔄 **接口兼容**: 提供标准 OpenAI 格式接口,支持流式响应与心跳保活
- 🚀 **并发隔离**: 支持多窗口并发执行,可配置独立代理,实现多账号浏览器实例级数据隔离
- 🤖 **拟人交互**: 模拟人类打字与鼠标轨迹, 通过特征伪装规避自动化检测
- 🔄 **接口兼容**: 提供标准 OpenAI 格式接口, 支持流式响应与心跳保活
- 🚀 **并发隔离**: 支持多窗口并发执行, 可配置独立代理,实现多账号浏览器实例级数据隔离
- 🛡️ **稳定防护**: 内置任务队列、负载均衡、故障转移、错误重试等基础功能
- 🎨 **Web 管理界面**: 提供可视化管理界面支持实时日志查看、VNC 连接、适配器管理等
- 🎨 **网页管理**: 提供可视化管理界面, 支持实时日志查看、VNC 连接、适配器管理等
### 📋 支持列表
@@ -43,7 +47,7 @@
> [!NOTE]
> **获取完整模型列表**: 通过 `GET /v1/models` 接口查看当前配置下所有可用模型及其详细信息。
>
> ✅目前支持;❌目前不支持,但未来可能会支持;🚫网站不支持是否在支持看网站具体情况;
> ✅目前支持;❌目前不支持,但未来可能会支持;🚫网站不支持, 未来是否在支持看网站具体情况;
---
@@ -61,12 +65,14 @@
1. **安装与配置**
```bash
# 1. 复制配置文件
cp config.example.yaml config.yaml
# 2. 安装依赖与初始化环境
# 1. 安装 NPM 依赖
pnpm install
npm run init # ⚠️ 需确保网络能连接 GitHub
# 2. 安装浏览器等预编译依赖
# ⚠️ 该脚本需连接 GitHub 下载资源。若网络受限,请使用代理
npm run init
# 使用代理
# 直接使用 -proxy 可交互式输入代理配置
npm run init -- -proxy=http://username:passwd@host:port
```
2. **启动服务**
@@ -76,15 +82,18 @@
# Linux 系统 - 虚拟显示启动
npm start -- -xvfb -vnc
# 登录模式 (会临时强行禁用无头模式和自动化)
npm start -- -login (-xvfb -vnc)
```
### 🐳 方式二:Docker 部署
> [!WARNING]
> **安全提醒**:
> - Docker 镜像默认开启虚拟显示器(Xvfb)和 VNC 服务
> - 可通过 WebUI 的虚拟显示器板块或 RealVNC 等工具连接(默认端口 5900)
> - **VNC 和 WebUI 传输过程未加密,公网环境请务必使用 SSH 隧道或 HTTPS**
> - Docker 镜像默认开启虚拟显示器 (Xvfb) 和 VNC 服务
> - 可通过 WebUI 的虚拟显示器板块连接
> - **WebUI 传输过程未加密, 公网环境请使用 SSH 隧道或 HTTPS**
**Docker CLI 启动**
```bash
@@ -100,71 +109,64 @@ docker run -d --name webai-2api \
docker-compose up -d
```
**映射 VNC 端口(如需使用第三方 VNC 客户端)**
```bash
docker run -d --name webai-2api \
-p 3000:3000 \
-p 5900:5900 \
-v "$(pwd)/data:/app/data" \
--shm-size=2gb \
foxhui/webai-2api:latest
```
---
## ⚡ 快速开始
### 1. 访问 Web 管理界面
### 1. 调整配置文件
服务启动后,打开浏览器访问:
程序初次运行会从`config.example.yaml`复制配置文件到`data/config.yaml`
**配置文件的生效需要重启程序!**
```yaml
server:
# 监听端口
port: 3000
# 鉴权 API Token (可使用 npm run genkey 生成)
# 该配置会对 API 接口和 WebUI 生效
auth: sk-change-me-to-your-secure-key
```
> [!TIP]
> **完整配置说明**: 请参考 [config.example.yaml](config.example.yaml) 文件中的详细注释,或访问 [WebAI2API 文档中心](https://foxhui.github.io/WebAI2API/) 查看完整配置指南。
### 2. 访问 Web 管理界面
服务启动后, 打开浏览器访问:
```
http://localhost:3000
```
> [!TIP]
> **远程访问**: 将 `localhost` 替换为服务器 IP 地址即可远程访问。
>
> **API Token**: 配置文件中的`auth`所配置的鉴权密钥。
> **安全建议**: 公网环境建议使用 Nginx/Caddy 配置 HTTPS 或通过 SSH 隧道访问。
### 2. 初始化账号登录
### 3. 初始化账号登录
> [!IMPORTANT]
> **首次使用必须完成以下初始化步骤**:
1. **连接虚拟显示器**:
- Linux/Docker: 在 WebUI 的"虚拟显示器"板块连接,或使用第三方 VNC 工具连接端口 5900
- Linux/Docker: 在 WebUI 的"虚拟显示器"板块连接
- Windows: 直接在弹出的浏览器窗口中操作
2. **完成账号登录**:
- 手动登录所需的 AI 网站账号
- 在输入框发送任意消息,触发并完成 CloudFlare/reCAPTCHA 验证
- 同意服务条款(如需要)
- 在输入框发送任意消息, 触发并完成人机验证 (如需要)
- 同意服务条款或者新手指引 (如需要)
- 确保不再有初次使用相关内容的阻拦
3. **SSH 隧道连接示例**(公网服务器推荐):
```bash
# 在本地终端运行,将服务器的 VNC 和 WebUI 映射到本地
ssh -L 3000:127.0.0.1:3000 -L 5900:127.0.0.1:5900 root@服务器IP
# 在本地终端运行,将服务器的 WebUI 映射到本地
ssh -L 3000:127.0.0.1:3000 root@服务器IP
# 然后在本地访问
# WebUI: http://localhost:3000
# VNC: localhost:5900
```
### 3. 调整配置文件
首次使用必须从 config.example.yaml 复制为 config.yaml (Docker 用户可忽略)
### 基础配置
```yaml
server:
port: 3000 # API 服务端口
apiKey: "your-key" # API 访问密钥
```
> [!TIP]
> **完整配置说明**: 请参考 [config.example.yaml](config.example.yaml) 文件中的详细注释,或访问 [WebAI2API 文档中心](https://foxhui.github.io/WebAI2API/) 查看完整配置指南。
---
## 📖 使用方法
@@ -173,10 +175,10 @@ server:
> [!NOTE]
> **关于有头/无头模式**:
> - **有头模式**(默认): 显示浏览器窗口,便于调试和人工干预
> - **无头模式**: 后台运行,节省资源但无法查看浏览器界面
> - **有头模式**(默认): 显示浏览器窗口, 便于调试和人工干预
> - **无头模式**: 后台运行, 节省资源但无法查看浏览器界面, 且可能会被网站检测
>
> **建议**: 为降低风控,**强烈建议长期保持非无头模式运行**(至少保持虚拟显示器 Xvfb)。
> **建议**: 为降低风控, **强烈建议长期保持非无头模式运行**(或使用虚拟显示器 Xvfb)。
---
@@ -190,9 +192,9 @@ server:
> [!WARNING]
> **并发限制与流式保活建议**
>
> 本项目通过模拟真实浏览器操作实现,处理过程根据实际情况时间可能有所变化,当积压的任务超过设置的数量时会直接拒绝非流式模式的请求。
> 本项目通过模拟真实浏览器操作实现, 处理过程根据实际情况时间可能有所变化, 当积压的任务超过设置的数量时会直接拒绝非流式模式的请求。
>
> **💡 强烈建议开启流式模式**: 服务器将发送保活心跳包,可无限排队避免超时。
> **💡 强烈建议开启流式模式**: 服务器将发送保活心跳包, 可无限排队避免超时。
#### 文本对话
@@ -224,15 +226,15 @@ curl http://localhost:3000/v1/chat/completions \
| 参数 | 类型 | 必填 | 说明 |
| :--- | :--- | :---: | :--- |
| `model` | string | ✅ | 模型名称,可通过 `/v1/models` 获取可用列表 |
| `stream` | boolean | 推荐 | 是否开启流式响应,包含心跳保活机制 |
| `model` | string | ✅ | 模型名称, 可通过 `/v1/models` 获取可用列表 |
| `stream` | boolean | 推荐 | 是否开启流式响应, 包含心跳保活机制 |
> [!NOTE]
> **关于流式保活 (Heartbeat)**
>
> 为防止长连接超时,系统提供两种保活模式 (可在配置中切换):
> 1. **Comment 模式 (默认/推荐)**: 发送 `:keepalive` 注释,符合 SSE 标准,兼容性最好
> 2. **Content 模式**: 发送空内容的 data 包,仅用于必须收到 JSON 数据才重置超时的特殊客户端
> 为防止长连接超时, 系统提供两种保活模式 (可在配置中切换):
> 1. **Comment 模式 (默认/推荐)**: 发送 `:keepalive` 注释, 符合 SSE 标准,兼容性最好
> 2. **Content 模式**: 发送空内容的 data 包, 仅用于必须收到 JSON 数据才重置超时的特殊客户端
### 2. 获取模型列表
@@ -272,8 +274,8 @@ curl "http://localhost:3000/v1/cookies?name=browser_default&domain=lmarena.ai" \
| **磁盘** | 2 GB 可用空间 | 5 GB 及以上 | 7 GB 及以上 |
**实测环境表现** (均为单浏览器实例):
- **Oracle 免费机** (1C1G, Debian 12): 资源紧张,比较卡顿,仅供尝鲜或轻度使用
- **阿里云轻量云** (2C2G, Debian 11): 运行流畅,项目开发测试所用机型
- **Oracle 免费机** (1C1G, Debian 12): 资源紧张, 比较卡顿, 仅供尝鲜或轻度使用
- **阿里云轻量云** (2C2G, Debian 11): 运行流畅但实例也会卡顿, 项目开发测试所用机型
---
@@ -290,11 +292,11 @@ curl "http://localhost:3000/v1/cookies?name=browser_default&domain=lmarena.ai" \
## 📋 更新日志
查看完整的版本历史和更新内容,请访问 [CHANGELOG.md](CHANGELOG.md)。
查看完整的版本历史和更新内容, 请访问 [CHANGELOG.md](CHANGELOG.md)。
### 🕰️ 历史版本说明
本项目已从 Puppeteer 迁移至 Camoufox,以应对日益复杂的反机器人检测机制。基于 Puppeteer 的旧版本代码已归档至 `puppeteer-edition` 分支,仅作留存,**不再提供更新与维护**。
本项目已从 Puppeteer 迁移至 Camoufox, 以应对日益复杂的反机器人检测机制。基于 Puppeteer 的旧版本代码已归档至 `puppeteer-edition` 分支, 仅作留存, **不再提供更新与维护**
---