# flask_api_model_validator **Repository Path**: WuYiLingOps/flask_api_model_validator ## Basic Information - **Project Name**: flask_api_model_validator - **Description**: API 模型验证工具 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2026-03-11 - **Last Updated**: 2026-03-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # API 模型真实性验证工具部署 > ✨ 功能特性 - 🔍 **模型真实性验证** - 通过多维测试检测 API 是否返回声称的模型 - 📋 **批量可用性测试** - 一键测试所有模型的可用状态 - 📊 **数据可视化仪表盘** - 统计概览、趋势图表、提供商排名 - 📜 **历史记录管理** - 完整的测试历史、筛选检索、报告下载 - ⚙️ **API 提供商管理** - 保存管理多个提供商信息 - 🔌 **API 端点自动探测** - 自动发现有效的 API 端点 - 📡 **实时进度推送** - WebSocket 实时推送测试进度 - 📄 **报告导出** - 支持 TXT/HTML 格式报告下载 ## 🏗️ 技术栈 | 层次 | 技术 | |------|------| | 前端 | Vue 3 + TypeScript + Element Plus + ECharts + Pinia | | 后端 | Flask 3 + SQLAlchemy + Flask-SocketIO + httpx | | 构建 | Vite + Docker + Nginx | | 数据库 | SQLite | ## 📁 项目结构 ``` api-model-validator/ ├── backend/ # Flask 后端 │ ├── app/ │ │ ├── __init__.py # Flask 工厂函数 │ │ ├── config.py # 配置管理 │ │ ├── extensions.py # 扩展初始化 │ │ ├── models/ # 数据模型 (ApiProvider, TestRecord, TestResult) │ │ ├── services/ # 业务逻辑 (验证、批量测试、端点探测、报告生成) │ │ ├── api/ # REST API 路由 │ │ ├── websocket/ # WebSocket 事件 │ │ └── utils/ # 工具函数 │ ├── requirements.txt │ ├── Dockerfile │ └── run.py # 启动入口 ├── frontend/ # Vue3 前端 │ ├── src/ │ │ ├── views/ # 页面 (Dashboard, Validate, BatchTest, History, Settings) │ │ ├── components/ # 组件 (layout, validate, batch, providers, common) │ │ ├── api/ # API 接口封装 │ │ ├── stores/ # Pinia 状态管理 │ │ ├── composables/ # 组合式函数 (WebSocket, Notification) │ │ └── types/ # TypeScript 类型 │ ├── package.json │ ├── vite.config.ts │ └── Dockerfile ├── docker-compose.yml # Docker 编排 ├── .gitignore └── README.md ``` ## 🚀 快速开始 ### 方式一:Docker 部署(推荐) #### 克隆项目 ```bash git clone https://gitee.com/zyx3721/flask_api_model_validator.git cd flask_api_model_validator ``` #### 一键构建启动 ```bash docker-compose up -d --build ``` #### 访问工具平台 - **前端**: - **首页**:`http://localhost` - **首次访问**:请先注册账号后再登录 - **后端 API**: - `http://localhost/api/` ### 方式二:本地开发快速启动 #### 克隆项目 ```bash git clone https://gitee.com/zyx3721/flask_api_model_validator.git cd flask_api_model_validator ``` #### 后端配置与启动 1. 创建虚拟环境(推荐): ```bash cd backend python -m venv venv source venv/bin/activate # Linux/Mac # 或 venv\Scripts\activate # Windows ``` 2. 安装依赖: ```bash pip install -r requirements.txt ``` 3. 运行后端服务: ```bash # 方式1:前台运行(终端关闭则服务停止) cd /data/flask_api_model_validator/backend python run.py # 方式2:后台运行(日志输出到 app.log) cd /data/flask_api_model_validator/backend nohup python run.py > app.log 2>&1 & ``` 后端服务默认运行在 `http://localhost:5000` ,如需指定端口,请修改 `run.py` 文件内的 `port` 参数。 #### 前端配置与启动 1. 进入前端目录下载相关依赖: ```bash cd frontend npm install ``` 2. 配置 API 地址(可选): ```bash # 配置说明: # - 后端端口 = 5000:无需创建 .env 文件(默认值为 http://127.0.0.1:5000) # - 后端端口 ≠ 5000:需要创建 .env 文件(指定正确端口,例如后端端口改为 5001) # 创建 .env 文件,例如: echo "VITE_API_BASE=http://localhost:5001" > .env ``` 3. 启动前端服务: ```bash # 方式1:前台运行(终端关闭则服务停止) npm run dev # 方式2:后台运行(日志输出到 frontend.log) nohup npm run dev > frontend.log 2>&1 & ``` 前端服务默认运行在 `http://localhost:3000` ,提供了非本机也能访问,将 `localhost` 改为实际 IP 地址即可。 #### 访问工具平台 - **前端**: - **首页**:`http://localhost:3000` - **首次访问**:请先注册账号后再登录 - **后端 API**: - `http://localhost:5000/api/` ### 方法三:生产环境部署 #### 克隆项目 ```bash git clone https://gitee.com/zyx3721/flask_api_model_validator.git cd flask_api_model_validator ``` #### 后端构建与配置 1. 创建虚拟环境(推荐): ```bash python -m venv venv source venv/bin/activate # Linux/Mac # 或 venv\Scripts\activate # Windows ``` 2. 安装依赖: ```bash pip install -r requirements.txt pip install pyinstaller # 用于打包项目 ``` 3. 构建可执行文件: ```bash pyinstaller -F -n api-backend run.py \ --hidden-import=engineio.async_drivers.threading \ --hidden-import=socketio ``` 4. 运行后端服务: ```bash # 方式1:前台运行(终端关闭则服务停止) cd /data/flask_api_model_validator/backend ./dist/api-backend # 方式2:后台运行(日志输出到 app.log) cd /data/flask_api_model_validator/backend nohup ./dist/api-backend > app.log 2>&1 & # 方法3:加入 systemd 管理启动运行 # 服务配置参考如下,请自行修改相应目录路径 cat > /etc/systemd/system/api-backend.service < 配置 Nginx (按需替换域名/路径/证书),`HTTP 示例` : ```nginx server { listen 80; server_name your-domain.com; # 修改为你的域名/主机名,例如:api.cn # 前端静态资源目录(dist 构建产物) root /data/api_model_validator/frontend/dist; # 按实际部署路径修改 index index.html; # 前端路由回退到 index.html(适配前端 history 模式) location / { try_files $uri $uri/ /index.html; } # 后端 API 反向代理 location /api/ { proxy_pass http://127.0.0.1:5000; # 与后端 API 相同地址 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 60s; proxy_send_timeout 300s; proxy_read_timeout 300s; } # Socket.IO 反向代理(实时进度推送,验证/批量测试进度依赖此配置) location /socket.io/ { proxy_pass http://127.0.0.1:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 60s; proxy_send_timeout 300s; proxy_read_timeout 300s; } } ``` ##### HTTPS 示例 > HTTPS 示例(含 80→443 跳转,请替换证书路径): ```nginx # 80 强制跳转到 443 server { listen 80; server_name your-domain.com; # 修改为你的域名/主机名,例如:api.cn return 301 https://$host$request_uri; } server { # listen 443 ssl http2; # Nginx 1.25 以下版本写法 listen 443 ssl; http2 on; server_name your-domain.com; # 修改为你的域名/主机名,例如:api.cn # 证书路径(替换为实际证书文件) ssl_certificate /usr/local/nginx/ssl/your-domain.com.pem; # 例如:/usr/local/nginx/ssl/yunwei.cn.pem ssl_certificate_key /usr/local/nginx/ssl/your-domain.com.key; # 例如:/usr/local/nginx/ssl/yunwei.cn.key # SSL安全优化 ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384; ssl_session_timeout 10m; ssl_session_cache shared:SSL:10m; # 前端静态资源目录(dist 构建产物) root /data/api_model_validator/frontend/dist; # 按实际部署路径修改 index index.html; # 前端路由回退到 index.html(适配前端 history 模式) location / { try_files $uri $uri/ /index.html; } # 后端 API 反向代理 location /api/ { proxy_pass http://127.0.0.1:8080; # 与后端 API 相同地址 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 60s; proxy_send_timeout 300s; proxy_read_timeout 300s; } # Socket.IO 反向代理(实时进度推送,验证/批量测试进度依赖此配置) location /socket.io/ { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 60s; proxy_send_timeout 300s; proxy_read_timeout 300s; } } ``` 重载 Nginx: ```bash # 检查语法 nginx -t # 重载配置 ## 方法1 nginx -s reload ## 方法2 systemctl reload nginx ``` #### 访问工具平台 - **前端**: - **首页**:`http://your-domain.com` - **首次访问**:请先注册账号后再登录 - **后端 API**: - `http://your-domain.com/api/` ## 📡 API 接口 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/api/providers` | 创建 API 提供商 | | GET | `/api/providers` | 获取提供商列表 | | PUT | `/api/providers/` | 更新提供商 | | DELETE | `/api/providers/` | 删除提供商 | | POST | `/api/providers//detect` | 探测 API 端点 | | GET | `/api/providers//models` | 获取模型列表 | | POST | `/api/validate` | 启动模型验证 | | GET | `/api/validate/` | 获取验证结果 | | POST | `/api/batch-test` | 启动批量测试 | | GET | `/api/batch-test/` | 获取批量测试结果 | | GET | `/api/history` | 历史记录列表 | | GET | `/api/history/` | 历史详情 | | GET | `/api/history//report` | 下载报告 | | GET | `/api/stats/overview` | 统计概览 | | GET | `/api/stats/trend` | 趋势数据 | | GET | `/api/stats/providers` | 提供商统计 | ## 🛠️ 最新更新 - 修复了 `ResultPanel.vue` 中复制完整日志时的模板字符串错误,导致页面加载异常。 - 在 `History.vue` 中正确导入并使用 `deleteHistory` 接口,解决了删除历史记录时报错 `export named 'deleteHistoryRecord'` 的问题。 - 更新了相应的 API 文档注释,确保前端调用与后端接口保持一致。 --- ## 验证原理 当第三方 API 服务声称提供某个特定模型(如 Claude Opus 4.6)时,可以通过以下方式验证其真实性: ### 核心验证点 - **API 响应中的模型标识**:真实的 API 会在响应的 `model` 字段返回实际使用的模型名称 - **响应结构特征**:不同模型家族的 API 响应结构存在差异 - **模型能力表现**:通过特定任务测试模型的实际能力 ### 验证逻辑 ``` 用户请求模型 A → API 处理 → 返回响应(包含实际模型标识) ↓ 如果返回模型 B ≠ 模型 A ↓ 证明存在虚假宣传 ``` ### 验证检查清单 - [ ] API 响应中的 `model` 字段是否与声称一致 - [ ] 响应结构是否符合官方 API 规范 - [ ] 模型能力是否达到声称的水平 - [ ] 标准 API 端点是否可用 - [ ] 响应速度和质量是否合理 --- ## 📝 许可证 MIT License - 详见 [LICENSE](LICENSE) 文件 ## 👨‍💻 作者 無以菱 (huangjing510@126.com) --- **文档版本**:v3.0 **最后更新**:2026-03-13