Refactor code structure for improved readability and maintainability

This commit is contained in:
cita
2026-03-10 16:38:21 +08:00
parent 8a3ab0f625
commit 15ea4db4d9
15 changed files with 85 additions and 240 deletions
+3 -40
View File
@@ -391,46 +391,9 @@ For Docker Compose, desktop installers, reverse proxy, upgrades, and database op
| `BALANCE_REFRESH_CRON` | Balance refresh cron expression | `0 * * * *` |
<details>
<summary><strong>Smart Routing Parameters</strong></summary>
<summary><strong>Smart Routing, Notification & Security Configuration</strong></summary>
| Variable | Description | Default |
| --- | --- | --- |
| `ROUTING_FALLBACK_UNIT_COST` | Default unit price when no cost signal | `1` |
| `BASE_WEIGHT_FACTOR` | Base weight factor | `0.5` |
| `VALUE_SCORE_FACTOR` | Value score factor | `0.5` |
| `COST_WEIGHT` | Cost weight in routing selection | `0.4` |
| `BALANCE_WEIGHT` | Balance weight in routing selection | `0.3` |
| `USAGE_WEIGHT` | Usage weight in routing selection | `0.3` |
</details>
<details>
<summary><strong>Notification Channel Configuration</strong></summary>
| Variable | Description | Default |
| --- | --- | --- |
| `WEBHOOK_ENABLED` | Enable Webhook notifications | `true` |
| `WEBHOOK_URL` | Webhook push URL | empty |
| `BARK_ENABLED` | Enable Bark push | `true` |
| `BARK_URL` | Bark push URL | empty |
| `SERVERCHAN_ENABLED` | Enable ServerChan notifications | `true` |
| `SERVERCHAN_KEY` | ServerChan SendKey | empty |
| `SMTP_ENABLED` | Enable email notifications | `false` |
| `SMTP_HOST` | SMTP server address | empty |
| `SMTP_PORT` | SMTP port | `587` |
| `SMTP_SECURE` | Use SSL/TLS | `false` |
| `SMTP_USER` / `SMTP_PASS` | SMTP authentication | empty |
| `SMTP_FROM` / `SMTP_TO` | Sender / recipient | empty |
| `NOTIFY_COOLDOWN_SEC` | Same-alert cooldown (seconds) | `300` |
</details>
<details>
<summary><strong>Security Configuration</strong></summary>
| Variable | Description | Default |
| --- | --- | --- |
| `ADMIN_IP_ALLOWLIST` | Admin API IP allowlist (comma-separated) | empty (no restriction) |
See [docs/configuration.md](docs/configuration.md) for full details on smart routing parameters, notification channels (Webhook / Bark / ServerChan / Telegram / SMTP), and security settings (IP allowlist).
</details>
@@ -460,7 +423,7 @@ Include `Authorization: Bearer <PROXY_TOKEN>` in request headers.
The global `PROXY_TOKEN` works by default.
From `System Settings -> Downstream API Key Strategy` you can create multiple project-level downstream keys with individual configuration:
- Expiration time (ExpireAt)
- Expiration time (expiresAt)
- Cost and request limits (MaxCost / MaxRequests)
- Model allowlist (SupportedModels, supports exact/glob/re:regex)
- Route allowlist (AllowedRouteIds)
+3 -32
View File
@@ -142,18 +142,9 @@ base_url = "https://your-domain.com/v1"
## 下游 API Key 策略
除了全局 `PROXY_TOKEN`,你还可以在 **系统设置 → 下游 API Key 策略** 中创建多个项目级下游 Key,每个 Key 可独立配置:
除了全局 `PROXY_TOKEN`,你还可以创建多个项目级下游 Key,每个 Key 可独立配置过期时间、费用/请求上限、模型白名单、路由白名单和站点倍率,适用于多团队/多项目共用一个 Metapi 实例的场景。
| 配置项 | 说明 |
|--------|------|
| **过期时间**(ExpiresAt) | Key 到期后自动失效 |
| **费用上限**(MaxCost) | 累计消费超限后拒绝请求 |
| **请求上限**(MaxRequests) | 累计请求数超限后拒绝请求 |
| **模型白名单**(SupportedModels) | 限制可用模型,支持 exact / glob / `re:regex` |
| **路由白名单**(AllowedRouteIds) | 限制可走的路由规则 |
| **站点倍率**(SiteWeightMultipliers) | 按站点调整路由权重,控制上游偏好 |
适用于多团队/多项目共用一个 Metapi 实例但需要独立计量和权限控制的场景。
详细字段说明见 [配置说明 → 下游 API Key 策略](./configuration.md#下游-api-key-策略)。
---
@@ -187,27 +178,7 @@ curl -sS https://your-domain.com/v1/chat/completions \
## 常见问题
### 流式响应异常
如果非流式正常但流式异常,原因几乎都是反向代理配置问题:
1. Nginx 未设置 `proxy_buffering off`
2. CDN 或中间层缓存了 SSE 响应
3. 中间层改写了 `text/event-stream` Content-Type
参考 [部署指南 → Nginx 配置](./deployment.md#nginx) 解决。
### 模型列表为空
- 检查是否已添加站点和账号
- 检查账号是否处于 `healthy` 状态
- 检查是否已同步 Token
- 在管理后台手动触发「刷新模型」
### 客户端提示 401 / 403
- 确认使用的是 `PROXY_TOKEN` 而非 `AUTH_TOKEN`
- 确认反向代理透传了 `Authorization` 请求头
遇到流式响应异常、模型列表为空、客户端提示 401/403 等问题,请参阅 [常见问题 FAQ](./faq.md)。
## 下一步
+7 -103
View File
@@ -97,25 +97,11 @@ docker run -d --name metapi \
## 桌面版部署(Windows / macOS / Linux)
个人电脑本地部署请直接使用 [Releases](https://github.com/cita-777/metapi/releases) 中的 Electron 安装包:
桌面版面向个人电脑本地使用,基本安装与配置流程见 [快速上手 → 桌面版启动](./getting-started.md#方式二-桌面版启动-windows-macos-linux)。
1. 下载与你系统匹配的桌面安装包
2. 安装并启动 Metapi Desktop
3. 桌面壳会自动启动本地服务并将数据保存到应用数据目录
以下是部署相关的补充说明。
| 项目 | 说明 |
|------|------|
| 适用场景 | 单机本地使用、个人电脑常驻、需要免 Docker 的桌面体验 |
| 后端监听 | 绑定 `127.0.0.1`,默认会在 `4310..4399` 中选择空闲端口;只有设置 `METAPI_DESKTOP_SERVER_PORT` 时才固定 |
| 管理界面 | 直接在桌面窗口打开,不建议把桌面版当成固定 `localhost:4000` 的服务来写文档或脚本 |
| 数据目录 | `app.getPath('userData')/data` |
| 日志目录 | `app.getPath('userData')/logs`,托盘菜单提供 `Open Logs Folder` |
> [!TIP]
> - Windows 下常见路径是 `%APPDATA%\Metapi\data` 和 `%APPDATA%\Metapi\logs`。
> - 如果你想让本机其他客户端调用桌面版内置 `/v1/*`,先从日志确认当前端口。
桌面版特性:
### 桌面版特性
- 内置本地 Metapi 服务,无需手动准备 Node.js 运行环境
- 托盘菜单支持重新打开窗口、重启后端、开机自启
@@ -124,23 +110,6 @@ docker run -d --name metapi \
> [!NOTE]
> 服务器部署不再提供裸 Node.js Release 压缩包,统一推荐 Docker / Docker Compose。
### 桌面版如何找到当前本地地址
桌面版启动后,后端会把当前地址打印到日志中。定位方式:
1. 打开托盘菜单,点击 `Open Logs Folder`
2. 打开最新日志文件
3. 搜索 `Dashboard:` 或 `Proxy API:` 行
常见日志内容如下:
```text
Dashboard: http://127.0.0.1:4312
Proxy API: http://127.0.0.1:4312/v1/chat/completions
```
如果你只是通过桌面窗口使用管理后台,可以完全忽略这个端口;只有在本机其他客户端需要直连桌面版内置后端时,才需要读取这里的地址。
### 桌面版升级
1. 通过应用内更新提示安装新版本,或从 Releases 下载最新安装包覆盖安装
@@ -149,22 +118,7 @@ Proxy API: http://127.0.0.1:4312/v1/chat/completions
## 本地开发运行(源码调试)
如果你的目标是开发、调试或提交 PR,请直接跑源码:
```bash
git clone https://github.com/cita-777/metapi.git
cd metapi
npm install
npm run db:migrate
npm run dev
```
默认访问地址:
| 服务 | 地址 |
|------|------|
| 前端(Vite) | `http://localhost:5173` |
| 后端 API | `http://localhost:4000` |
开发、调试或提交 PR 的完整流程见 [快速上手 → 本地开发启动](./getting-started.md#方式三-本地开发启动) 和 [CONTRIBUTING.md](../CONTRIBUTING.md)。
> [!NOTE]
> 这条路径是开发流程,不是下载 `Release` 包后再手动跑 Node.js 的替代说法。
@@ -235,27 +189,9 @@ docker image prune -f
## 回滚
如果升级后出现问题:
如果升级后出现问题,请参考 [运维手册 → 数据备份与恢复](./operations.md#数据备份) 进行回滚。
1. **升级前备份**(建议每次升级前执行):
```bash
cp -r data/ data-backup-$(date +%Y%m%d)/
```
2. **回滚到指定版本**:
```bash
# 修改 docker-compose.yml 中的 image tag
# 例如:image: 1467078763/metapi:v1.0.0
# 恢复数据
rm -rf data/
cp -r data-backup-20260228/ data/
# 重启
docker compose up -d
```
核心思路:升级前备份数据目录(或数据库),出问题时停止服务、还原数据、指定旧版镜像重启。
## 数据持久化
@@ -271,39 +207,7 @@ docker compose up -d
只要备份了对应的数据目录,升级、重启通常都不会丢失现有配置和 SQLite 数据。
### 备份策略建议
- 每日自动备份 `data/` 目录
- 保留最近 7~30 天的备份
- 重要操作前手动快照
## 文档站部署
Metapi 使用 [VitePress](https://vitepress.dev) 构建文档站,支持本地预览和 GitHub Pages 自动部署。
### 本地预览
```bash
npm run docs:dev
```
访问 `http://localhost:4173` 查看文档站。
### 构建静态站点
```bash
npm run docs:build
```
构建产物位于 `docs/.vitepress/dist/`,可部署到任意静态站点托管服务。
### GitHub Pages 自动部署
推送到 `main` 分支后,`.github/workflows/docs-pages.yml` 会自动构建并部署到 GitHub Pages。
首次使用需在仓库设置中开启:
`Settings → Pages → Build and deployment → Source: GitHub Actions`
完整备份策略见 [运维手册 → 数据备份](./operations.md#数据备份)。
---
+4 -2
View File
@@ -47,11 +47,13 @@
**A:** Sub2API 常见 JWT 短期会话机制,和传统 NewAPI 站点差异较大。当前建议:
1. 在「凭证模式」里选择 Session 模式,粘贴 JWT / Bearer Token 进行验证
1. 在「凭证模式」里选择 Session 模式,分别粘贴 F12 界面中的 `auth_token`、`refresh_token`、`token_expires_at` 字段进行验证,无需配置用户 ID
2. 不要使用账号密码登录,Metapi 不支持代替 Sub2API 做登录
3. Sub2API 不支持签到;如果你只关心代理调用,也可以直接改用 API Key 模式
3. Sub2API 通常为订阅制使用,不支持签到;如果你只关心代理调用,也可以直接改用 API Key 模式
4. 若 `GET /v1/models` 为空,先确认该账号下已有可用用户 API Key,Metapi 会再尝试用它发现模型
详细操作截图见 [上游接入 → Sub2API](./upstream-integration.md#sub2api)。
## 部署相关
### Q: 启动后无法访问管理后台
+32 -12
View File
@@ -116,6 +116,8 @@ npm run dev
> [!TIP] 从 ALL-API-Hub 迁移(可选)
> 如果你使用过 ALL-API-Hub,Metapi 兼容其导出的备份设置,可直接导入,无需手动逐项配置。
>
> 导入后刷新账号状态可能出现个别账号令牌过期,点击重新绑定按钮按照下面步骤2的方法获取Access Token或者Cookie等即可。
>
> ![ALL-API-Hub备份导入](./screenshots/allapi-hub-backup.png)
### 步骤 1:添加站点
@@ -123,16 +125,17 @@ npm run dev
进入 **站点管理**,添加你使用的上游中转站:
- 填写站点名称(自己想怎么取就怎么取)和 URL
- 选择平台类型(`new-api` / `one-api` / `one-hub` / `done-hub` / `veloera` / `anyrouter` / `sub2api` / `openai` / `claude` / `gemini` / `cliproxyapi`),通常可自动检测
- 填写站点的管理员 API Key(可选,部分功能需要)
- 选择平台类型(`new-api` / `one-api` / `one-hub` / `done-hub` / `veloera` / `anyrouter` / `sub2api` / `openai` / `claude` / `gemini` / `cliproxyapi`),通常可自动检测,检测有误或者因为防护页导致检测失败可以手动选择。
- 可选是否开启系统代理,方便国内机器访问国外中转站。
- 可选站点权重,站点权重越大,路由将更加频繁使用这个站点的模型。
如果你不确定该选哪个平台,先看 [上游接入](./upstream-integration.md)。
![站点管理](./screenshots/site-management.png)
### 步骤 2:添加账号
### 步骤 2:添加账号(可签到、查询余额等)
进入 **账号管理**,为每个站点添加已注册的账号:
进入 **连接管理中的账号管理**,为每个站点添加已注册的账号:
![账号管理](./screenshots/account-management.png)
@@ -146,36 +149,53 @@ npm run dev
- 启用自动签到(如站点支持)
### 步骤 3:同步 Token
### 步骤 3:添加 API Key(Base URL+Key模式,只可获取模型和使用模型)
进入 **Token 管理**:
首先你需要在步骤1中,确保添加了(`new-api` / `one-api` / `one-hub` / `done-hub` / `veloera` / `anyrouter` / `sub2api` / `openai` / `claude` / `gemini` / `cliproxyapi`)的类型的Base URL。
- 点击「同步」从上游账号拉取 API Key
- 进入 **连接管理中的API Key管理**,为每个站点添加你的API Key:
- 或手动添加已有的 API Key,如下图所示。
![API Key 管理](./screenshots/api-key-management.png)
### 步骤 4:同步账号令牌
进入 **连接管理中的账号令牌管理**:
- 点击「同步」从上游账号拉取 账号令牌
- 或手动添加已有的账号令牌,添加后上游站点的令牌管理页面会同步出现令牌,如下图所示。
![Token管理](./screenshots/token-management.png)
### 步骤 4:检查路由
### 步骤 5:路由管理
进入 **路由管理**:
- 系统会自动发现模型并生成路由规则
- 点击右上角的刷新选中概率可以显示并将概率载入缓存中
- 可以手动调整通道的优先级和权重
- 关于路由权重参数调优,参考 [配置说明 → 智能路由](./configuration.md#智能路由)
- 左侧可以进行品牌、站点、接口等的筛选,如下图所示:
<!-- TODO: 补充路由管理截图 -->
<!-- ![路由管理](./screenshots/route-management.png) -->
![路由筛选](./screenshots/routes-filter.png)
- **可以通过创建群组,从而对上游模型进行匹配和重定向,如果建立下图群组,下游访问Metapi时获取的claude-opus-4-6模型将在命中样本中智能选取,日志中可以看见映射。** ![路由群组示例](./screenshots/route-group.png)
- **可以在使用日志中看见下游的请求模型和实际分配给下游使用的模型**
![日志中的模型映射](./screenshots/proxy-logs-mapping.png)
### 步骤 5:验证代理
**Metapi还有更多功能,可以在设置中寻找,请尽情探索,有建议可以提出Issue改进。**
按运行方式选择验证入口:
| 运行方式 | 管理界面 | 代理接口基地址 |
|----------|----------|----------------|
| Docker / Docker Compose | `http://localhost:4000` | `http://localhost:4000` |
| 本地开发 | `http://localhost:5173` | `http://localhost:4000` |
| 桌面版 | 直接使用桌面窗口 | 先从日志里的 `Proxy API:` 行确认当前 `http://127.0.0.1:<port>` |
| 桌面版 | 直接使用桌面窗口 | 通常是4312,先从日志里的 `Proxy API:` 行确认当前 `http://127.0.0.1:<port>` |
### Docker / 本地开发:直接用 curl 验证
-9
View File
@@ -226,15 +226,6 @@ curl -sS http://localhost:4000/v1/chat/completions \
执行前建议先做一次导出或数据库备份。
## 发布前检查清单
如果你在本地开发并准备发布:
- [ ] `npm test` 通过
- [ ] `npm run build` 通过
- [ ] `.env`、`data/`、`tmp/` 未提交到 Git
- [ ] 敏感凭证已从代码中移除
## 下一步
- [常见问题](./faq.md) — 常见报错与修复
Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

+36 -42
View File
@@ -34,7 +34,7 @@ Metapi 支持两大类上游站点:
### New API
**适用平台:** New API 及其衍生版本(Wong-Gongyi、VO-API、Super-API、RIX-API、Neo-API 等)
**适用平台:** New API 及其衍生版本(AnyRouter、VO-API、Super-API、RIX-API、Neo-API 等)
#### 站点配置
@@ -50,38 +50,43 @@ Metapi 支持两大类上游站点:
New API 支持三种凭证类型:
##### 1. 用户名密码登录
##### 1. 用户名密码登录(推荐AnyRouter使用)
- **适用场景:** 有完整账号权限,需要自动签到、余额查询、Token 管理
- **适用场景:** 有完整账号权限,需要自动签到、余额查询、账号令牌管理
- **填写方式:**
- 用户名:`your-username`
- 密码:`your-password`
- **自动获取:** 系统自动登录并获取 Access Token 和 API Token
- **自动获取:** 系统自动登录并获取 Access Token 和账号令牌
##### 2. Access Token / Session Cookie
- **适用场景:** 已有登录凭证,无需密码
- **填写方式:**
- 在「Access Token」字段填入以下任一格式:
- JWT Token:`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...`
- Session Cookie:`session=MTczNjQxMjM0NXxEdi1CQUFFQ180SUFBUkFCRUFBQVB2LUNBQUVHYzNSeWFXNW5EQThBRFhObGMzTnBiMjVmZEdGaWJHVUdjM1J5YVc1bkRBSUFBQT09fGRlYWRiZWVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWY=`
- Cookie 字符串:`session=xxx; token=yyy`
- Session Cookie:**(最不推荐)**
- 可通过浏览器F12获取 ![Session Cookie 获取](./screenshots/session-cookie-f12.png)
- 一般为如下格式:`session=MTczNjQxMjM0NXxEdi1CQUFFQ180SUFBUkFCRUFBQVB2LUNBQUVHYzNSeWFXNW5EQThBRFhObGMzTnBiMjVmZEdGaWJHVUdjM1J5YVc1bkRBSUFBQT09fGRlYWRiZWVmMTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWY=`
- 系统访问令牌和用户ID**(推荐非Anyrouter的其他New API站点使用)**
- ![](./screenshots/account-management.png)
- **自动解析:** 系统自动识别凭证类型并提取用户信息
##### 3. API Token(仅代理)
##### 3. API Key(仅代理)
- **适用场景:** 仅用于模型调用,不需要管理功能
- **适用场景:** 仅用于模型调用,不需要余额管理、自动签到等功能
- **填写方式:**
- 在「API Token」字段填入:`sk-xxxxxxxxxxxxxx`
- **限制:** 无法使用签到、余额刷新、Token 管理等功能
- **限制:** 无法使用签到、余额刷新、账号令牌管理等功能
#### 特殊说明
**User ID 自动探测:** New API 的某些衍生版本(如 Wong-Gongyi、VO-API)需要在请求头中携带 `New-API-User` / `Veloera-User` / `voapi-user` 等字段。Metapi 会自动:
**User ID 自动探测:** New API 通常需要在请求头中携带 `New-API-User` / `Veloera-User` / `voapi-user` 等字段。Metapi 会自动:
1. 从 JWT Token 中解码 User ID
2. 从 Session Cookie 中提取 User ID(支持 Gob 编码解析)
3. 通过探测常见 ID 范围验证可用性
如果以上方法都不能获取到ID,则需要用户手动获取。
**防护盾穿透:** 自动处理阿里云盾 / Cloudflare 等 JS 挑战(`acw_sc__v2` / `cdn_sec_tc`),无需手动配置。
---
@@ -100,7 +105,7 @@ New API 支持三种凭证类型:
#### 账号凭证
One API 支持与 New API 相同的三种凭证类型(用户名密码 / Access Token / API Token),配置方式相同。
One API 支持与 New API 相同的三种凭证类型(用户名密码 / Access Token / API Key),配置方式相同。
---
@@ -118,7 +123,7 @@ One API 支持与 New API 相同的三种凭证类型(用户名密码 / Access
#### 账号凭证
OneHub 继承 One API 的凭证体系,支持用户名密码、Access Token、API Token 三种方式。
OneHub 继承 One API 的凭证体系,支持用户名密码、Access Token、API Key 三种方式。
**额外功能:** OneHub 支持 Token 分组(`token_group`),Metapi 会自动识别并保留分组信息。
@@ -138,7 +143,7 @@ OneHub 继承 One API 的凭证体系,支持用户名密码、Access Token、A
#### 账号凭证
DoneHub 完全兼容 OneHub 的凭证体系,配置方式相同。
DoneHub 完全兼容 OneHub 的凭证体系,配置方式相同,DoneHub获取令牌位置如下图所示:![DoneHub 令牌位置](./screenshots/donehub-token.png)
---
@@ -158,25 +163,6 @@ DoneHub 完全兼容 OneHub 的凭证体系,配置方式相同。
Veloera 基于 New API 架构,支持相同的凭证类型。特别注意:
- Veloera 需要 `Veloera-User` 请求头,Metapi 会自动添加
- 支持 Session Cookie 和 JWT Token
---
### AnyRouter
**适用平台:** AnyRouter 通用路由平台
#### 站点配置
| 字段 | 说明 | 示例 |
|------|------|------|
| **站点名称** | 自定义名称 | `AnyRouter 平台` |
| **站点 URL** | AnyRouter 部署地址 | `https://anyrouter.example.com` |
| **平台类型** | 选择 `anyrouter` | - |
#### 账号凭证
AnyRouter 基于 New API 架构,凭证配置方式相同。
---
@@ -194,12 +180,20 @@ AnyRouter 基于 New API 架构,凭证配置方式相同。
#### 账号凭证
Sub2API 支持:
- **用户名密码登录**
- **Access Token**
- **API Token**(订阅密钥)
Sub2API 常见 JWT 短期会话机制,和传统 NewAPI 站点差异较大。按下面步骤进行添加:
配置方式与 New API 相同。
首先去中转站点F12打开如下界面:
![Sub2API 认证字段示例](./screenshots/sub2api-auth-f12.png)
然后回到Metapi账号添加处:
![Sub2API Session 配置](./screenshots/sub2api-session-config.png)
1. 在「凭证模式」里选择 Session 模式,分别粘贴F12界面中的auth_token、refresh_token、token_expires_at字段进行验证,无需配置用户ID。
2. 不要使用账号密码登录,Metapi 不支持代替 Sub2API 做登录
3. Sub2API 通常为订阅制使用,不支持签到;如果你只关心代理调用,也可以直接改用 API Key 模式
4. 若 `GET /v1/models` 为空,先确认该账号下已有可用用户 API Key,Metapi 会再尝试用它发现模型
---
@@ -232,7 +226,7 @@ Sub2API 支持:
| 代理调用 | ✅ 支持 |
| 余额查询 | ❌ 不支持(OpenAI 无公开接口) |
| 自动签到 | ❌ 不适用 |
| Token 管理 | ❌ 不适用 |
| 账号令牌管理 | ❌ 不适用 |
---
@@ -261,7 +255,7 @@ Sub2API 支持:
| 代理调用 | ✅ 支持(自动转换 OpenAI ⇄ Claude 格式) |
| 余额查询 | ❌ 不支持 |
| 自动签到 | ❌ 不适用 |
| Token 管理 | ❌ 不适用 |
| 账号令牌管理 | ❌ 不适用 |
**协议转换:** Metapi 自动处理 OpenAI 格式与 Claude Messages API 格式的双向转换,下游客户端可使用 OpenAI SDK 调用 Claude 模型。
@@ -292,7 +286,7 @@ Sub2API 支持:
| 代理调用 | ✅ 支持(自动转换 OpenAI ⇄ Gemini 格式) |
| 余额查询 | ❌ 不支持 |
| 自动签到 | ❌ 不适用 |
| Token 管理 | ❌ 不适用 |
| 账号令牌管理 | ❌ 不适用 |
**协议转换:** Metapi 自动处理 OpenAI 格式与 Gemini `generateContent` API 格式的双向转换。
@@ -440,7 +434,7 @@ Metapi 自动追踪每个账号的健康状态:
| 场景 | 推荐凭证类型 | 原因 |
|------|-------------|------|
| 个人站点,需要完整功能 | 用户名密码 | 支持自动签到、Token 管理 |
| 个人站点,需要完整功能 | 用户名密码 | 支持自动签到、账号令牌管理 |
| 共享账号,只读权限 | Access Token | 避免密码泄露 |
| 仅用于模型调用 | API Token | 最小权限原则 |