mirror of
https://github.com/foxhui/WebAI2API.git
synced 2026-06-16 21:03:59 +08:00
docs: 移除代码文件,初始化文档专用分支
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
# Linux 部署
|
||||
|
||||
在 Linux 服务器上运行 WebAI2API 的特殊配置说明。
|
||||
|
||||
## 显示方式选择
|
||||
|
||||
在 Linux 服务器上运行非无头模式时,需要配置显示环境。
|
||||
|
||||
### 方式一:Xvfb + VNC (推荐)
|
||||
|
||||
使用虚拟显示器运行程序,通过 VNC 远程查看。
|
||||
|
||||
#### 使用内置命令
|
||||
|
||||
```bash
|
||||
npm start -- -xvfb -vnc
|
||||
```
|
||||
|
||||
这会自动:
|
||||
- 启动 Xvfb 虚拟显示器
|
||||
- 启动 x11vnc 服务器
|
||||
- 可通过 WebUI 直接查看 VNC 画面
|
||||
|
||||
#### 手动配置
|
||||
|
||||
如果内置命令无法满足需求:
|
||||
|
||||
1. **启动虚拟显示器**
|
||||
|
||||
```bash
|
||||
xvfb-run --server-num=99 --server-args="-ac -screen 0 1920x1080x24" npm start
|
||||
```
|
||||
|
||||
2. **映射到 VNC**
|
||||
|
||||
```bash
|
||||
x11vnc -display :99 -localhost -nopw -forever -noxdamage
|
||||
```
|
||||
|
||||
## VNC 连接
|
||||
|
||||
### 通过 SSH 隧道 (推荐)
|
||||
|
||||
```bash
|
||||
# 本地终端
|
||||
ssh -L 5900:127.0.0.1:5900 root@服务器IP
|
||||
```
|
||||
|
||||
然后使用 VNC 客户端连接 `127.0.0.1:5900`。
|
||||
|
||||
### 通过 WebUI
|
||||
|
||||
服务启动后,访问 WebUI 的「VNC 显示」页面即可直接查看。
|
||||
|
||||
### 安装依赖
|
||||
|
||||
### Ubuntu/Debian
|
||||
|
||||
```bash
|
||||
sudo apt-get update
|
||||
sudo apt-get install xvfb x11vnc
|
||||
```
|
||||
|
||||
### CentOS/RHEL
|
||||
|
||||
```bash
|
||||
sudo yum install xorg-x11-server-Xvfb x11vnc
|
||||
```
|
||||
|
||||
### Arch Linux
|
||||
|
||||
```bash
|
||||
sudo pacman -S xorg-server-xvfb x11vnc
|
||||
```
|
||||
|
||||
### 方式二:X11 转发
|
||||
|
||||
适用于通过 SSH 连接服务器的场景。
|
||||
|
||||
1. 在本地安装 X Server(如 VcXsrv、Xming)
|
||||
2. 使用支持 X11 转发的终端(如 WindTerm)
|
||||
3. 在 SSH 会话中启用 X11 转发
|
||||
|
||||
```bash
|
||||
ssh -X user@server
|
||||
```
|
||||
|
||||
## Docker 部署
|
||||
|
||||
Docker 镜像已内置 Xvfb 和 VNC 支持:
|
||||
|
||||
```bash
|
||||
docker run -d --name webai2api \
|
||||
-p 3000:3000 -p 5900:5900 \
|
||||
-v "$(pwd)/data:/app/data" \
|
||||
-e LOGIN_MODE=true \
|
||||
--shm-size=2gb \
|
||||
foxhui/lmarena-imagen-automator:latest
|
||||
```
|
||||
|
||||
通过 VNC 客户端连接 `localhost:5900` 完成登录。
|
||||
|
||||
## 常见问题
|
||||
|
||||
### 端口被占用
|
||||
|
||||
如果 5900 端口已被占用,VNC 服务器会自动查找 5901-5999 范围内可用的端口。
|
||||
|
||||
### 显示号冲突
|
||||
|
||||
Xvfb 会自动从 50 开始查找可用的显示号,避免与现有 X 服务器冲突。
|
||||
@@ -0,0 +1,134 @@
|
||||
# 故障排查
|
||||
|
||||
常见问题的诊断和解决方法。
|
||||
|
||||
## 请求相关
|
||||
|
||||
### 请求被拒绝 (429 Too Many Requests)
|
||||
|
||||
**问题**:并发请求过多,队列已满。
|
||||
|
||||
**解决方案**:
|
||||
- 启用流式模式 (`stream: true`),可无限排队
|
||||
- 减少并发请求数量
|
||||
- 增加 `queue.queueBuffer` 配置值
|
||||
|
||||
### 请求超时
|
||||
|
||||
**问题**:任务超过 120 秒未完成。
|
||||
|
||||
**解决方案**:
|
||||
- 启用流式模式,利用心跳保活
|
||||
- 检查网络连接是否稳定
|
||||
- 某些复杂提示词可能需要更长时间
|
||||
|
||||
## 验证相关
|
||||
|
||||
### reCAPTCHA 验证失败
|
||||
|
||||
**问题**:返回 `recaptcha validation failed`。
|
||||
|
||||
**解决方案**:
|
||||
- 降低请求频率
|
||||
- 进入登录模式手动完成验证
|
||||
- 使用稳定纯净的 IP 地址
|
||||
- 检查 IP 纯净度:[ping0.cc](https://ping0.cc)
|
||||
|
||||
### CloudFlare 挑战
|
||||
|
||||
**问题**:浏览器卡在 CloudFlare 验证页面。
|
||||
|
||||
**解决方案**:
|
||||
- 进入 VNC 手动完成验证
|
||||
- 更换 IP 地址
|
||||
- 避免使用数据中心 IP
|
||||
|
||||
## 登录相关
|
||||
|
||||
### 登录状态丢失
|
||||
|
||||
**问题**:服务重启后需要重新登录。
|
||||
|
||||
**解决方案**:
|
||||
- 确保 `data` 目录持久化
|
||||
- 检查 `userDataMark` 配置是否正确
|
||||
- 避免删除浏览器数据目录
|
||||
|
||||
### OAuth 登录失败
|
||||
|
||||
**问题**:Google 等 OAuth 登录跳转失败。
|
||||
|
||||
**解决方案**:
|
||||
- 确保可以访问 accounts.google.com
|
||||
- 检查代理配置是否正确
|
||||
- 尝试更换 IP 地址
|
||||
|
||||
## 浏览器相关
|
||||
|
||||
### 浏览器启动失败
|
||||
|
||||
**问题**:Camoufox 无法启动。
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 重新初始化 Camoufox
|
||||
npm run init
|
||||
```
|
||||
|
||||
### 内存不足
|
||||
|
||||
**问题**:浏览器因内存不足崩溃。
|
||||
|
||||
**解决方案**:
|
||||
- 增加服务器内存(建议 2GB+)
|
||||
- 减少同时运行的浏览器实例数量
|
||||
- Docker 环境确保设置 `--shm-size=2gb`
|
||||
|
||||
## 网络相关
|
||||
|
||||
### 代理连接失败
|
||||
|
||||
**问题**:无法连接到代理服务器。
|
||||
|
||||
**解决方案**:
|
||||
- 检查代理服务器地址和端口
|
||||
- 验证代理认证信息
|
||||
- 测试代理服务器是否正常
|
||||
|
||||
### 目标网站不可访问
|
||||
|
||||
**问题**:无法访问 LMArena/Gemini 等网站。
|
||||
|
||||
**解决方案**:
|
||||
- 检查网络连接
|
||||
- 尝试使用代理
|
||||
- 确认目标网站未被封禁
|
||||
|
||||
## 日志诊断
|
||||
|
||||
### 查看详细日志
|
||||
|
||||
在 `config.yaml` 中设置日志等级:
|
||||
|
||||
```yaml
|
||||
logLevel: debug
|
||||
```
|
||||
|
||||
### 常见日志信息
|
||||
|
||||
| 日志内容 | 说明 |
|
||||
| --- | --- |
|
||||
| `工作池初始化失败` | 检查配置文件和网络 |
|
||||
| `Worker 不支持模型` | 检查模型名称是否正确 |
|
||||
| `验证超时` | 需要手动完成验证 |
|
||||
| `页面已关闭` | 浏览器可能崩溃 |
|
||||
|
||||
## 获取帮助
|
||||
|
||||
如果以上方法无法解决问题:
|
||||
|
||||
1. 查看 [GitHub Issues](https://github.com/foxhui/WebAI2API/issues)
|
||||
2. 提交 Issue 并附上:
|
||||
- 日志输出(设置 `logLevel: debug`)
|
||||
- 配置文件(隐藏敏感信息)
|
||||
- 操作系统和 Node.js 版本
|
||||
@@ -0,0 +1,82 @@
|
||||
# Web 管理界面
|
||||
|
||||
WebAI2API 提供了内置的 Web 管理界面,用于监控和管理服务。
|
||||
|
||||
::: warning 注意
|
||||
WebUI 以及管理接口仅在握手阶段使用 API Token 验证,传输阶段无任何加密,如果您在公网环境使用,请使用 Caddy 或 Nginx 等专业的网站服务器对连接进行 HTTPS 加密!
|
||||
:::
|
||||
|
||||
## 访问地址
|
||||
|
||||
```
|
||||
http://localhost:3000
|
||||
```
|
||||
|
||||
首次访问需要输入配置文件中设置的 API Token 进行认证。
|
||||
|
||||
## 功能模块
|
||||
|
||||
### 仪表盘
|
||||
|
||||
仪表盘页面显示系统运行状态:
|
||||
|
||||
- **系统状态**:版本、运行时间、运行模式
|
||||
- **业务统计**:窗口数量、实例数量
|
||||
- **队列状态**:处理中/等待中的任务列表
|
||||
|
||||
### 系统管理
|
||||
|
||||
系统管理页面提供:
|
||||
|
||||
- **服务控制**
|
||||
- 普通重启
|
||||
- 登录模式重启
|
||||
- 指定 Worker 登录
|
||||
- 停止服务
|
||||
|
||||
- **缓存管理**
|
||||
- 查看临时文件
|
||||
- 清理缓存
|
||||
|
||||
- **数据管理**
|
||||
- 查看浏览器数据目录
|
||||
- 删除未使用的数据目录
|
||||
|
||||
### VNC 显示
|
||||
|
||||
在 Linux 环境下使用 `-xvfb -vnc` 启动时,可以通过 WebUI 直接查看和操作虚拟显示器:
|
||||
|
||||
- 连接/断开 VNC
|
||||
- 全屏显示
|
||||
- 查看 VNC 状态信息
|
||||
|
||||
::: tip 说明
|
||||
VNC 显示功能需要服务以 Xvfb + VNC 模式运行。
|
||||
:::
|
||||
|
||||
### 配置管理
|
||||
|
||||
- **服务器配置**:端口、认证、心跳设置
|
||||
- **适配器配置**:各后端的专属配置
|
||||
- **浏览器设置**:路径、无头模式、代理
|
||||
|
||||
### 实例管理
|
||||
|
||||
管理浏览器实例和 Worker 配置(需要重启生效)。
|
||||
|
||||
## 快捷操作
|
||||
|
||||
### 登录模式重启
|
||||
|
||||
1. 进入「缓存与重启」页面
|
||||
2. 点击「重启」按钮旁的下拉箭头
|
||||
3. 选择重启模式:
|
||||
- **普通重启**:正常模式重启
|
||||
- **登录模式重启**:以 `-login` 参数重启
|
||||
- **指定 Worker 登录**:选择特定 Worker 进入登录模式
|
||||
|
||||
### 清理缓存
|
||||
|
||||
1. 进入「缓存与重启」页面
|
||||
2. 找到「缓存管理」区域
|
||||
3. 点击「清理缓存」按钮
|
||||
@@ -0,0 +1,171 @@
|
||||
# Chat Completions
|
||||
|
||||
对话生成接口,兼容 OpenAI Chat Completions API。
|
||||
|
||||
## 端点
|
||||
|
||||
```
|
||||
POST /v1/chat/completions
|
||||
```
|
||||
|
||||
## 请求参数
|
||||
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| `model` | string | ✅ | 模型名称 |
|
||||
| `messages` | array | ✅ | 消息列表 |
|
||||
| `stream` | boolean | ❌ | 是否启用流式响应(推荐开启) |
|
||||
|
||||
### messages 格式
|
||||
|
||||
```json
|
||||
{
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": "生成一只可爱的猫"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 多模态请求(图生图)
|
||||
|
||||
```json
|
||||
{
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": "让这张图片更加鲜艳"
|
||||
},
|
||||
{
|
||||
"type": "image_url",
|
||||
"image_url": {
|
||||
"url": "data:image/jpeg;base64,/9j/4AAQ..."
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 图片限制
|
||||
|
||||
| 限制项 | 说明 |
|
||||
| --- | --- |
|
||||
| 支持格式 | PNG, JPEG, GIF, WebP |
|
||||
| 数量限制 | 默认 5 张,最大 10 张 |
|
||||
| 数据格式 | Base64 Data URL (`data:image/jpeg;base64,...`) |
|
||||
| 自动转换 | 服务器会自动转换为 JPG 格式 |
|
||||
|
||||
## 非流式响应
|
||||
|
||||
### 请求示例
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:3000/v1/chat/completions \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer sk-your-key" \
|
||||
-d '{
|
||||
"model": "gemini-3-pro-image-preview",
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": "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": ""
|
||||
},
|
||||
"finish_reason": "stop"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 流式响应
|
||||
|
||||
::: tip 推荐使用
|
||||
流式模式包含心跳保活机制,可以避免长时间生成导致的连接超时。
|
||||
:::
|
||||
|
||||
### 请求示例
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:3000/v1/chat/completions \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer sk-your-key" \
|
||||
-d '{
|
||||
"model": "gemini-3-pro-image-preview",
|
||||
"stream": true,
|
||||
"messages": [
|
||||
{
|
||||
"role": "user",
|
||||
"content": "generate a cat"
|
||||
}
|
||||
]
|
||||
}'
|
||||
```
|
||||
|
||||
### 响应示例
|
||||
|
||||
```
|
||||
data: {"id":"chatcmpl-123","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-123","object":"chat.completion.chunk","created":1732374740,"model":"gemini-3-pro-image-preview","choices":[{"index":0,"delta":{"content":""},"finish_reason":"stop"}]}
|
||||
|
||||
data: [DONE]
|
||||
```
|
||||
|
||||
## 错误处理
|
||||
|
||||
### 队列已满 (429)
|
||||
|
||||
```json
|
||||
{
|
||||
"error": {
|
||||
"message": "队列已满",
|
||||
"type": "rate_limit_exceeded",
|
||||
"code": "QUEUE_FULL"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
::: tip 解决方案
|
||||
启用流式模式 (`stream: true`) 可以无限排队,避免 429 错误。
|
||||
:::
|
||||
|
||||
### 模型不支持 (400)
|
||||
|
||||
```json
|
||||
{
|
||||
"error": {
|
||||
"message": "没有 Worker 支持模型: invalid-model",
|
||||
"type": "invalid_request_error",
|
||||
"code": "MODEL_NOT_FOUND"
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -0,0 +1,70 @@
|
||||
# Cookies API
|
||||
|
||||
获取浏览器实例的 Cookie,可用于其他工具。
|
||||
|
||||
## 端点
|
||||
|
||||
```
|
||||
GET /v1/cookies
|
||||
```
|
||||
|
||||
## 查询参数
|
||||
|
||||
| 参数 | 类型 | 必填 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| `name` | string | ❌ | 浏览器实例名称 |
|
||||
| `domain` | string | ❌ | 过滤指定域名的 Cookie |
|
||||
|
||||
## 请求示例
|
||||
|
||||
### 获取所有 Cookie
|
||||
|
||||
```bash
|
||||
curl -X GET http://localhost:3000/v1/cookies \
|
||||
-H "Authorization: Bearer sk-your-key"
|
||||
```
|
||||
|
||||
### 指定实例和域名
|
||||
|
||||
```bash
|
||||
curl -X GET "http://localhost:3000/v1/cookies?name=browser_default&domain=lmarena.ai" \
|
||||
-H "Authorization: Bearer sk-your-key"
|
||||
```
|
||||
|
||||
## 响应格式
|
||||
|
||||
```json
|
||||
{
|
||||
"instance": "browser_default",
|
||||
"cookies": [
|
||||
{
|
||||
"name": "_GRECAPTCHA",
|
||||
"value": "09ADxxxxxx",
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 使用场景
|
||||
|
||||
::: tip 应用场景
|
||||
- 将 Cookie 导出给其他自动化工具使用
|
||||
- 利用本项目的自动续登功能保持 Cookie 新鲜
|
||||
- 调试登录状态问题
|
||||
:::
|
||||
@@ -0,0 +1,78 @@
|
||||
# Models API
|
||||
|
||||
获取当前可用的模型列表。
|
||||
|
||||
## 端点
|
||||
|
||||
```
|
||||
GET /v1/models
|
||||
```
|
||||
|
||||
## 请求示例
|
||||
|
||||
```bash
|
||||
curl -X GET http://localhost:3000/v1/models \
|
||||
-H "Authorization: Bearer sk-your-key"
|
||||
```
|
||||
|
||||
## 响应格式
|
||||
|
||||
```json
|
||||
{
|
||||
"object": "list",
|
||||
"data": [
|
||||
{
|
||||
"id": "gemini-3-pro-image-preview",
|
||||
"object": "model",
|
||||
"created": 1732456789,
|
||||
"owned_by": "internal_server"
|
||||
},
|
||||
{
|
||||
"id": "lmarena/gemini-3-pro-image-preview",
|
||||
"object": "model",
|
||||
"created": 1732456789,
|
||||
"owned_by": "lmarena"
|
||||
},
|
||||
{
|
||||
"id": "seedream-4-high-res-fal",
|
||||
"object": "model",
|
||||
"created": 1732456789,
|
||||
"owned_by": "internal_server"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 模型命名规则
|
||||
|
||||
### 简写形式
|
||||
|
||||
直接使用模型 ID:
|
||||
|
||||
```
|
||||
gemini-3-pro-image-preview
|
||||
```
|
||||
|
||||
系统会自动匹配到支持该模型的 Worker。
|
||||
|
||||
### 指定后端形式
|
||||
|
||||
使用 `backend/model` 格式:
|
||||
|
||||
```
|
||||
lmarena/gemini-3-pro-image-preview
|
||||
gemini_biz/gemini-3-pro-image-preview
|
||||
```
|
||||
|
||||
强制使用指定后端处理请求。
|
||||
|
||||
## 模型类型
|
||||
|
||||
| 类型 | 说明 |
|
||||
| --- | --- |
|
||||
| `image` | 图片生成模型 |
|
||||
| `text` | 文本生成模型 |
|
||||
|
||||
::: info 说明
|
||||
返回的模型列表取决于当前配置的 Worker 和适配器类型。
|
||||
:::
|
||||
@@ -0,0 +1,86 @@
|
||||
# API 概览
|
||||
|
||||
WebAI2API 提供兼容 OpenAI 格式的 RESTful API。
|
||||
|
||||
## 基础信息
|
||||
|
||||
- **Base URL**: `http://localhost:3000`
|
||||
- **认证方式**: Bearer Token
|
||||
|
||||
### 请求头
|
||||
|
||||
```http
|
||||
Authorization: Bearer sk-your-secret-key
|
||||
Content-Type: application/json
|
||||
```
|
||||
|
||||
## API 端点列表
|
||||
|
||||
### OpenAI 兼容接口
|
||||
|
||||
| 方法 | 端点 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| POST | `/v1/chat/completions` | 对话生成 |
|
||||
| GET | `/v1/models` | 获取模型列表 |
|
||||
| GET | `/v1/cookies` | 获取 Cookie |
|
||||
|
||||
### 管理接口
|
||||
|
||||
| 方法 | 端点 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| GET | `/admin/status` | 服务状态 |
|
||||
| GET | `/admin/stats` | 统计信息 |
|
||||
| GET | `/admin/queue` | 队列状态 |
|
||||
| POST | `/admin/restart` | 重启服务 |
|
||||
| POST | `/admin/stop` | 停止服务 |
|
||||
| GET | `/admin/vnc/status` | VNC 状态 |
|
||||
| POST | `/admin/cache/clear` | 清理缓存 |
|
||||
|
||||
## 错误响应
|
||||
|
||||
所有 API 错误返回统一格式:
|
||||
|
||||
```json
|
||||
{
|
||||
"error": {
|
||||
"message": "错误描述",
|
||||
"type": "error_type",
|
||||
"code": "ERROR_CODE"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 常见错误码
|
||||
|
||||
| HTTP 状态码 | 错误类型 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| 401 | `unauthorized` | 认证失败 |
|
||||
| 400 | `invalid_request` | 请求参数错误 |
|
||||
| 404 | `not_found` | 资源不存在 |
|
||||
| 429 | `rate_limit` | 请求过多 |
|
||||
| 500 | `internal_error` | 服务器内部错误 |
|
||||
| 503 | `service_unavailable` | 服务不可用 |
|
||||
|
||||
## 流式响应
|
||||
|
||||
对于 `stream: true` 的请求,响应使用 Server-Sent Events (SSE) 格式:
|
||||
|
||||
```
|
||||
data: {"id":"...","object":"chat.completion.chunk",...}
|
||||
|
||||
: keep-alive
|
||||
|
||||
data: {"id":"...","object":"chat.completion.chunk",...}
|
||||
|
||||
data: [DONE]
|
||||
```
|
||||
|
||||
::: tip 心跳保活
|
||||
流式请求会自动发送心跳包防止连接超时,格式取决于配置的 `keepalive.mode`。
|
||||
:::
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [Chat Completions](/api/chat) - 对话生成接口详解
|
||||
- [Models](/api/models) - 模型列表接口
|
||||
- [Cookies](/api/cookies) - Cookie 获取接口
|
||||
@@ -0,0 +1,146 @@
|
||||
# 实例配置
|
||||
|
||||
实例 (Instance) 和工作者 (Worker) 是 WebAI2API 的核心配置概念。
|
||||
|
||||
## 概念说明
|
||||
|
||||
### Instance (浏览器实例)
|
||||
|
||||
一个 Instance 代表一个独立的浏览器进程,具有:
|
||||
- 独立的用户数据目录
|
||||
- 独立的 Cookie 和登录状态
|
||||
- 可选的专属代理配置
|
||||
|
||||
### Worker (工作者)
|
||||
|
||||
Worker 是 Instance 内的一个标签页,负责与特定平台交互。同一 Instance 下的多个 Worker:
|
||||
- 共享浏览器数据和登录状态
|
||||
- 共享代理配置
|
||||
- 可以是不同的适配器类型
|
||||
|
||||
## 配置结构
|
||||
|
||||
```yaml
|
||||
backend:
|
||||
pool:
|
||||
instances:
|
||||
- name: "browser_default" # 实例 ID
|
||||
userDataMark: "01" # 数据目录标识 (可选)
|
||||
proxy: # 实例级代理 (可选)
|
||||
enable: true
|
||||
type: socks5
|
||||
host: 127.0.0.1
|
||||
port: 1080
|
||||
workers: # Worker 列表
|
||||
- name: "worker1"
|
||||
type: lmarena
|
||||
- name: "worker2"
|
||||
type: zai_is
|
||||
```
|
||||
|
||||
## Instance 配置项
|
||||
|
||||
| 配置项 | 类型 | 必填 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| `name` | string | ✅ | 实例唯一标识,用于日志和 Cookie 获取 |
|
||||
| `userDataMark` | string | ❌ | 数据目录标识,留空使用默认目录 |
|
||||
| `proxy` | object | ❌ | 实例级代理配置,参见[代理设置](/config/proxy) |
|
||||
| `workers` | array | ✅ | Worker 配置列表 |
|
||||
|
||||
### 数据目录
|
||||
|
||||
- 默认位置: `data/camoufoxUserData`
|
||||
- 设置 `userDataMark` 后: `data/camoufoxUserData_{mark}`
|
||||
|
||||
## Worker 配置项
|
||||
|
||||
| 配置项 | 类型 | 必填 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| `name` | string | ✅ | Worker 唯一标识(全局唯一) |
|
||||
| `type` | string | ✅ | 适配器类型 |
|
||||
| `mergeTypes` | array | ❌ | 聚合模式的适配器列表 (type=merge 时必填) |
|
||||
| `mergeMonitor` | string | ❌ | 空闲时监控的后端 (可选) |
|
||||
|
||||
### 适配器类型
|
||||
|
||||
| 类型 | 说明 |
|
||||
| --- | --- |
|
||||
| `lmarena` | LMArena 图片生成 |
|
||||
| `lmarena_text` | LMArena 文本生成 |
|
||||
| `gemini_biz` | Gemini Business 图片生成 |
|
||||
| `gemini_biz_text` | Gemini Business 文本生成 |
|
||||
| `gemini` | Google Gemini |
|
||||
| `zai_is` | zAI 图片生成 |
|
||||
| `nanobananafree_ai` | Nano Banana Free |
|
||||
| `merge` | 聚合模式(单标签多后端) |
|
||||
|
||||
## 聚合模式 (Merge)
|
||||
|
||||
聚合模式允许在单个标签页中支持多个后端,实现故障转移:
|
||||
|
||||
```yaml
|
||||
workers:
|
||||
- name: "merged_worker"
|
||||
type: merge
|
||||
mergeTypes: [gemini_biz, lmarena, zai_is]
|
||||
mergeMonitor: gemini_biz # 空闲时挂机监控的后端
|
||||
```
|
||||
|
||||
::: tip 聚合模式优势
|
||||
- 节省浏览器资源
|
||||
- 自动故障转移
|
||||
- 统一登录状态
|
||||
:::
|
||||
|
||||
## 配置示例
|
||||
|
||||
### 单实例单 Worker
|
||||
|
||||
```yaml
|
||||
instances:
|
||||
- name: "default"
|
||||
workers:
|
||||
- name: "worker1"
|
||||
type: lmarena
|
||||
```
|
||||
|
||||
### 多实例隔离
|
||||
|
||||
```yaml
|
||||
instances:
|
||||
# 实例 1: 美国代理
|
||||
- name: "browser_us"
|
||||
userDataMark: "us"
|
||||
proxy:
|
||||
enable: true
|
||||
type: socks5
|
||||
host: us-proxy.example.com
|
||||
port: 1080
|
||||
workers:
|
||||
- name: "us_worker"
|
||||
type: lmarena
|
||||
|
||||
# 实例 2: 日本代理
|
||||
- name: "browser_jp"
|
||||
userDataMark: "jp"
|
||||
proxy:
|
||||
enable: true
|
||||
type: socks5
|
||||
host: jp-proxy.example.com
|
||||
port: 1080
|
||||
workers:
|
||||
- name: "jp_worker"
|
||||
type: lmarena
|
||||
```
|
||||
|
||||
### 聚合模式
|
||||
|
||||
```yaml
|
||||
instances:
|
||||
- name: "browser_merged"
|
||||
workers:
|
||||
- name: "all_in_one"
|
||||
type: merge
|
||||
mergeTypes: [gemini_biz, lmarena, zai_is]
|
||||
mergeMonitor: gemini_biz
|
||||
```
|
||||
@@ -0,0 +1,90 @@
|
||||
# 配置文件概览、
|
||||
|
||||
WebAI2API 使用 YAML 格式的配置文件 `config.yaml` 进行配置。
|
||||
|
||||
::: warning 注意
|
||||
项目的配置问价已可以完全使用 WebUI 进行配置,若您不了解 YAML 文件,请直接略过该板块访问 WebUI 修改配置!
|
||||
:::
|
||||
|
||||
## 配置文件结构
|
||||
|
||||
```yaml
|
||||
# 日志等级
|
||||
logLevel: info
|
||||
|
||||
# 服务器配置
|
||||
server:
|
||||
port: 3000
|
||||
auth: sk-your-key
|
||||
keepalive:
|
||||
mode: "comment"
|
||||
|
||||
# 后端配置
|
||||
backend:
|
||||
pool:
|
||||
strategy: least_busy
|
||||
failover:
|
||||
enabled: true
|
||||
maxRetries: 2
|
||||
instances:
|
||||
- name: "browser_default"
|
||||
workers:
|
||||
- name: "default"
|
||||
type: lmarena
|
||||
adapter:
|
||||
gemini_biz:
|
||||
entryUrl: ""
|
||||
|
||||
# 队列配置
|
||||
queue:
|
||||
queueBuffer: 2
|
||||
imageLimit: 5
|
||||
|
||||
# 浏览器配置
|
||||
browser:
|
||||
path: ""
|
||||
headless: false
|
||||
proxy:
|
||||
enable: false
|
||||
```
|
||||
|
||||
## 配置项说明
|
||||
|
||||
### 日志配置
|
||||
|
||||
| 配置项 | 类型 | 默认值 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| `logLevel` | string | `info` | 日志等级:`debug`、`info`、`warn`、`error` |
|
||||
|
||||
### 服务器配置 (server)
|
||||
|
||||
| 配置项 | 类型 | 默认值 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| `port` | number | `3000` | HTTP 服务监听端口 |
|
||||
| `auth` | string | - | API 鉴权 Token (Bearer Token) |
|
||||
| `keepalive.mode` | string | `comment` | 心跳模式:`comment` 或 `content` |
|
||||
|
||||
::: tip 心跳模式说明
|
||||
- **comment**: 发送 `:keepalive` 注释,不污染数据(推荐)
|
||||
- **content**: 发送空 delta,用于必须收到 JSON 才重置超时的客户端
|
||||
:::
|
||||
|
||||
### 队列配置 (queue)
|
||||
|
||||
| 配置项 | 类型 | 默认值 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| `queueBuffer` | number | `2` | 非流式请求的额外排队数,0 表示不限制 |
|
||||
| `imageLimit` | number | `5` | 单次请求最大图片数量 (最大 10) |
|
||||
|
||||
### 浏览器配置 (browser)
|
||||
|
||||
| 配置项 | 类型 | 默认值 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| `path` | string | `""` | Camoufox 可执行文件路径,留空使用默认 |
|
||||
| `headless` | boolean | `false` | 是否启用无头模式 |
|
||||
| `proxy` | object | - | 全局代理配置 |
|
||||
|
||||
## 相关文档
|
||||
|
||||
- [实例配置](/config/instances) - 浏览器实例和 Worker 详细配置
|
||||
- [代理设置](/config/proxy) - 代理配置详解
|
||||
@@ -0,0 +1,85 @@
|
||||
# 代理设置
|
||||
|
||||
WebAI2API 支持全局代理和实例级代理配置。
|
||||
|
||||
## 代理优先级
|
||||
|
||||
1. **实例级代理** - 如果 Instance 配置了代理,使用该代理
|
||||
2. **全局代理** - 如果实例未配置,使用全局代理
|
||||
3. **直连** - 如果都未配置,直接连接
|
||||
|
||||
## 全局代理配置
|
||||
|
||||
在 `browser.proxy` 中配置全局代理:
|
||||
|
||||
```yaml
|
||||
browser:
|
||||
proxy:
|
||||
enable: true
|
||||
type: http # http 或 socks5
|
||||
host: 127.0.0.1
|
||||
port: 7890
|
||||
# 可选认证
|
||||
user: username
|
||||
passwd: password
|
||||
```
|
||||
|
||||
## 实例级代理配置
|
||||
|
||||
在 Instance 中配置专属代理:
|
||||
|
||||
```yaml
|
||||
backend:
|
||||
pool:
|
||||
instances:
|
||||
- name: "browser_us"
|
||||
proxy:
|
||||
enable: true
|
||||
type: socks5
|
||||
host: us-proxy.example.com
|
||||
port: 1080
|
||||
user: myuser
|
||||
passwd: mypassword
|
||||
workers:
|
||||
- name: "us_worker"
|
||||
type: lmarena
|
||||
```
|
||||
|
||||
## 配置项说明
|
||||
|
||||
| 配置项 | 类型 | 必填 | 说明 |
|
||||
| --- | --- | --- | --- |
|
||||
| `enable` | boolean | ✅ | 是否启用代理 |
|
||||
| `type` | string | ✅ | 代理类型:`http` 或 `socks5` |
|
||||
| `host` | string | ✅ | 代理服务器地址 |
|
||||
| `port` | number | ✅ | 代理服务器端口 |
|
||||
| `user` | string | ❌ | 代理认证用户名 |
|
||||
| `passwd` | string | ❌ | 代理认证密码 |
|
||||
|
||||
## 强制直连
|
||||
|
||||
如果需要某个实例强制直连,即使配置了全局代理:
|
||||
|
||||
```yaml
|
||||
instances:
|
||||
- name: "browser_direct"
|
||||
proxy:
|
||||
enable: false # 显式禁用代理
|
||||
workers:
|
||||
- name: "direct_worker"
|
||||
type: lmarena
|
||||
```
|
||||
|
||||
## 代理选型建议
|
||||
|
||||
::: tip 推荐配置
|
||||
- **类型**: SOCKS5 代理通常比 HTTP 代理更通用
|
||||
- **稳定性**: 选择稳定可靠的代理服务商
|
||||
- **IP 纯净度**: 使用 [ping0.cc](https://ping0.cc) 等工具检查 IP 纯净度
|
||||
:::
|
||||
|
||||
::: warning 注意事项
|
||||
- 代理质量会影响验证码触发频率
|
||||
- 频繁更换 IP 可能导致账号风控
|
||||
- 建议使用住宅 IP 或数据中心静态 IP
|
||||
:::
|
||||
@@ -0,0 +1,106 @@
|
||||
# 快速部署
|
||||
|
||||
本项目支持 **手动部署(推荐)** 和 **Docker 容器化部署** 两种方式。
|
||||
|
||||
## 手动部署
|
||||
|
||||
### 1. 克隆项目
|
||||
|
||||
```bash
|
||||
git clone https://github.com/foxhui/WebAI2API.git
|
||||
cd WebAI2API
|
||||
```
|
||||
|
||||
### 2. 复制配置文件
|
||||
|
||||
```bash
|
||||
cp config.example.yaml config.yaml
|
||||
```
|
||||
|
||||
### 3. 安装依赖
|
||||
|
||||
```bash
|
||||
# 安装 Node.js 依赖
|
||||
pnpm install
|
||||
|
||||
# 初始化预编译依赖
|
||||
npm run init
|
||||
```
|
||||
|
||||
::: warning 注意
|
||||
`npm run init` 需要从 GitHub 下载文件,请确保网络畅通。
|
||||
:::
|
||||
|
||||
### 4. 编辑配置
|
||||
|
||||
编辑 `config.yaml` 文件,设置鉴权密钥等配置:
|
||||
|
||||
```yaml
|
||||
server:
|
||||
port: 3000
|
||||
auth: sk-your-secret-key # 修改为你的密钥
|
||||
```
|
||||
|
||||
### 5. 启动服务
|
||||
|
||||
```bash
|
||||
# 标准运行
|
||||
npm start
|
||||
|
||||
# Linux 命令行启动
|
||||
npm start -- -xvfb -vnc
|
||||
```
|
||||
|
||||
## Docker 部署
|
||||
|
||||
::: warning 首次运行说明
|
||||
首次运行需通过 VNC 客户端连接 `localhost:5900` 完成网页登录验证。
|
||||
:::
|
||||
|
||||
### Docker CLI
|
||||
|
||||
```bash
|
||||
docker run -d --name webai2api \
|
||||
-p 3000:3000 -p 5900:5900 \
|
||||
-v "$(pwd)/data:/app/data" \
|
||||
-v "$(pwd)/config.yaml:/app/config.yaml" \
|
||||
-e LOGIN_MODE=true \
|
||||
--shm-size=2gb \
|
||||
foxhui/lmarena-imagen-automator:latest
|
||||
```
|
||||
|
||||
### Docker Compose
|
||||
|
||||
```yaml
|
||||
version: '3.8'
|
||||
services:
|
||||
webai2api:
|
||||
image: foxhui/lmarena-imagen-automator:latest
|
||||
ports:
|
||||
- "3000:3000"
|
||||
- "5900:5900"
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
- ./config.yaml:/app/config.yaml
|
||||
environment:
|
||||
- LOGIN_MODE=true
|
||||
shm_size: 2gb
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
启动服务:
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## 验证安装
|
||||
|
||||
服务启动后,访问以下地址验证:
|
||||
|
||||
- **Web 管理界面**: http://localhost:3000
|
||||
- **API 接口测试**: http://localhost:3000/v1/chat/completions
|
||||
|
||||
## 下一步
|
||||
|
||||
部署完成后,请阅读 [首次使用](/guide/first-use) 完成登录初始化。
|
||||
@@ -0,0 +1,82 @@
|
||||
# 首次使用
|
||||
|
||||
首次使用 WebAI2API 时,需要完成登录初始化才能正常使用。
|
||||
|
||||
## 登录模式
|
||||
|
||||
### 启动登录模式
|
||||
|
||||
```bash
|
||||
# 启动第一个 Worker 进行登录
|
||||
npm start -- -login
|
||||
|
||||
# 启动指定 Worker 进行登录
|
||||
npm start -- -login=workerName
|
||||
```
|
||||
|
||||
### Linux 用户特殊说明
|
||||
|
||||
Linux 服务器用户可以使用 Xvfb + VNC 方式:
|
||||
|
||||
```bash
|
||||
npm start -- -xvfb -vnc
|
||||
```
|
||||
|
||||
然后通过 VNC 客户端连接 `:5900` 端口进行操作(也可使用 WebUI 中的虚拟显示器板块)
|
||||
|
||||
## 初始化步骤
|
||||
|
||||
1. **登录账号**
|
||||
- 在打开的浏览器中登录相应平台的账号
|
||||
- 例如:Google 账号用于 Gemini,GitHub 账号用于 LMArena
|
||||
|
||||
2. **完成验证**
|
||||
- 在输入框发送任意消息
|
||||
- 触发并完成 CloudFlare/reCAPTCHA 验证
|
||||
- 同意服务条款
|
||||
|
||||
3. **验证成功**
|
||||
- 确认可以正常发送消息和接收回复
|
||||
- 关闭浏览器或按 `Ctrl+C` 退出登录模式
|
||||
|
||||
## 切换到标准模式
|
||||
|
||||
初始化完成后,使用标准命令启动服务:
|
||||
|
||||
```bash
|
||||
npm start
|
||||
```
|
||||
|
||||
::: tip 运行建议
|
||||
为降低风控风险,**强烈建议长期保持非无头模式运行**。
|
||||
:::
|
||||
|
||||
## 多 Worker 登录
|
||||
|
||||
如果配置了多个 Worker,需要分别为每个 Worker 完成登录:
|
||||
|
||||
```bash
|
||||
# 依次登录各个 Worker
|
||||
npm start -- -login=worker1
|
||||
npm start -- -login=worker2
|
||||
```
|
||||
|
||||
::: info 共享登录状态
|
||||
同一 Instance(浏览器实例)下的多个 Worker 共享登录状态。如果使用 Google OAuth 等统一登录方式,只需登录一次即可。
|
||||
:::
|
||||
|
||||
## WebUI 登录模式
|
||||
|
||||
服务运行后,也可以通过 WebUI 切换到登录模式:
|
||||
|
||||
1. 访问 http://localhost:3000
|
||||
2. 进入「系统管理」页面
|
||||
3. 点击「重启」按钮的下拉箭头
|
||||
4. 选择「登录模式重启」或指定 Worker 登录
|
||||
|
||||
## 下一步
|
||||
|
||||
登录完成后,请阅读以下内容:
|
||||
|
||||
- [配置文件](/config/overview) - 了解完整配置选项
|
||||
- [API 参考](/api/overview) - 开始使用 API
|
||||
@@ -0,0 +1,79 @@
|
||||
# 环境要求
|
||||
|
||||
在开始部署 WebAI2API 之前,请确保您的环境满足以下要求。
|
||||
|
||||
## 系统要求
|
||||
|
||||
### 操作系统
|
||||
|
||||
- **Windows**: Windows 10/11 或 Windows Server 2016+
|
||||
- **Linux**: Ubuntu 18.04+, Debian 10+, CentOS 7+ 或其他主流发行版
|
||||
- **macOS**: macOS 10.15 (Catalina) 或更高版本
|
||||
|
||||
### 硬件配置
|
||||
|
||||
| 资源 | 最低配置 | 推荐配置(单实例) | 推荐配置(多实例) |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **CPU** | 1 核 | 2 核及以上 | 2 核及以上 |
|
||||
| **内存** | 1 GB | 2 GB 及以上 | 4 GB 及以上 |
|
||||
| **磁盘** | 2 GB 可用空间 | 5 GB 及以上 | 7 GB 及以上 |
|
||||
|
||||
::: tip 实测环境表现
|
||||
- **Oracle 免费机** (1C1G, Debian 12):资源紧张,比较卡顿,仅供尝鲜或轻度使用
|
||||
- **阿里云轻量云** (2C2G, Debian 11):运行流畅,项目开发测试所用机型
|
||||
:::
|
||||
|
||||
## 软件依赖
|
||||
|
||||
### Node.js
|
||||
|
||||
- **版本要求**: v20.0.0 或更高版本 (ABI 115+)
|
||||
- **包管理器**: pnpm (推荐) 或 npm
|
||||
|
||||
```bash
|
||||
# 检查 Node.js 版本
|
||||
node --version
|
||||
|
||||
# 安装 pnpm (如未安装)
|
||||
npm install -g pnpm
|
||||
```
|
||||
|
||||
### Camoufox
|
||||
|
||||
Camoufox 是本项目的核心依赖,会在安装过程中自动下载。
|
||||
|
||||
::: warning 网络要求
|
||||
安装过程需要从 GitHub 下载 Camoufox 等预编译依赖,请确保网络能够正常访问 GitHub。
|
||||
:::
|
||||
|
||||
## Docker 环境 (可选)
|
||||
|
||||
如果选择 Docker 部署方式,需要安装:
|
||||
|
||||
- **Docker**: 20.10.0 或更高版本
|
||||
- **Docker Compose**: 2.0.0 或更高版本 (可选)
|
||||
|
||||
```bash
|
||||
# 检查 Docker 版本
|
||||
docker --version
|
||||
docker compose version
|
||||
```
|
||||
|
||||
## Linux 特殊依赖
|
||||
|
||||
在 Linux 环境下运行非无头模式时,可能需要额外安装:
|
||||
|
||||
```bash
|
||||
# Ubuntu/Debian
|
||||
sudo apt-get install xvfb x11vnc
|
||||
|
||||
# CentOS/RHEL
|
||||
sudo yum install xorg-x11-server-Xvfb x11vnc
|
||||
|
||||
# Arch Linux
|
||||
sudo pacman -S xorg-server-xvfb x11vnc
|
||||
```
|
||||
|
||||
## 下一步
|
||||
|
||||
环境准备就绪后,请继续阅读 [快速部署](/guide/deployment) 开始安装。
|
||||
@@ -0,0 +1,31 @@
|
||||
---
|
||||
layout: home
|
||||
|
||||
hero:
|
||||
name: "WebAI2API"
|
||||
text: "网页版 AI 服务转 OpenAI 兼容 API"
|
||||
tagline: 基于 Camoufox (Playwright),模拟人类操作与 LMArena、Gemini 等网站交互
|
||||
actions:
|
||||
- theme: brand
|
||||
text: 快速开始
|
||||
link: /guide/deployment
|
||||
- theme: alt
|
||||
text: GitHub
|
||||
link: https://github.com/foxhui/WebAI2API
|
||||
image:
|
||||
src: /favicon.png
|
||||
|
||||
features:
|
||||
- icon: 🤖
|
||||
title: 拟人交互
|
||||
details: 模拟人类打字与鼠标轨迹,通过特征伪装规避自动化检测
|
||||
- icon: 🔄
|
||||
title: 接口兼容
|
||||
details: 提供标准 OpenAI 格式接口,支持流式响应与心跳保活
|
||||
- icon: 🚀
|
||||
title: 并发隔离
|
||||
details: 支持多窗口并发执行,实现多账号浏览器实例级数据隔离
|
||||
- icon: 🛡️
|
||||
title: 稳定防护
|
||||
details: 内置任务队列、负载均衡、故障转移、错误重试
|
||||
---
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 69 KiB |
Reference in New Issue
Block a user