题目
使用Flask部署简单机器学习模型API
信息
- 类型:问答
- 难度:⭐
考点
模型部署,RESTful API设计,基本错误处理
快速回答
实现步骤:
- 创建Flask应用实例
- 加载预训练模型(伪代码示例)
- 定义POST接口路由
- 解析JSON输入并调用模型预测
- 返回JSON格式预测结果
- 添加基础错误处理
原理说明
AI工程化的核心是将机器学习模型转化为可访问的服务。Flask作为轻量级Web框架,通过RESTful API暴露模型预测功能:
- 客户端发送JSON格式输入数据
- 服务端加载模型并执行预测
- 返回JSON格式的预测结果
代码示例
from flask import Flask, request, jsonify
import joblib # 用于模型加载
app = Flask(__name__)
# 伪代码:实际项目需替换为真实模型路径
# model = joblib.load('model.pkl')
@app.route('/predict', methods=['POST'])
def predict():
try:
# 1. 获取JSON数据
data = request.json
# 2. 数据预处理(伪代码)
# features = preprocess(data['features'])
# 3. 执行预测(伪代码)
# prediction = model.predict([features])[0]
# 示例硬编码响应
return jsonify({
'prediction': 0.85,
'status': 'success'
})
except Exception as e:
# 4. 错误处理
return jsonify({
'error': str(e),
'status': 'failed'
}), 400
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)最佳实践
- 输入验证:检查必需字段和数据类型
- 模型隔离:单独文件加载模型避免重复加载
- 日志记录:添加logging记录请求和错误
- API文档:使用Swagger描述接口规范
常见错误
| 错误类型 | 解决方案 |
|---|---|
| 未处理JSON解析错误 | 添加try/except捕获JSONDecodeError |
| 缺少Content-Type头 | 客户端需设置Header: Content-Type: application/json |
| 模型版本混淆 | 在响应中添加model_version字段 |
扩展知识
- 生产部署:使用Gunicorn+NGINX替代Flask内置服务器
- 容器化:通过Docker打包环境依赖
- 进阶框架:FastAPI支持异步请求和自动文档生成
- 监控:Prometheus收集API性能指标