拟人交互
模拟人类打字与鼠标轨迹,通过特征伪装规避自动化检测
diff --git a/.vitepress/cache/deps/_metadata.json b/.vitepress/cache/deps/_metadata.json index fc31e02..24bdc19 100644 --- a/.vitepress/cache/deps/_metadata.json +++ b/.vitepress/cache/deps/_metadata.json @@ -1,25 +1,25 @@ { - "hash": "08caf282", - "configHash": "6337dd35", + "hash": "fd744d6e", + "configHash": "f73de511", "lockfileHash": "5344cd3e", - "browserHash": "89c2052f", + "browserHash": "25f5b819", "optimized": { "vue": { "src": "../../../node_modules/.pnpm/vue@3.5.26/node_modules/vue/dist/vue.runtime.esm-bundler.js", "file": "vue.js", - "fileHash": "450708e5", + "fileHash": "420d640f", "needsInterop": false }, "vitepress > @vue/devtools-api": { "src": "../../../node_modules/.pnpm/@vue+devtools-api@8.0.5/node_modules/@vue/devtools-api/dist/index.js", "file": "vitepress___@vue_devtools-api.js", - "fileHash": "107c6593", + "fileHash": "b88b7e99", "needsInterop": false }, "vitepress > @vueuse/core": { "src": "../../../node_modules/.pnpm/@vueuse+core@14.1.0_vue@3.5.26/node_modules/@vueuse/core/dist/index.js", "file": "vitepress___@vueuse_core.js", - "fileHash": "c6610847", + "fileHash": "2f71f1c1", "needsInterop": false } }, diff --git a/.vitepress/config.js b/.vitepress/config.js index 5e9157e..41b8198 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -11,6 +11,10 @@ export default defineConfig({ ['link', { rel: 'icon', href: '/favicon.png' }] ], + ignoreDeadLinks: [ + /^http:\/\/localhost/ + ], + themeConfig: { nav: [ { text: '首页', link: '/' }, @@ -22,6 +26,7 @@ export default defineConfig({ { text: '入门指南', items: [ + { text: '项目介绍', link: '/guide/introduction' }, { text: '环境要求', link: '/guide/requirements' }, { text: '快速部署', link: '/guide/deployment' }, { text: '首次使用', link: '/guide/first-use' } diff --git a/.vitepress/dist/404.html b/.vitepress/dist/404.html new file mode 100644 index 0000000..4012648 --- /dev/null +++ b/.vitepress/dist/404.html @@ -0,0 +1,23 @@ + + +
+ + +在 Linux 服务器上运行 WebAI2API 的特殊配置说明。
在 Linux 服务器上运行非无头模式时,需要配置显示环境。
使用虚拟显示器运行程序,通过 VNC 远程查看。
npm start -- -xvfb -vnc这会自动:
如果内置命令无法满足需求:
xvfb-run --server-num=99 --server-args="-ac -screen 0 1920x1080x24" npm startx11vnc -display :99 -localhost -nopw -forever -noxdamage# 本地终端
+ssh -L 5900:127.0.0.1:5900 root@服务器IP然后使用 VNC 客户端连接 127.0.0.1:5900。
服务启动后,访问 WebUI 的「VNC 显示」页面即可直接查看。
sudo apt-get update
+sudo apt-get install xvfb x11vncsudo yum install xorg-x11-server-Xvfb x11vncsudo pacman -S xorg-server-xvfb x11vnc适用于通过 SSH 连接服务器的场景。
ssh -X user@serverDocker 镜像已内置 Xvfb 和 VNC 支持:
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 服务器冲突。
`,42)])])}const o=s(l,[["render",n]]);export{F as __pageData,o as default}; diff --git a/.vitepress/dist/assets/admin_linux.md.C4pirr1w.lean.js b/.vitepress/dist/assets/admin_linux.md.C4pirr1w.lean.js new file mode 100644 index 0000000..6ed52f3 --- /dev/null +++ b/.vitepress/dist/assets/admin_linux.md.C4pirr1w.lean.js @@ -0,0 +1 @@ +import{_ as s,c as a,o as h,ah as e}from"./chunks/framework.BJEpWshW.js";const F=JSON.parse('{"title":"Linux 部署","description":"","frontmatter":{},"headers":[],"relativePath":"admin/linux.md","filePath":"admin/linux.md"}'),l={name:"admin/linux.md"};function n(t,i,k,r,p,d){return h(),a("div",null,[...i[0]||(i[0]=[e("",42)])])}const o=s(l,[["render",n]]);export{F as __pageData,o as default}; diff --git a/.vitepress/dist/assets/admin_troubleshooting.md.BdBPvYAx.js b/.vitepress/dist/assets/admin_troubleshooting.md.BdBPvYAx.js new file mode 100644 index 0000000..89f827c --- /dev/null +++ b/.vitepress/dist/assets/admin_troubleshooting.md.BdBPvYAx.js @@ -0,0 +1,2 @@ +import{_ as e,c as i,o as l,ah as r}from"./chunks/framework.BJEpWshW.js";const g=JSON.parse('{"title":"故障排查","description":"","frontmatter":{},"headers":[],"relativePath":"admin/troubleshooting.md","filePath":"admin/troubleshooting.md"}'),t={name:"admin/troubleshooting.md"};function s(o,a,n,h,d,c){return l(),i("div",null,[...a[0]||(a[0]=[r(`常见问题的诊断和解决方法。
问题:并发请求过多,队列已满。
解决方案:
stream: true),可无限排队queue.queueBuffer 配置值问题:任务超过 120 秒未完成。
解决方案:
问题:返回 recaptcha validation failed。
解决方案:
问题:浏览器卡在 CloudFlare 验证页面。
解决方案:
问题:服务重启后需要重新登录。
解决方案:
data 目录持久化userDataMark 配置是否正确问题:Google 等 OAuth 登录跳转失败。
解决方案:
问题:Camoufox 无法启动。
解决方案:
# 重新初始化 Camoufox
+npm run init问题:浏览器因内存不足崩溃。
解决方案:
--shm-size=2gb问题:无法连接到代理服务器。
解决方案:
问题:无法访问 LMArena/Gemini 等网站。
解决方案:
在 config.yaml 中设置日志等级:
logLevel: debug| 日志内容 | 说明 |
|---|---|
工作池初始化失败 | 检查配置文件和网络 |
Worker 不支持模型 | 检查模型名称是否正确 |
验证超时 | 需要手动完成验证 |
页面已关闭 | 浏览器可能崩溃 |
如果以上方法无法解决问题:
logLevel: debug)WebAI2API 提供了内置的 Web 管理界面,用于监控和管理服务。
注意
WebUI 以及管理接口仅在握手阶段使用 API Token 验证,传输阶段无任何加密,如果您在公网环境使用,请使用 Caddy 或 Nginx 等专业的网站服务器对连接进行 HTTPS 加密!
http://localhost:3000首次访问需要输入配置文件中设置的 API Token 进行认证。
仪表盘页面显示系统运行状态:
系统管理页面提供:
服务控制
缓存管理
数据管理
在 Linux 环境下使用 -xvfb -vnc 启动时,可以通过 WebUI 直接查看和操作虚拟显示器:
说明
VNC 显示功能需要服务以 Xvfb + VNC 模式运行。
管理浏览器实例和 Worker 配置(需要重启生效)。
-login 参数重启对话生成接口,兼容 OpenAI Chat Completions API。
POST /v1/chat/completions| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | ✅ | 模型名称 |
messages | array | ✅ | 消息列表 |
stream | boolean | ❌ | 是否启用流式响应(推荐开启) |
{
+ "messages": [
+ {
+ "role": "user",
+ "content": "生成一只可爱的猫"
+ }
+ ]
+}{
+ "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 格式 |
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"
+ }
+ ]
+ }'{
+ "id": "chatcmpl-1732374740123",
+ "object": "chat.completion",
+ "created": 1732374740,
+ "model": "gemini-3-pro-image-preview",
+ "choices": [
+ {
+ "index": 0,
+ "message": {
+ "role": "assistant",
+ "content": ""
+ },
+ "finish_reason": "stop"
+ }
+ ]
+}推荐使用
流式模式包含心跳保活机制,可以避免长时间生成导致的连接超时。
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]{
+ "error": {
+ "message": "队列已满",
+ "type": "rate_limit_exceeded",
+ "code": "QUEUE_FULL"
+ }
+}解决方案
启用流式模式 (stream: true) 可以无限排队,避免 429 错误。
{
+ "error": {
+ "message": "没有 Worker 支持模型: invalid-model",
+ "type": "invalid_request_error",
+ "code": "MODEL_NOT_FOUND"
+ }
+}获取浏览器实例的 Cookie,可用于其他工具。
GET /v1/cookies| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | ❌ | 浏览器实例名称 |
domain | string | ❌ | 过滤指定域名的 Cookie |
curl -X GET http://localhost:3000/v1/cookies \\
+ -H "Authorization: Bearer sk-your-key"curl -X GET "http://localhost:3000/v1/cookies?name=browser_default&domain=lmarena.ai" \\
+ -H "Authorization: Bearer sk-your-key"{
+ "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"
+ }
+ ]
+}应用场景
获取当前可用的模型列表。
GET /v1/modelscurl -X GET http://localhost:3000/v1/models \\
+ -H "Authorization: Bearer sk-your-key"{
+ "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 | 文本生成模型 |
说明
返回的模型列表取决于当前配置的 Worker 和适配器类型。
WebAI2API 提供兼容 OpenAI 格式的 RESTful API。
http://localhost:3000Authorization: Bearer sk-your-secret-key
+Content-Type: application/json| 方法 | 端点 | 说明 |
|---|---|---|
| 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 错误返回统一格式:
{
+ "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]心跳保活
流式请求会自动发送心跳包防止连接超时,格式取决于配置的 keepalive.mode。
U?jt(u,_,S,!0,!1,P):G(d,m,E,_,S,O,A,C,P)},ht=(u,d,m,E,_,S,O,A,C)=>{let x=0;const U=d.length;let P=u.length-1,$=U-1;for(;x<=P&&x<=$;){const q=u[x],J=d[x]=C?it(d[x]):Ie(d[x]);if(yt(q,J))I(q,J,m,null,_,S,O,A,C);else break;x++}for(;x<=P&&x<=$;){const q=u[P],J=d[$]=C?it(d[$]):Ie(d[$]);if(yt(q,J))I(q,J,m,null,_,S,O,A,C);else break;P--,$--}if(x>P){if(x<=$){const q=$+1,J=q$)for(;x<=P;)Ve(u[x],_,S,!0),x++;else{const q=x,J=x,re=new Map;for(x=J;x<=$;x++){const Te=d[x]=C?it(d[x]):Ie(d[x]);Te.key!=null&&re.set(Te.key,x)}let te,Se=0;const he=$-J+1;let Fe=!1,Ee=0;const Vt=new Array(he);for(x=0;x 实例 (Instance) 和工作者 (Worker) 是 WebAI2API 的核心配置概念。 一个 Instance 代表一个独立的浏览器进程,具有: Worker 是 Instance 内的一个标签页,负责与特定平台交互。同一 Instance 下的多个 Worker: 聚合模式允许在单个标签页中支持多个后端,实现故障转移: 聚合模式优势 WebAI2API 使用 YAML 格式的配置文件 注意 项目的配置问价已可以完全使用 WebUI 进行配置,若您不了解 YAML 文件,请直接略过该板块访问 WebUI 修改配置! 心跳模式说明 WebAI2API 支持全局代理和实例级代理配置。 在 在 Instance 中配置专属代理: 如果需要某个实例强制直连,即使配置了全局代理: 推荐配置 注意事项 本项目支持 手动部署(推荐) 和 Docker 容器化部署 两种方式。 注意 编辑 特别说明 登录相关操作可以在 WebUI 的虚拟显示器板块进行,也可通过 RealVNC 等工具连接(需添加映射 VNC 端口,默认非被占用的情况下为 5900) 启动服务: 服务启动后,访问以下地址验证: 部署完成后,请阅读 首次使用 完成登录初始化。 首次使用 WebAI2API 时,需要完成登录初始化才能正常使用。 登录模式会强制关闭无头模式 Linux 服务器用户可以使用 Xvfb + VNC 方式: 然后通过 VNC 客户端连接 登录账号 完成验证 验证成功 运行建议 如果配置了多个 Worker,需要分别为每个 Worker 完成登录: 共享登录状态 同一 Instance(浏览器实例)下的多个 Worker 共享登录状态。如果使用 Google OAuth 等统一登录方式,只需登录一次即可。 服务运行后,也可以通过 WebUI 切换到登录模式: 登录完成后,请阅读以下内容: WebAI2API 是一个基于 Camoufox (Playwright) 的网页版 AI 服务转通用 API 的工具。通过模拟人类操作与 LMArena、Gemini 等网站交互,提供兼容 OpenAI 格式 的接口服务,同时支持 多窗口并发 与 多账号管理(浏览器实例数据隔离)。 未来可能会支持更多网站... 在开始部署 WebAI2API 之前,请确保您的环境满足以下要求。 实测环境表现 Camoufox 是本项目的核心依赖,会在安装过程中自动下载。 网络要求 安装过程需要从 GitHub 下载 Camoufox 等预编译依赖,请确保网络能够正常访问 GitHub。 如果选择 Docker 部署方式,需要安装: 在 Linux 环境下运行非无头模式时,可能需要额外安装: 环境准备就绪后,请继续阅读 快速部署 开始安装。实例配置
概念说明
Instance (浏览器实例)
Worker (工作者)
配置结构
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_isInstance 配置项
配置项 类型 必填 说明 namestring ✅ 实例唯一标识,用于日志和 Cookie 获取 userDataMarkstring ❌ 数据目录标识,留空使用默认目录 proxyobject ❌ 实例级代理配置,参见代理设置 workersarray ✅ Worker 配置列表 数据目录
data/camoufoxUserDatauserDataMark 后: data/camoufoxUserData_{mark}Worker 配置项
配置项 类型 必填 说明 namestring ✅ Worker 唯一标识(全局唯一) typestring ✅ 适配器类型 mergeTypesarray ❌ 聚合模式的适配器列表 (type=merge 时必填) mergeMonitorstring ❌ 空闲时监控的后端 (可选) 适配器类型
类型 说明 lmarenaLMArena 图片生成 lmarena_textLMArena 文本生成 gemini_bizGemini Business 图片生成 gemini_biz_textGemini Business 文本生成 geminiGoogle Gemini zai_iszAI 图片生成 nanobananafree_aiNano Banana Free merge聚合模式(单标签多后端) 聚合模式 (Merge)
workers:
+ - name: "merged_worker"
+ type: merge
+ mergeTypes: [gemini_biz, lmarena, zai_is]
+ mergeMonitor: gemini_biz # 空闲时挂机监控的后端配置示例
单实例单 Worker
instances:
+ - name: "default"
+ workers:
+ - name: "worker1"
+ type: lmarena多实例隔离
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聚合模式
instances:
+ - name: "browser_merged"
+ workers:
+ - name: "all_in_one"
+ type: merge
+ mergeTypes: [gemini_biz, lmarena, zai_is]
+ mergeMonitor: gemini_biz配置文件概览、
config.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配置项说明
日志配置
配置项 类型 默认值 说明 logLevelstring info日志等级: debug、info、warn、error服务器配置 (server)
配置项 类型 默认值 说明 portnumber 3000HTTP 服务监听端口 authstring - API 鉴权 Token (Bearer Token) keepalive.modestring comment心跳模式: comment 或 content:keepalive 注释,不污染数据(推荐)队列配置 (queue)
配置项 类型 默认值 说明 queueBuffernumber 2非流式请求的额外排队数,0 表示不限制 imageLimitnumber 5单次请求最大图片数量 (最大 10) 浏览器配置 (browser)
配置项 类型 默认值 说明 pathstring ""Camoufox 可执行文件路径,留空使用默认 headlessboolean false是否启用无头模式 proxyobject - 全局代理配置 相关文档
`,17)])])}const c=i(e,[["render",l]]);export{E as __pageData,c as default};
diff --git a/.vitepress/dist/assets/config_overview.md.-rOn3l_p.lean.js b/.vitepress/dist/assets/config_overview.md.-rOn3l_p.lean.js
new file mode 100644
index 0000000..a97526a
--- /dev/null
+++ b/.vitepress/dist/assets/config_overview.md.-rOn3l_p.lean.js
@@ -0,0 +1 @@
+import{_ as i,c as a,o as t,ah as n}from"./chunks/framework.BJEpWshW.js";const E=JSON.parse('{"title":"配置文件概览、","description":"","frontmatter":{},"headers":[],"relativePath":"config/overview.md","filePath":"config/overview.md"}'),e={name:"config/overview.md"};function l(h,s,d,p,k,r){return t(),a("div",null,[...s[0]||(s[0]=[n("",17)])])}const c=i(e,[["render",l]]);export{E as __pageData,c as default};
diff --git a/.vitepress/dist/assets/config_proxy.md.B7kjsU6e.js b/.vitepress/dist/assets/config_proxy.md.B7kjsU6e.js
new file mode 100644
index 0000000..cc2f7c2
--- /dev/null
+++ b/.vitepress/dist/assets/config_proxy.md.B7kjsU6e.js
@@ -0,0 +1,28 @@
+import{_ as i,c as a,o as t,ah as n}from"./chunks/framework.BJEpWshW.js";const o=JSON.parse('{"title":"代理设置","description":"","frontmatter":{},"headers":[],"relativePath":"config/proxy.md","filePath":"config/proxy.md"}'),l={name:"config/proxy.md"};function h(e,s,k,p,r,d){return t(),a("div",null,[...s[0]||(s[0]=[n(`代理设置
代理优先级
全局代理配置
browser.proxy 中配置全局代理:browser:
+ proxy:
+ enable: true
+ type: http # http 或 socks5
+ host: 127.0.0.1
+ port: 7890
+ # 可选认证
+ user: username
+ passwd: password实例级代理配置
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配置项说明
配置项 类型 必填 说明 enableboolean ✅ 是否启用代理 typestring ✅ 代理类型: http 或 socks5hoststring ✅ 代理服务器地址 portnumber ✅ 代理服务器端口 userstring ❌ 代理认证用户名 passwdstring ❌ 代理认证密码 强制直连
instances:
+ - name: "browser_direct"
+ proxy:
+ enable: false # 显式禁用代理
+ workers:
+ - name: "direct_worker"
+ type: lmarena代理选型建议
快速部署
手动部署
1. 克隆项目
git clone https://github.com/foxhui/WebAI2API.git
+cd WebAI2API2. 复制配置文件
cp config.example.yaml config.yaml3. 安装依赖
# 安装 Node.js 依赖
+pnpm install
+
+# 初始化预编译依赖
+npm run initnpm run init 需要从 GitHub 下载文件,请确保网络畅通。4. 编辑配置
config.yaml 文件,设置鉴权密钥等配置:server:
+ port: 3000
+ auth: sk-your-secret-key # 修改为你的密钥5. 启动服务
# 标准运行
+npm start
+
+# Linux 命令行启动
+npm start -- -xvfb -vncDocker 部署
Docker CLI
docker run -d --name webai-2api \\
+ -p 3000:3000 \\
+ -v "$(pwd)/data:/app/data" \\
+ --shm-size=2gb \\
+ foxhui/webai-2api:latestDocker Compose
services:
+ webai-2api:
+ image: foxhui/webai-2api:latest
+ container_name: webai-2api
+ restart: unless-stopped
+ ports:
+ - "3000:3000"
+ volumes:
+ - ./data:/app/data
+ shm_size: '2gb'
+ init: truedocker compose up -d验证安装
下一步
首次使用
登录模式
启动登录模式
# 启动第一个 Worker 进行登录
+npm start -- -login
+
+# 启动指定 Worker 进行登录
+npm start -- -login=workerNameLinux 用户特殊说明
npm start -- -xvfb -vnc:5900 端口进行操作(也可使用 WebUI 中的虚拟显示器板块)初始化步骤
npm start -- -xvfb -vnc 启动程序,然后使用 WebUI 或者第三方工具连接 VNCCtrl+C 退出登录模式# SSH隧道方法:在本地终端运行,将服务器 5900 端口映射到本地
+ssh -L 5900:127.0.0.1:5900 root@服务器IP多 Worker 登录
# 依次登录各个 Worker
+npm start -- -login=worker1
+npm start -- -login=worker2WebUI 登录模式
下一步
WebAI2API
📝 项目简介
📋 当前支持列表
网站名称 文本支持 图片支持 LMArena ✅ ✅ Gemini Enterprise Business ✅ ✅ Nano Banana Free ❌ ✅ zAI ❌ ✅ Google Gemini ❌ ✅
',7)])])}const b=e(l,[["render",s]]);export{f as __pageData,b as default};
diff --git a/.vitepress/dist/assets/guide_introduction.md.D7_DJb6Y.lean.js b/.vitepress/dist/assets/guide_introduction.md.D7_DJb6Y.lean.js
new file mode 100644
index 0000000..390ca16
--- /dev/null
+++ b/.vitepress/dist/assets/guide_introduction.md.D7_DJb6Y.lean.js
@@ -0,0 +1 @@
+import{_ as e,c as r,o as a,ah as n}from"./chunks/framework.BJEpWshW.js";const f=JSON.parse('{"title":"WebAI2API","description":"","frontmatter":{},"headers":[],"relativePath":"guide/introduction.md","filePath":"guide/introduction.md"}'),l={name:"guide/introduction.md"};function s(i,t,o,d,g,c){return a(),r("div",null,[...t[0]||(t[0]=[n("",7)])])}const b=e(l,[["render",s]]);export{f as __pageData,b as default};
diff --git a/.vitepress/dist/assets/guide_requirements.md.ettCHBZs.js b/.vitepress/dist/assets/guide_requirements.md.ettCHBZs.js
new file mode 100644
index 0000000..99b7dbd
--- /dev/null
+++ b/.vitepress/dist/assets/guide_requirements.md.ettCHBZs.js
@@ -0,0 +1,14 @@
+import{_ as i,c as a,o as t,ah as e}from"./chunks/framework.BJEpWshW.js";const g=JSON.parse('{"title":"环境要求","description":"","frontmatter":{},"headers":[],"relativePath":"guide/requirements.md","filePath":"guide/requirements.md"}'),l={name:"guide/requirements.md"};function n(h,s,r,d,p,k){return t(),a("div",null,[...s[0]||(s[0]=[e(`环境要求
系统要求
操作系统
硬件配置
资源 最低配置 推荐配置(单实例) 推荐配置(多实例) CPU 1 核 2 核及以上 2 核及以上 内存 1 GB 2 GB 及以上 4 GB 及以上 磁盘 2 GB 可用空间 5 GB 及以上 7 GB 及以上 软件依赖
Node.js
# 检查 Node.js 版本
+node --version
+
+# 安装 pnpm (如未安装)
+npm install -g pnpmCamoufox
Docker 环境 (可选)
# 检查 Docker 版本
+docker --version
+docker compose versionLinux 特殊依赖
# 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下一步