Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Build and Push Docker Image

on:
push:
branches:
- main
tags:
- 'v*'
pull_request:
branches:
- main
workflow_dispatch:

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository_owner }}/api-check

jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=sha,prefix=

- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
pull: true
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
build-args: |
NPM_REGISTRY=https://registry.npmjs.org
18 changes: 13 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,24 +1,32 @@
# 全局参数:镜像源(CI 时通过 --build-arg NPM_REGISTRY=... 覆盖)
ARG NPM_REGISTRY=https://registry.npmjs.org/

# 阶段1:基础镜像准备
FROM node:18-alpine AS base
FROM node:24-alpine AS base

ARG NPM_REGISTRY

# 设置工作目录
WORKDIR /app

# 配置国内镜像源
RUN npm config set registry https://registry.npmmirror.com/
# 配置镜像源
RUN npm config set registry ${NPM_REGISTRY}

# 安装必要的系统依赖(例如 CA 证书)
RUN apk add --no-cache ca-certificates
RUN apk update && apk add --no-cache ca-certificates && update-ca-certificates

# 阶段2:构建应用程序
FROM base AS builder

ARG NPM_REGISTRY

WORKDIR /app

# 复制依赖文件
COPY package.json yarn.lock ./

# 安装所有依赖,包括开发依赖
RUN yarn config set registry ${NPM_REGISTRY}
RUN yarn install

# 复制项目源代码
Expand All @@ -40,7 +48,7 @@ RUN yarn install --production --ignore-scripts --prefer-offline
RUN yarn cache clean --all

# 阶段3:构建最终的生产镜像
FROM node:18-alpine
FROM node:24-alpine

# 设置工作目录
WORKDIR /app
Expand Down
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,14 @@
docker run -d -p 13000:13000 \
-e PASSWORD=you_password \
-v you_path:/app/data \
--name api-check ghcr.io/rickcert/api-check:latest
--name api-check ghcr.io/october-coder/api-check:latest
```

The image is automatically built and pushed via GitHub Actions on every push to the `main` branch. Available tags:
- `latest` - latest main branch build
- `v2.1.0` - specific version tags
- `sha-xxxxxxx` - commit SHA based tags

### Cloudflare Backend Deployment

1. Refer to the [Detailed Tutorial](./docs/cloudflare.md).
Expand Down
7 changes: 6 additions & 1 deletion README_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,14 @@
docker run -d -p 13000:13000 \
-e PASSWORD=you_password \
-v you_path:/app/data \
--name api-check ghcr.io/rickcert/api-check:latest
--name api-check ghcr.io/october-coder/api-check:latest
```

镜像通过 GitHub Actions 自动构建并推送到 `ghcr.io`。可用标签:
- `latest` - 最新 main 分支构建
- `v2.1.0` - 版本标签
- `sha-xxxxxxx` - 提交 SHA 标签

### cloudflare 部署后端

1. 参考 [详细教程](./docs/cloudflare.md)。
Expand Down
208 changes: 208 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
# API Check 项目文档

## 1. 项目概述

**API Check** 是一个纯前端 OpenAI API 测试工具,用于测试 API 代理的可用性、一致性和真实性。支持 one-api、new-api 及 OpenAI 格式的 API。

- **版本**: 2.1.0
- **技术栈**: Vue 3 + Vite 5 + Ant Design Vue 4 + ECharts 5
- **部署方式**: Vercel / Docker / Cloudflare Pages

---

## 2. 项目结构

```
api-check/
├── api/ # 后端 API (Vercel Serverless / Local Express)
│ ├── index.js # 云存储
│ ├── auth.js # 认证
│ ├── alive.js # 实验性功能
│ └── local/ # 本地 Express 路由
├── src/
│ ├── main.js # Vue 入口
│ ├── App.vue # 根组件
│ ├── components/
│ │ ├── Check.vue # 核心测试组件
│ │ └── Experimental.vue # 实验性功能 (GPT/Claude/Gemini 批量测试)
│ ├── views/
│ │ ├── Home.vue # 首页
│ │ └── Layout.vue # 布局
│ ├── router/index.js # 路由配置
│ ├── utils/
│ │ ├── api.js # API 测试函数
│ │ ├── verify.js # 模型验证器
│ │ ├── normal.js # 辅助函数
│ │ ├── svg.js # SVG 分享卡片
│ │ ├── models.js # 模型列表和预设
│ │ ├── theme.js # 主题切换
│ │ ├── info.js # 应用信息
│ │ └── update.js # 版本检查
│ ├── i18n/ # 国际化
│ └── styles/global.css # 全局样式
├── server.js # Express 生产服务器
└── vite.config.js # Vite 配置
```

---

## 3. 核心功能

### 3.1 API 测试

