CostPrediction/docs/deploy/api.md

664 lines
13 KiB
Markdown

# 装备成本估算系统 API 文档
这个 API 文档提供了完整的接口说明,包括:
- 每个端点的详细描述
- 请求和响应的具体示例
- 清晰的参数格式要求
- 统一的错误处理说明
- 重要的注意事项
文档使用 Markdown 格式编写,请使用支持 Markdown 的工具查看。
## 基本信息
- 基础URL: `http://localhost:5001/api`
- 版本: 1.0.0
- 响应格式: JSON
## API 端点列表
### 1. 获取 API 信息
获取 API 版本信息和可用端点列表。
- **URL**: `/`
- **方法**: `GET`
- **响应示例**:
json
{
"name": "装备成本估算系统 API",
"version": "1.0.0",
"endpoints": {
"predict": {
"url": "/api/predict",
"method": "POST",
"description": "成本预测"
},
"analyze-features": {
"url": "/api/analyze-features",
"method": "POST",
"description": "特征分析"
},
"train": {
"url": "/api/train",
"method": "POST",
"description": "模型训练"
},
"evaluate": {
"url": "/api/evaluate",
"method": "POST",
"description": "模型评估"
}
}
}
### 2. 单模型预测
使用当前激活的最优模型进行成本预测。
- **URL**: `/predict`
- **方法**: `POST`
- **请求体示例** (巡飞弹):
```json
{
"type": "巡飞弹",
"length_m": 1.3,
"width_m": 0.23,
"height_m": 0.23,
"weight_kg": 12.5,
"max_range_km": 40,
"max_speed_ms": 50,
"cruise_speed_kmh": 100,
"flight_time_min": 60,
"folded_length_mm": 1300,
"folded_width_mm": 230,
"folded_height_mm": 230,
"warhead_type": "破片杀伤战斗部",
"launch_mode": "凭自身动力起飞"
}
```
- **响应示例**:
```json
{
"predicted_cost": 150000.0,
"model_info": {
"type": "xgboost",
"name": "巡飞弹_20241111_model",
"r2_score": 0.95,
"mae": 5000.0,
"rmse": 7500.0
},
"confidence_interval": {
"lower": 135000.0,
"upper": 165000.0
}
}
```
### 3. PLS 模型预测
使用 PLS 回归模型进行预测。
- **URL**: `/pls/predict`
- **方法**: `POST`
- **请求体**: 与单模型预测相同
- **响应示例**:
```json
{
"predicted_cost": 148000.0,
"confidence_interval": {
"lower": 133000.0,
"upper": 163000.0
}
}
```
### 4. 多模型预测
使用所有激活的模型进行预测并返回综合结果。
- **URL**: `/predict/all`
- **方法**: `POST`
- **请求体**: 与单模型预测相同
- **响应示例**:
```json
{
"individual_predictions": {
"xgboost": {
"predicted_cost": 150000.0,
"model_info": {
"name": "巡飞弹_xgboost_model",
"type": "xgboost",
"r2_score": 0.95,
"mae": 5000.0,
"rmse": 7500.0
},
"confidence_interval": {
"lower": 135000.0,
"upper": 165000.0
}
},
"pls": {
"predicted_cost": 148000.0,
"model_info": {
"name": "巡飞弹_pls_model",
"type": "pls",
"r2_score": 0.92,
"mae": 5500.0,
"rmse": 8000.0
},
"confidence_interval": {
"lower": 133000.0,
"upper": 163000.0
}
}
},
"ensemble_prediction": {
"predicted_cost": 149000.0,
"standard_deviation": 1414.21,
"confidence_interval": {
"lower": 146228.15,
"upper": 151771.85
}
}
}
```
### 5. 特征分析
分析数据集中特征的重要性和相关性。
- **URL**: `/analyze-features`
- **方法**: `POST`
- **请求体示例**:
```json
{
"dataset_id": 1,
"equipment_type": "巡飞弹"
}
```
- **响应示例**:
```json
{
"important_features": [
{
"name": "最大射程(km)",
"importance": 0.35
},
{
"name": "重量(kg)",
"importance": 0.25
}
],
"correlation_analysis": {
"features": ["最大射程(km)", "重量(kg)"],
"matrix": [[1.0, 0.8], [0.8, 1.0]]
}
}
```
### 6. 模型训练
训练新的模型。
- **URL**: `/train`
- **方法**: `POST`
- **请求体示例**:
```json
{
"type": "巡飞弹",
"train_dataset_id": 1,
"validation_dataset_id": 2,
"models": ["xgboost", "lightgbm", "rf"]
}
```
- **响应示例**:
```json
{
"metrics": {
"xgboost": {
"train": {
"r2": 0.95,
"mae": 5000.0,
"rmse": 7500.0
},
"validation": {
"r2": 0.92,
"mae": 5500.0,
"rmse": 8000.0
}
}
},
"best_model": {
"type": "xgboost",
"r2": 0.92,
"mae": 5500.0,
"rmse": 8000.0
}
}
```
### 7. 数据集管理
#### 7.1 获取数据集列表
- **URL**: `/datasets`
- **方法**: `GET`
- **响应示例**:
```json
[
{
"id": 1,
"name": "训练数据集",
"description": "用于训练的数据集",
"equipment_type": "巡飞弹",
"equipment_count": 10,
"equipment_names": ["设备1", "设备2"],
"purpose": "训练",
"created_at": "2024-11-11T10:00:00"
}
]
```
#### 7.2 获取数据集详情
- **URL**: `/datasets/{id}`
- **方法**: `GET`
- **响应示例**:
```json
{
"id": 1,
"name": "训练数据集",
"description": "用于训练的数据集",
"equipment_type": "巡飞弹",
"purpose": "训练",
"created_at": "2024-11-11T10:00:00",
"equipment": [
{
"id": 1,
"name": "设备1",
"type": "巡飞弹",
"manufacturer": "制造商1",
"actual_cost": 150000
}
],
"statistics": {
"equipment_count": 10,
"total_cost": 1500000,
"average_cost": 150000
}
}
```
#### 7.3 创建数据集
- **URL**: `/datasets`
- **方法**: `POST`
- **请求体示例**:
```json
{
"name": "测试数据集",
"description": "用于测试的数据集",
"equipment_type": "巡飞弹",
"purpose": "训练",
"equipment_ids": [1, 2, 3]
}
```
- **响应示例**:
```json
{
"id": 2,
"message": "数据集创建成功"
}
```
#### 7.4 更新数据集
- **URL**: `/datasets/{id}`
- **方法**: `PUT`
- **请求体示例**:
```json
{
"name": "更新后的数据集名称",
"description": "更新后的描述",
"equipment_type": "巡飞弹",
"purpose": "验证",
"equipment_ids": [1, 2, 3, 4]
}
```
- **响应示例**:
```json
{
"success": true,
"message": "数据集更新成功"
}
```
#### 7.5 删除数据集
- **URL**: `/datasets/{id}`
- **方法**: `DELETE`
- **描述**: 删除指定的数据集及其关联关系
- **响应示例**:
```json
{
"success": true,
"message": "数据集删除成功"
}
```
注意事项:
1. 数据集删除后不会删除关联的装备数据
2. 不能删除正在被模型使用的数据集
3. 更新数据集时会重新计算统计信息
4. 数据集的装备类型一旦创建后不能更改
### 8. 模型管理
#### 8.1 获取模型列表
- **URL**: `/models`
- **方法**: `GET`
- **响应示例**:
```json
[
{
"id": 1,
"model_name": "巡飞弹_xgboost_model",
"model_type": "xgboost",
"equipment_type": "巡飞弹",
"r2_score": 0.95,
"mae": 5000.0,
"rmse": 7500.0,
"is_active": true,
"training_date": "2024-11-11T10:00:00"
}
]
```
#### 8.2 获取最新模型
- **URL**: `/models/{equipment_type}/latest`
- **方法**: `GET`
- **响应示例**: 与模型列表的单个模型格式相同
#### 8.3 获取模型详情
- **URL**: `/models/{id}`
- **方法**: `GET`
- **响应示例**:
```json
{
"id": 1,
"model_name": "巡飞弹_xgboost_model",
"model_type": "xgboost",
"equipment_type": "巡飞弹",
"r2_score": 0.95,
"mae": 5000.0,
"rmse": 7500.0,
"is_active": true,
"training_date": "2024-11-11T10:00:00",
"feature_importance": {
"max_range_km": 0.35,
"weight_kg": 0.25,
"length_m": 0.20
},
"training_data_size": 100,
"created_by": "system"
}
```
#### 8.4 激活模型
- **URL**: `/models/{id}/activate`
- **方法**: `POST`
- **描述**: 激活指定模型,同时会将同类型的其他模型设置为非激活状态
- **响应示例**:
```json
{
"success": true,
"message": "模型已激活"
}
```
#### 8.5 删除模型
- **URL**: `/models/{id}`
- **方法**: `DELETE`
- **描述**: 删除指定模型,包括模型文件和数据库记录
- **响应示例**:
```json
{
"success": true,
"message": "模型已删除"
}
```
注意事项:
1. 删除模型时会同时删除相关的文件和数据库记录
2. 不能删除当前正在使用(已激活)的模型
3. 激活模型时会自动取消同类型其他模型的激活状态
4. 模型详情包含了更多的训练相关信息,如特征重要性等
### 9. 数据管理
#### 9.1 获取装备数据列表
- **URL**: `/data`
- **方法**: `GET`
- **响应示例**:
```json
{
"rocket_artillery": [
{
"id": 1,
"name": "BM-21",
"type": "火箭炮",
"manufacturer": "俄罗斯",
"length_m": 7.35,
"width_m": 2.4,
"height_m": 3.1,
"weight_kg": 13700,
"max_range_km": 20.4,
"actual_cost": 800000
}
],
"loitering_munition": [
{
"id": 8,
"name": "Hero-120",
"type": "巡飞弹",
"manufacturer": "以色列",
"length_m": 1.3,
"width_m": 0.23,
"height_m": 0.23,
"weight_kg": 12.5,
"max_range_km": 40,
"actual_cost": 150000
}
]
}
```
#### 9.2 获取装备详情
- **URL**: `/data/details/{id}`
- **方法**: `GET`
- **响应示例**:
```json
{
"id": 8,
"name": "Hero-120",
"type": "巡飞弹",
"manufacturer": "以色列",
"common_params": {
"length_m": 1.3,
"width_m": 0.23,
"height_m": 0.23,
"weight_kg": 12.5,
"max_range_km": 40
},
"specific_params": {
"wingspan_m": 2.1,
"warhead_weight_kg": 3.5,
"max_speed_ms": 50,
"cruise_speed_kmh": 100,
"flight_time_min": 60,
"warhead_type": "破片杀伤战斗部",
"launch_mode": "箱式发射",
"power_system": "电动机",
"guidance_system": "GPS/INS"
},
"cost_data": {
"actual_cost": 150000,
"prediction_date": "2024-11-11T10:00:00",
"predicted_cost": 148000
},
"custom_params": [
{
"id": 1,
"param_name": "续航时间",
"param_value": "2小时",
"param_unit": "小时",
"description": "最大续航时间"
}
]
}
```
#### 9.3 更新装备数据
- **URL**: `/data/{id}`
- **方法**: `PUT`
- **请求体示例**:
```json
{
"name": "Hero-120",
"manufacturer": "以色列",
"length_m": 1.3,
"width_m": 0.23,
"height_m": 0.23,
"weight_kg": 12.5,
"max_range_km": 40,
"wingspan_m": 2.1,
"warhead_weight_kg": 3.5,
"max_speed_ms": 50,
"cruise_speed_kmh": 100,
"flight_time_min": 60,
"actual_cost": 150000,
"custom_params": [
{
"id": 1,
"param_value": "2.5小时"
}
]
}
```
- **响应示例**:
```json
{
"success": true,
"message": "装备数据更新成功"
}
```
#### 9.4 删除装备数据
- **URL**: `/data/{id}`
- **方法**: `DELETE`
- **响应示例**:
```json
{
"success": true,
"message": "装备数据删除成功"
}
```
#### 9.5 下载数据模板
- **URL**: `/data/template`
- **方法**: `GET`
- **描述**: 下载Excel格式的数据导入模板
- **响应**: Excel文件下载
#### 9.6 导入数据
- **URL**: `/data/import`
- **方法**: `POST`
- **请求体**:
- Content-Type: multipart/form-data
- 参数名: file
- 文件类型: .xlsx 或 .xls
- **响应示例**:
```json
{
"success": true,
"message": "数据导入成功",
"imported_count": {
"rocket_artillery": 3,
"loitering_munition": 5
}
}
```
注意事项:
1. 导入数据时必须使用系统提供的模板
2. 更新装备数据时会同时更新关联的参数表
3. 删除装备数据会同时删除相关的参数和成本数据
4. 导入的Excel文件大小不应超过10MB
5. 所有数值字段必须符合指定的单位和范围要求
6. 特殊参数的值必须包含单位信息
## 错误响应
所有接口在发生错误时都会返回以下格式的响应:
```json
{
"error": "错误描述信息"
}
```
## 注意事项
1. 所有数值参数必须大于0
2. 所有单位必须按照参数名称中指定的单位提供
3. 预测结果中的成本单位为元
4. 置信区间表示预测结果的95%置信水平范围
5. 所有请求和响应的编码均为 UTF-8