# 装备成本估算系统 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