ML采用手册
本技能提供一种适应性方法论,用于在现有软件工程项目中实现机器学习模型。它通过结构化机器学习的研究、解耦、训练和集成方式,弥合传统软件工程与机器学习运维之间的差距。
何时激活
- 用户请求为其现有代码库“添加ML”或“添加算法”。
- 规划将新模型(如推荐、分类、预测)集成到非机器学习应用中。
- 为智能体构建工作流以自适应地构建、训练和部署机器学习组件。
阶段1:问题框架与可行性
在编写模型代码之前,先明确“为什么”和“怎么做”。
- 启发式检查: 询问用户是否可以用简单的启发式方法(如正则表达式、基于规则的排序)更快地解决问题。如果可以,从此处开始。
- 指标定义: 定义机器学习模型旨在改进的业务指标(如点击率、降低延迟)。
- 错误预算: 定义“糟糕”的预测是什么样的,以及系统应如何处理它。
阶段2:数据准备
没有干净、可访问的数据,机器学习就毫无用处。
- 审计数据源: 确定训练数据存放的位置。是实时数据库、静态CSV文件还是API?
- 数据合同: 为输入数据建立一个模式。需要哪些特征?如果某个特征缺失会发生什么?
- 泄漏预防: 确保用户提议的数据拆分不会意外地将未来信息泄露到训练集中(例如,对时间序列数据进行时间顺序拆分)。
阶段3:架构集成与解耦
不要将模型推理与核心业务逻辑紧密耦合。
- API边界: 建议将模型放在API端点后面(例如,使用
fastapi-patterns或django-patterns)或专用的服务类中。 - 回退机制: 设计一个默认状态。如果模型响应时间过长或抛出错误,系统必须优雅地回退到硬编码规则。
- 功能开关: 将新的ML推理调用包装在功能开关中,以便可以安全地推出(或回滚)。
阶段4:模型实现与训练
为使代码可重复和可迭代而结构化。
- 从简单开始: 首先构建一个基线模型(例如,简单的scikit-learn逻辑回归或一个基础的PyTorch线性层)。
- 可重复性: 应用
pytorch-patterns或类似最佳实践:固定随机种子、使代码设备无关、明确记录张量/数组的形状。 - 自动化证据: 要求对数据转换和推理模式进行测试。不接受没有与基线进行比较的评估脚本的模型。
阶段5:交接至MLOps
基线模型集成后,将重点转向持续运维。
- 参考
mle-workflow: 引导用户设置实验跟踪、模型注册表和漂移检测。 - CI/CD: 将模型评估步骤添加到现有CI流水线中,以确保未来的提交不会降低模型性能。
迭代智能体工作流
通过本手册协助用户时,智能体应:
- 提出澄清性问题 以在提出架构之前完成阶段1。
- 起草数据合同 在阶段2供用户批准。
- 编写解耦接口(API/服务)在阶段3中,在编写训练循环之前。
- 交付可复现的脚本 在阶段4中,该脚本训练模型并保存工件。