# TRL SFT 只训练助手回答：检查模板生成的标签掩码，避免把用户问题也当答案训练

已实跑Hugging Face FastTokenizer的作者小词表/Jinja generation模板，回读真实assistant_masks与labels；非预训练模型tokenizer，未运行TRL collator或训练。

## 运行

在本目录使用独立虚拟环境并安装requirements.txt；脚本结果写入results。

```sh
python reference/audit.py
python reference/run_sdk.py
```

fixtures是原创输入与故意失败样本；作者真值、离线合成provider和实际SDK记录各自标明，不是模型正确率。需要真实模型/账号/GPU的步骤按正文另行授权运行。

## 1. 保存消息角色与原始文本

system、user和assistant分开保存，训练目标只有助手回答。作者token编号仅用于检查掩码逻辑，不是实际tokenizer输出。

## 2. 检查assistant标签参考

audit.py将system/user的四个token设为-100，助手三个保留ID；negative把所有token当标签，应被指出。

## 3. 确认聊天模板支持助手mask

包内实际运行Hugging Face FastTokenizer与作者小词表/带generation边界的模板，保存assistant_masks及tokenizer文件。该实测不等于目标预训练tokenizer；换成真实模型后仍必须重新检查掩码。

## 4. 创建SFTConfig与真实数据集

使用assistant_only_loss=True，并确认数据是conversational格式和目标版本支持。保存tokenizer、模板和预处理结果。

## 5. 检查实际collator的input_ids与labels

在训练前打印脱敏的小批次，逐token映射角色并断言user/system为-100。截断可能切掉全部assistant，要单独拒绝。

## 6. 运行小步训练并核对监督范围

只有目标环境执行后才记录loss与梯度；mask全-100或全监督都应停止修复，不能靠loss下降验收。

## 7. 交付数据、模板和掩码审计

包内包含真实可读训练数据与作者mask检查，无训练权重或真实TRL训练；正式验收必须附实际tokenizer/collator结果。

## 官方依据

- TRL 官方文档或源码：https://huggingface.co/docs/trl/sft_trainer
