# MLflow 模型打包：保存输入签名与附件，在新环境拒绝错误列并回读结果

## 执行范围

已运行MLflow pyfunc保存签名/词表附件，并在新Python进程加载预测；错误命名列被原生拒绝。模型为作者小型词表分类器，未训练或调用LLM。

## 输入与目标

原创小型sklearn分类器、词表附件与命名输入列

交付：本地模型目录、签名、附件和原生预测对照

## 运行

在 reference 目录执行；先按文件 requirements.txt / package.json 或原生工具文档安装依赖。浏览器练习需 `npx playwright install chromium`；也可设置 `PLAYWRIGHT_EXECUTABLE_PATH` 为自己的 Chrome 路径。

```sh
python package_model.py
```

## 目录

- fixtures：作者原创输入，不包含用户真实资料。
- starter：读者待完成任务。
- reference：作者完成参考。
- results：作者实际运行所得或明确标注的待运行输入/预期合同。

## 七步

1. **定义命名输入**

原创模型输入term列，输出known布尔列。词表是独立附件，不把作者机器目录硬编码进predict。

2. **实现加载上下文**

PythonModel.load_context从context.artifacts读取词表。真实预测依赖打包后的附件，而非运行目录恰好有同名文件。

3. **保存签名与样例**

用infer_signature建立term到known合同，附input_example并保存模型。签名和样例用途不同，不能仅存演示JSON。

4. **移交模型目录**

把MLmodel、序列化模型与artifacts一同移到独立results/model。相对附件路径须仍可解析。

5. **新进程回读预测**

另起Python进程调用mlflow.pyfunc.load_model，用harbor与absent得到True/False。不能只在训练进程里复用内存对象。

6. **拒绝错误列**

把term换成wrong_column，实际原生签名校验拒绝。多列或不同dtype的合同还需按自己的模型补充测试。

7. **封存依赖边界**

交付小模型目录、输入样例和新进程结果。只加载可信模型文件，本文未执行远端注册、推理服务或大型权重。

## 来源

- https://mlflow.org/docs/latest/ml/model/signatures/


## 原生工具与边界补充

results/model含作者创建的微型MLflow模型与词表附件。只加载本题可信模型；不包含运行数据库或大型权重。
