|
| 1 | +# API Check 项目文档 |
| 2 | + |
| 3 | +## 1. 项目概述 |
| 4 | + |
| 5 | +**API Check** 是一个纯前端 OpenAI API 测试工具,用于测试 API 代理的可用性、一致性和真实性。支持 one-api、new-api 及 OpenAI 格式的 API。 |
| 6 | + |
| 7 | +- **版本**: 2.1.0 |
| 8 | +- **技术栈**: Vue 3 + Vite 5 + Ant Design Vue 4 + ECharts 5 |
| 9 | +- **部署方式**: Vercel / Docker / Cloudflare Pages |
| 10 | + |
| 11 | +--- |
| 12 | + |
| 13 | +## 2. 项目结构 |
| 14 | + |
| 15 | +``` |
| 16 | +api-check/ |
| 17 | +├── api/ # 后端 API (Vercel Serverless / Local Express) |
| 18 | +│ ├── index.js # 云存储 |
| 19 | +│ ├── auth.js # 认证 |
| 20 | +│ ├── alive.js # 实验性功能 |
| 21 | +│ └── local/ # 本地 Express 路由 |
| 22 | +├── src/ |
| 23 | +│ ├── main.js # Vue 入口 |
| 24 | +│ ├── App.vue # 根组件 |
| 25 | +│ ├── components/ |
| 26 | +│ │ ├── Check.vue # 核心测试组件 |
| 27 | +│ │ └── Experimental.vue # 实验性功能 (GPT/Claude/Gemini 批量测试) |
| 28 | +│ ├── views/ |
| 29 | +│ │ ├── Home.vue # 首页 |
| 30 | +│ │ └── Layout.vue # 布局 |
| 31 | +│ ├── router/index.js # 路由配置 |
| 32 | +│ ├── utils/ |
| 33 | +│ │ ├── api.js # API 测试函数 |
| 34 | +│ │ ├── verify.js # 模型验证器 |
| 35 | +│ │ ├── normal.js # 辅助函数 |
| 36 | +│ │ ├── svg.js # SVG 分享卡片 |
| 37 | +│ │ ├── models.js # 模型列表和预设 |
| 38 | +│ │ ├── theme.js # 主题切换 |
| 39 | +│ │ ├── info.js # 应用信息 |
| 40 | +│ │ └── update.js # 版本检查 |
| 41 | +│ ├── i18n/ # 国际化 |
| 42 | +│ └── styles/global.css # 全局样式 |
| 43 | +├── server.js # Express 生产服务器 |
| 44 | +└── vite.config.js # Vite 配置 |
| 45 | +``` |
| 46 | + |
| 47 | +--- |
| 48 | + |
| 49 | +## 3. 核心功能 |
| 50 | + |
| 51 | +### 3.1 API 测试 |
| 52 | + |
| 53 | +| 功能 | 说明 | |
| 54 | +|------|------| |
| 55 | +| 模型可用性测试 | 并发测试多个模型,配置超时和并发数 | |
| 56 | +| 模型列表获取 | 从 API 端点获取可用模型列表 | |
| 57 | +| 配额检查 | 查询账户使用量和剩余额度 | |
| 58 | +| 智能信息提取 | 自动从粘贴文本中提取 URL 和 API Key | |
| 59 | + |
| 60 | +### 3.2 高级验证 |
| 61 | + |
| 62 | +| 验证类型 | 说明 | |
| 63 | +|----------|------| |
| 64 | +| **Temperature 一致性验证** | 使用低温度(0.01)测试模型输出一致性 | |
| 65 | +| **官方 API 验证** | 检测系统指纹和响应相似度 | |
| 66 | +| **Function Calling 验证** | 测试函数调用能力 | |
| 67 | +| **自定义对话验证** | 使用预设 prompt 测试(如"鲁迅暴打周树人")| |
| 68 | + |
| 69 | +### 3.3 存储与分享 |
| 70 | + |
| 71 | +- **本地存储**: 保存/加载配置到浏览器 localStorage |
| 72 | +- **云存储**: 保存配置到后端(Vercel KV 或本地 Express) |
| 73 | +- **SVG 分享卡片**: 生成可分享的结果图片 |
| 74 | +- **URL 预设**: 通过 URL 参数分享配置 |
| 75 | + |
| 76 | +### 3.4 实验性功能 |
| 77 | + |
| 78 | +- GPT Refresh Token 批量测试 |
| 79 | +- Claude Session Key 批量测试 |
| 80 | +- Gemini API Key 批量测试 |
| 81 | + |
| 82 | +--- |
| 83 | + |
| 84 | +## 4. 运行逻辑 |
| 85 | + |
| 86 | +### 4.1 数据流程 |
| 87 | + |
| 88 | +``` |
| 89 | +用户输入 (API URL + Key + Models) |
| 90 | + │ |
| 91 | + ▼ |
| 92 | +┌─────────────────────────────┐ |
| 93 | +│ Check.vue - 主组件 │ |
| 94 | +│ - 表单验证 │ |
| 95 | +│ - 模型选择弹窗 │ |
| 96 | +│ - URL 参数解析 │ |
| 97 | +└─────────────────────────────┘ |
| 98 | + │ |
| 99 | + ▼ |
| 100 | +┌─────────────────────────────┐ |
| 101 | +│ api.js - API 测试函数 │ |
| 102 | +│ - fetchModelList() │ |
| 103 | +│ - fetchQuotaInfo() │ |
| 104 | +│ - testModelList() │ |
| 105 | +└─────────────────────────────┘ |
| 106 | + │ |
| 107 | + ▼ |
| 108 | +┌─────────────────────────────┐ |
| 109 | +│ 目标 API │ |
| 110 | +│ - POST /v1/chat/completions │ |
| 111 | +│ - GET /v1/models │ |
| 112 | +│ - GET /dashboard/billing/* │ |
| 113 | +└─────────────────────────────┘ |
| 114 | + │ |
| 115 | + ▼ |
| 116 | +┌─────────────────────────────┐ |
| 117 | +│ 结果处理 │ |
| 118 | +│ - ModelVerifier 验证 │ |
| 119 | +│ - calculateSummaryData() │ |
| 120 | +└─────────────────────────────┘ |
| 121 | + │ |
| 122 | + ▼ |
| 123 | +┌─────────────────────────────┐ |
| 124 | +│ UI 展示 │ |
| 125 | +│ - 可排序列的表格 │ |
| 126 | +│ - ECharts 雷达图 │ |
| 127 | +│ - SVG 分享卡片 │ |
| 128 | +└─────────────────────────────┘ |
| 129 | +``` |
| 130 | + |
| 131 | +### 4.2 关键业务逻辑 |
| 132 | + |
| 133 | +#### 模型测试 (`api.js`) |
| 134 | + |
| 135 | +```javascript |
| 136 | +testModelList(apiUrl, apiKey, modelNames, timeoutSeconds, concurrency, progressCallback) |
| 137 | +``` |
| 138 | + |
| 139 | +- 向 `/v1/chat/completions` 发送并发请求 |
| 140 | +- o1-* 模型超时时间乘以 6 |
| 141 | +- 结果分类: 有效 / 无效 / 不一致 |
| 142 | +- 支持进度回调实时更新 UI |
| 143 | + |
| 144 | +#### 模型验证 (`verify.js`) |
| 145 | + |
| 146 | +`ModelVerifier` 类提供 4 种验证方式: |
| 147 | + |
| 148 | +1. **Temperature 验证** - seed=331, temperature=0.01, 发送 4 次请求 |
| 149 | +2. **官方验证** - 检查 system_fingerprint 和响应相似度 |
| 150 | +3. **Function Calling** - 测试 add_numbers 函数 |
| 151 | +4. **自定义对话** - 使用用户提供的 prompt |
| 152 | + |
| 153 | +#### 云存储 |
| 154 | + |
| 155 | +| 环境 | 存储方式 | |
| 156 | +|------|----------| |
| 157 | +| Vercel | `@vercel/kv` (Redis/KV) | |
| 158 | +| 本地 | JSON 文件 (`/data/data.json`) | |
| 159 | + |
| 160 | +--- |
| 161 | + |
| 162 | +## 5. API 端点 |
| 163 | + |
| 164 | +### 本地 Express 服务器 |
| 165 | + |
| 166 | +| 路由 | 方法 | 功能 | |
| 167 | +|------|------|------| |
| 168 | +| `/api/auth` | POST | 密码认证 | |
| 169 | +| `/api/alive` | POST | 实验性功能 | |
| 170 | +| `/api` | GET | 获取云存储数据 | |
| 171 | +| `/api` | POST | 保存云存储数据 | |
| 172 | +| `/*` | GET | 静态资源 | |
| 173 | + |
| 174 | +### Vercel Serverless |
| 175 | + |
| 176 | +| 路由 | 文件 | 功能 | |
| 177 | +|------|------|------| |
| 178 | +| `/api/auth` | `api/auth.js` | 密码认证 | |
| 179 | +| `/api/alive` | `api/alive.js` | 实验性功能 | |
| 180 | +| `/api` | `api/index.js` | 云存储 (Vercel KV) | |
| 181 | + |
| 182 | +--- |
| 183 | + |
| 184 | +## 6. 配置方式 |
| 185 | + |
| 186 | +### 环境变量 |
| 187 | + |
| 188 | +| 变量 | 说明 | |
| 189 | +|------|------| |
| 190 | +| `PASSWORD` | 后端认证密码 | |
| 191 | +| `PORT` | 服务器端口 (默认: 13000) | |
| 192 | + |
| 193 | +### URL 参数预设 |
| 194 | + |
| 195 | +``` |
| 196 | +?settings={"key":"*sk*","url":"*api*","models":["gpt-4o"],"timeout":10,"concurrency":2} |
| 197 | +``` |
| 198 | + |
| 199 | +--- |
| 200 | + |
| 201 | +## 7. 启动方式 |
| 202 | + |
| 203 | +| 环境 | 命令 | |
| 204 | +|------|------| |
| 205 | +| 开发 | `npm run dev` (Vite, 端口 3000) | |
| 206 | +| 构建 | `npm run build` | |
| 207 | +| 生产 | `node server.js` (Express, 端口 13000) | |
| 208 | +| Docker | `docker run` | |
0 commit comments