Files
WebAI2API/README.md
T
2025-11-23 22:43:43 +08:00

376 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LMArenaImagenAutomator - 使用文档
## 📝 项目简介
LMArenaImagenAutomator 是一个基于 Puppeteer 的自动化图像生成工具,通过模拟人类操作与 LMArena 网站交互,提供图像生成服务。项目支持两种运行模式:
- **OpenAI 兼容模式**:提供标准的 OpenAI API 接口,便于集成到现有应用
- **Queue 队列模式**:使用 Server-Sent Events (SSE) 实时推送生成状态
### ✨ 主要特性
- 🎭 **拟人化操作**:使用贝塞尔曲线模拟真实鼠标移动轨迹
- 🤖 **智能输入**:模拟人类打字速度和错误纠正行为
- 🖼️ **多图支持**:最多支持同时上传 5 张参考图片
- 🔐 **安全认证**:基于 Bearer Token 的 API 鉴权
- 📊 **队列管理**:智能任务队列,防止请求过载
- 🌐 **代理支持**:支持 HTTP 和 SOCKS5 代理配置
---
## 🚀 快速开始
### 系统要求
- **Node.js**: 16.0 或更高版本
- **操作系统**: Windows、Linux 或 macOS
- **浏览器**: Google Chrome 或 Chromium (可选,Puppeteer 会自动下载)
### 安装步骤
1. **克隆项目**(如果从仓库获取)或解压项目文件
2. **安装依赖**
```bash
pnpm install
```
3. **生成 API 密钥**
```bash
npm run genkey
```
此命令会生成一个安全的随机密钥,请保存并配置到 `config.yaml` 中。
---
## ⚙️ 配置说明
### config.yaml 配置文件
配置文件位于项目根目录下的 `config.yaml`,包含以下主要配置项:
#### 服务器配置
```yaml
server:
# 运行模式: 'openai' (OpenAI 兼容) 或 'queue' (SSE 队列)
type: queue
# 监听端口
port: 3000
# API 鉴权密钥 (使用 npm run genkey 生成)
auth: sk-change-me-to-your-secure-key
```
#### 浏览器配置
```yaml
chrome:
# Chrome 可执行文件路径 (留空使用 Puppeteer 内置版本)
# Windows 示例: "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
# Linux 示例: "/usr/bin/chromium"
path: ""
# 是否启用无头模式 (true = 后台运行,false = 显示浏览器)
headless: false
# 是否启用 GPU 加速 (无显卡服务器设为 false)
gpu: false
```
#### 代理配置
```yaml
chrome:
proxy:
# 是否启用代理
enable: false
# 代理类型: 'http' 或 'socks5'
type: http
# 代理服务器地址
host: 127.0.0.1
# 代理端口
port: 7890
# 代理认证 (可选)
# user: username
# passwd: password
```
### 重要配置建议
| 配置项 | 建议值 | 说明 |
|-------|--------|------|
| `server.type` | `queue` | 使用队列模式可获得实时状态反馈 |
| `server.auth` | 强密钥 | 务必修改默认值,使用 `npm run genkey` 生成 |
| `chrome.headless` | `false` / `true` | 建议保持非无头模式(true已映射为new模式) |
| `chrome.gpu` | `false` / `true` | 无显卡环境强烈建议关闭 |
---
## 📖 使用方法
### 【重要】务必进行的步骤
- 第一次启动程序时必须关闭无头模式启动(**Linux无界面请看文档结尾**)
- 等待网页加载完毕后登录账号(否则会在使用几次后弹出登录界面阻止操作)
- 点击输入框输入任意内容点发送,等待弹出服务条款和CloudFlare Turnstile验证码
- 点击验证码并同意条款后再次点击发送,此时可能会弹出reCAPTCHA验证码,若出现也将其通过
- 后续可改为无头模式运行,但建议使用非无头模式避免频繁触发人机验证码
### 方式一:使用 HTTP API
**启动服务器**
```bash
npm start
```
#### OpenAI 兼容模式
> [!WARNING]
> 由于模拟真实用户的浏览器操作,一次只能进行一个任务,剩下的将会放入队列中等待,为防止客户端超时影响体验,该模式如果已经有3个任务时后来的任务将会直接返回错误代码,推荐使用Queue队列模式,服务器会向客户端发送心跳包以确保连接存活。
**配置文件设置**
```yaml
server:
type: openai
port: 3000
auth: your-secret-key
```
**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 '{
"messages": [
{
"type": "text",
"text": "generate a cat"
}
]
}'
```
**响应格式**
```json
{
"id": "chatcmpl-1732374740123",
"object": "chat.completion",
"created": 1732374740,
"model": "lmarena-image",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "![generated](data:image/jpeg;base64,/9j/4AAQ...)"
},
"finish_reason": "stop"
}]
}
```
#### Queue 队列模式(SSE)(推荐)
**配置文件设置**
```yaml
server:
type: queue
```
**请求端点**
```
POST http://127.0.0.1:3000/v1/queue/join
```
**SSE 事件类型**
| 事件类型 | 数据格式 | 说明 |
|---------|---------|------|
| `status` | `{status: "queued", position: 1}` | 任务已入队 |
| `status` | `{status: "processing"}` | 开始处理 |
| `result` | `{status: "completed", image: "base64..."}` | 生成成功 |
| `result` | `{status: "error", msg: "错误信息"}` | 生成失败 |
| `heartbeat` | 时间戳 | 保持连接 |
| `done` | `"[DONE]"` | 流结束 |
**Node.js 示例代码**
```javascript
import http from 'http';
const options = {
hostname: '127.0.0.1',
port: 3000,
path: '/v1/queue/join',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer your-secret-key'
}
};
const req = http.request(options, (res) => {
res.on('data', (chunk) => {
const lines = chunk.toString().split('\n');
for (const line of lines) {
if (line.startsWith('event: ')) {
const event = line.substring(7).trim();
console.log('事件类型:', event);
} else if (line.startsWith('data: ')) {
const data = JSON.parse(line.substring(6));
console.log('数据:', data);
}
}
});
});
req.write(JSON.stringify({
messages: [{ role: "user", content: "a cute cat" }]
}));
req.end();
```
#### 带图片的请求
**支持格式**PNG、JPEG、GIF、WebP
**最大数量**5 张图片
**数据格式**Base64 编码
**请求示例**
```json
{
"messages": [{
"role": "user",
"content": [
{
"type": "text",
"text": "make it more colorful"
},
{
"type": "image_url",
"image_url": {
"url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAA..."
}
}
]
}]
}
```
### 方式二:使用CLI客户端脚本
**启动CLI工具**
```bash
npm test
```
根据指引填写图片路径和提示词即可
---
## 📁 项目结构
```
lmarena/
├── server.js # HTTP 服务器 (主入口)
├── config.yaml # 配置文件
├── package.json # 项目依赖
├── lib/
│ ├── lmarena.js # 核心生图逻辑 (Puppeteer 操作)
│ ├── config.js # 配置加载器
│ ├── genApiKey.js # API 密钥生成工具
│ └── test.js # 功能测试脚本
└── data/
├── chromeUserData/ # Chrome 用户数据 (自动创建)
└── temp/ # 临时图片存储
```
---
## 🔧 常见问题
### 浏览器启动失败
**问题**: `Error: Failed to launch the browser process`
**解决方案**:
- 确保已安装 Chrome 或 Chromium
- 检查 `config.yaml` 中的 `chrome.path` 是否正确
- 尝试删除 `data/chromeUserData` 目录后重新运行
### GPU 相关错误
**问题**: 无显卡服务器运行时出现 GPU 错误
**解决方案**:
- 该报错并不会影响程序运行,但是强烈建议在无显卡的设备上关闭GPU加速
```yaml
chrome:
gpu: false # 禁用 GPU 加速
```
### 请求被拒绝 (429 Too Many Requests)
**问题**: 并发请求过多
**解决方案**:
- 该问题仅存在于OpenAI兼容模式
- 当前限制:1 个并发 + 2 个排队 (总计 3 个)
- 修改 `server.js` 中的 `MAX_CONCURRENT` 和 `MAX_QUEUE_SIZE` (不建议,应为大多数客户端HTTP请求是有超时时间的)
- 等待当前任务完成后再提交新任务
### reCAPTCHA 验证失败
**问题**: 返回 `recaptcha validation failed`
**解决方案**:
- 这是 LMArena 的人机验证机制
- 建议:
- 降低请求频率
- 首次使用时手动完成一次验证 (关闭 headless 模式)
- 使用稳定和纯净的 IP 地址 (可使用 ping0.cc 查询IP地址纯净度)
### 图像生成超时
**问题**: 任务超过 120 秒未完成
**解决方案**:
- 检查网络连接是否稳定
- 某些复杂提示词可能需要更长时间
### Linux下关闭无头模式运行
**问题**: 在Linux多用户模式下无界面运行浏览器
**解决方案**:
方法一:X11转发(适用于后续无头模式运行)
- 推荐使用WindTerm开启右上角X-Server
- 在会话设置中的X11栏目中改为 “内部X11显示”
方法二:Xvfb+X11VNC(推荐)
- 使用xvfb创建虚拟显示器运行该程序,并且将虚拟显示器映射到VNC中便于后续管理(因为在后续使用中可能还会弹出reCAPTCHA验证码需要手动通过)
- 创建虚拟显示器并运行程序 (99为屏幕号,冲突可行更改)
```
xvfb-run --server-num=99 --server-args="-ac -screen 0 1280x720x16" npm start
```
- 将虚拟显示器映射至VNC
```
x11vnc -display :99 -localhost -nopw -once -noxdamage -ncache 10
```
- 后续可用RealVNC等程序通过5900端口连接(推荐使用SSH隧道转发不将VNC直接暴露在公网,然后VNC连接127.0.0.1
```
ssh -L 5900:127.0.0.1:5900 root@服务器IP
```
---
## 📊 配置建议
| 资源 | 最低配置 | 推荐配置 |
|------|---------|---------|
| CPU | 1核 | 2核及以上 |
| 内存 | 1GB | 2GB 及以上 |
参考:经测试可以在Oracle的1G1C免费机Debian环境下运行
## 📄 许可证
本项目仅供学习和研究使用,请遵守 LMArena.ai 的使用条款。
---
**感谢使用 LMArena 图像生成服务!** 🎉