CostPrediction/deploy/equipment_cost_system/docs/api.md

13 KiB

装备成本估算系统 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
  • 请求体示例 (巡飞弹):
{
    "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": "凭自身动力起飞"
}
  • 响应示例:
{
    "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
  • 请求体: 与单模型预测相同
  • 响应示例:
{
    "predicted_cost": 148000.0,
    "confidence_interval": {
        "lower": 133000.0,
        "upper": 163000.0
    }
}

4. 多模型预测

使用所有激活的模型进行预测并返回综合结果。

  • URL: /predict/all
  • 方法: POST
  • 请求体: 与单模型预测相同
  • 响应示例:
{
    "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
  • 请求体示例:
{
    "dataset_id": 1,
    "equipment_type": "巡飞弹"
}
  • 响应示例:
{
    "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
  • 请求体示例:
{
    "type": "巡飞弹",
    "train_dataset_id": 1,
    "validation_dataset_id": 2,
    "models": ["xgboost", "lightgbm", "rf"]
}
  • 响应示例:
{
    "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
  • 响应示例:
[
    {
        "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
  • 响应示例:
{
    "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
  • 请求体示例:
{
    "name": "测试数据集",
    "description": "用于测试的数据集",
    "equipment_type": "巡飞弹",
    "purpose": "训练",
    "equipment_ids": [1, 2, 3]
}
  • 响应示例:
{
    "id": 2,
    "message": "数据集创建成功"
}

7.4 更新数据集

  • URL: /datasets/{id}
  • 方法: PUT
  • 请求体示例:
{
    "name": "更新后的数据集名称",
    "description": "更新后的描述",
    "equipment_type": "巡飞弹",
    "purpose": "验证",
    "equipment_ids": [1, 2, 3, 4]
}
  • 响应示例:
{
    "success": true,
    "message": "数据集更新成功"
}

7.5 删除数据集

  • URL: /datasets/{id}
  • 方法: DELETE
  • 描述: 删除指定的数据集及其关联关系
  • 响应示例:
{
    "success": true,
    "message": "数据集删除成功"
}

注意事项:

  1. 数据集删除后不会删除关联的装备数据
  2. 不能删除正在被模型使用的数据集
  3. 更新数据集时会重新计算统计信息
  4. 数据集的装备类型一旦创建后不能更改

8. 模型管理

8.1 获取模型列表

  • URL: /models
  • 方法: GET
  • 响应示例:
[
    {
        "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
  • 响应示例:
{
    "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
  • 描述: 激活指定模型,同时会将同类型的其他模型设置为非激活状态
  • 响应示例:
{
    "success": true,
    "message": "模型已激活"
}

8.5 删除模型

  • URL: /models/{id}
  • 方法: DELETE
  • 描述: 删除指定模型,包括模型文件和数据库记录
  • 响应示例:
{
    "success": true,
    "message": "模型已删除"
}

注意事项:

  1. 删除模型时会同时删除相关的文件和数据库记录
  2. 不能删除当前正在使用(已激活)的模型
  3. 激活模型时会自动取消同类型其他模型的激活状态
  4. 模型详情包含了更多的训练相关信息,如特征重要性等

9. 数据管理

9.1 获取装备数据列表

  • URL: /data
  • 方法: GET
  • 响应示例:
{
    "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
  • 响应示例:
{
    "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
  • 请求体示例:
{
    "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小时"
        }
    ]
}
  • 响应示例:
{
    "success": true,
    "message": "装备数据更新成功"
}

9.4 删除装备数据

  • URL: /data/{id}
  • 方法: DELETE
  • 响应示例:
{
    "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
  • 响应示例:
{
    "success": true,
    "message": "数据导入成功",
    "imported_count": {
        "rocket_artillery": 3,
        "loitering_munition": 5
    }
}

注意事项:

  1. 导入数据时必须使用系统提供的模板
  2. 更新装备数据时会同时更新关联的参数表
  3. 删除装备数据会同时删除相关的参数和成本数据
  4. 导入的Excel文件大小不应超过10MB
  5. 所有数值字段必须符合指定的单位和范围要求
  6. 特殊参数的值必须包含单位信息

错误响应

所有接口在发生错误时都会返回以下格式的响应:

{
    "error": "错误描述信息"
}

注意事项

  1. 所有数值参数必须大于0
  2. 所有单位必须按照参数名称中指定的单位提供
  3. 预测结果中的成本单位为元
  4. 置信区间表示预测结果的95%置信水平范围
  5. 所有请求和响应的编码均为 UTF-8