拟人交互
模拟人类打字与鼠标轨迹,通过特征伪装规避自动化检测
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..a172e21 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,69 @@ +name: Deploy VitePress site to Pages + +on: + # 在推送到 main 分支时触发 + push: + branches: + - main + + # 允许手动触发工作流 + workflow_dispatch: + +# 设置 GITHUB_TOKEN 的权限以允许部署到 GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# 只允许一个并发部署,跳过正在进行的运行和最新排队的运行之间的运行 +concurrency: + group: pages + cancel-in-progress: false + +jobs: + # 构建任务 + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 # 如果未启用 lastUpdated,则不需要 + + - name: Setup pnpm + uses: pnpm/action-setup@v3 + with: + version: 8 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: pnpm + + - name: Setup Pages + uses: actions/configure-pages@v4 + + - name: Install dependencies + run: pnpm install + + - name: Build with VitePress + run: pnpm run docs:build + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: dist + + # 部署任务 + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + needs: build + runs-on: ubuntu-latest + name: Deploy + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index 40b878d..afca971 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ -node_modules/ \ No newline at end of file +node_modules/ +dist/ +.vitepress/dist/ +.vitepress/cache/ \ No newline at end of file diff --git a/.vitepress/config.js b/.vitepress/config.js index 1f1aef6..e96d1e5 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -3,6 +3,7 @@ import { defineConfig } from 'vitepress' export default defineConfig({ srcDir: "docs", outDir: "dist", + base: '/WebAI2API/', lang: 'zh-CN', title: "WebAI2API", diff --git a/dist/404.html b/dist/404.html deleted file mode 100644 index 4012648..0000000 --- a/dist/404.html +++ /dev/null @@ -1,23 +0,0 @@ - - -
- - -在 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/dist/assets/admin_linux.md.C4pirr1w.lean.js b/dist/assets/admin_linux.md.C4pirr1w.lean.js deleted file mode 100644 index 6ed52f3..0000000 --- a/dist/assets/admin_linux.md.C4pirr1w.lean.js +++ /dev/null @@ -1 +0,0 @@ -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/dist/assets/admin_troubleshooting.md.BdBPvYAx.js b/dist/assets/admin_troubleshooting.md.BdBPvYAx.js deleted file mode 100644 index 89f827c..0000000 --- a/dist/assets/admin_troubleshooting.md.BdBPvYAx.js +++ /dev/null @@ -1,2 +0,0 @@ -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/dist/assets/config_overview.md.-rOn3l_p.lean.js b/dist/assets/config_overview.md.-rOn3l_p.lean.js
deleted file mode 100644
index a97526a..0000000
--- a/dist/assets/config_overview.md.-rOn3l_p.lean.js
+++ /dev/null
@@ -1 +0,0 @@
-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/dist/assets/config_proxy.md.B7kjsU6e.js b/dist/assets/config_proxy.md.B7kjsU6e.js
deleted file mode 100644
index cc2f7c2..0000000
--- a/dist/assets/config_proxy.md.B7kjsU6e.js
+++ /dev/null
@@ -1,28 +0,0 @@
-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/dist/assets/guide_introduction.md.D7_DJb6Y.lean.js b/dist/assets/guide_introduction.md.D7_DJb6Y.lean.js
deleted file mode 100644
index 390ca16..0000000
--- a/dist/assets/guide_introduction.md.D7_DJb6Y.lean.js
+++ /dev/null
@@ -1 +0,0 @@
-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/dist/assets/guide_requirements.md.ettCHBZs.js b/dist/assets/guide_requirements.md.ettCHBZs.js
deleted file mode 100644
index 99b7dbd..0000000
--- a/dist/assets/guide_requirements.md.ettCHBZs.js
+++ /dev/null
@@ -1,14 +0,0 @@
-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下一步