| 功能 | 说明 |
|------|------|
| 模型可用性测试 | 并发测试多个模型,配置超时和并发数 |
| 模型列表获取 | 从 API 端点获取可用模型列表 |
| 配额检查 | 查询账户使用量和剩余额度 |
| 智能信息提取 | 自动从粘贴文本中提取 URL 和 API Key |

### 3.2 高级验证

| 验证类型 | 说明 |
|----------|------|
| **Temperature 一致性验证** | 使用低温度(0.01)测试模型输出一致性 |
| **官方 API 验证** | 检测系统指纹和响应相似度 |
| **Function Calling 验证** | 测试函数调用能力 |
| **自定义对话验证** | 使用预设 prompt 测试(如"鲁迅暴打周树人")|

### 3.3 存储与分享

- **本地存储**: 保存/加载配置到浏览器 localStorage
- **云存储**: 保存配置到后端(Vercel KV 或本地 Express)
- **SVG 分享卡片**: 生成可分享的结果图片
- **URL 预设**: 通过 URL 参数分享配置

### 3.4 实验性功能

- GPT Refresh Token 批量测试
- Claude Session Key 批量测试
- Gemini API Key 批量测试

---

## 4. 运行逻辑

### 4.1 数据流程

```
用户输入 (API URL + Key + Models)
┌─────────────────────────────┐
│ Check.vue - 主组件 │
│ - 表单验证 │
│ - 模型选择弹窗 │
│ - URL 参数解析 │
└─────────────────────────────┘
┌─────────────────────────────┐
│ api.js - API 测试函数 │
│ - fetchModelList() │
│ - fetchQuotaInfo() │
│ - testModelList() │
└─────────────────────────────┘
┌─────────────────────────────┐
│ 目标 API │
│ - POST /v1/chat/completions │
│ - GET /v1/models │
│ - GET /dashboard/billing/* │
└─────────────────────────────┘
┌─────────────────────────────┐
│ 结果处理 │
│ - ModelVerifier 验证 │
│ - calculateSummaryData() │
└─────────────────────────────┘
┌─────────────────────────────┐
│ UI 展示 │
│ - 可排序列的表格 │
│ - ECharts 雷达图 │
│ - SVG 分享卡片 │
└─────────────────────────────┘
```

### 4.2 关键业务逻辑

#### 模型测试 (`api.js`)

```javascript
testModelList(apiUrl, apiKey, modelNames, timeoutSeconds, concurrency, progressCallback)
```

- 向 `/v1/chat/completions` 发送并发请求
- o1-* 模型超时时间乘以 6
- 结果分类: 有效 / 无效 / 不一致
- 支持进度回调实时更新 UI

#### 模型验证 (`verify.js`)

`ModelVerifier` 类提供 4 种验证方式:

1. **Temperature 验证** - seed=331, temperature=0.01, 发送 4 次请求
2. **官方验证** - 检查 system_fingerprint 和响应相似度
3. **Function Calling** - 测试 add_numbers 函数
4. **自定义对话** - 使用用户提供的 prompt

#### 云存储

| 环境 | 存储方式 |
|------|----------|
| Vercel | `@vercel/kv` (Redis/KV) |
| 本地 | JSON 文件 (`/data/data.json`) |

---

## 5. API 端点

### 本地 Express 服务器

| 路由 | 方法 | 功能 |
|------|------|------|
| `/api/auth` | POST | 密码认证 |
| `/api/alive` | POST | 实验性功能 |
| `/api` | GET | 获取云存储数据 |
| `/api` | POST | 保存云存储数据 |
| `/*` | GET | 静态资源 |

### Vercel Serverless

| 路由 | 文件 | 功能 |
|------|------|------|
| `/api/auth` | `api/auth.js` | 密码认证 |
| `/api/alive` | `api/alive.js` | 实验性功能 |
| `/api` | `api/index.js` | 云存储 (Vercel KV) |

---

## 6. 配置方式

### 环境变量

| 变量 | 说明 |
|------|------|
| `PASSWORD` | 后端认证密码 |
| `PORT` | 服务器端口 (默认: 13000) |

### URL 参数预设

```
?settings={"key":"*sk*","url":"*api*","models":["gpt-4o"],"timeout":10,"concurrency":2}
```

---

## 7. 启动方式

| 环境 | 命令 |
|------|------|
| 开发 | `npm run dev` (Vite, 端口 3000) |
| 构建 | `npm run build` |
| 生产 | `node server.js` (Express, 端口 13000) |
| Docker | `docker run` |
1 change: 1 addition & 0 deletions vite.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export default defineConfig({
],
}),
],
base: './',
server: {
port: 3000,
host: '0.0.0.0',
Expand Down
Loading
Loading