# TRL DPO 偏好训练：对齐 chosen 与 rejected 的共同问题，避免模板差异变成偏好

已实跑Hugging Face FastTokenizer的作者小词表/统一模板，核对chosen与rejected共享prompt且completion不同；未加载预训练tokenizer、计算DPO loss或执行TRL训练。

## 运行

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

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

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

## 1. 把共同问题单独保存

每个pair只存一份prompt，chosen/rejected只放助手回答。这样不会把两个不同问题误组成偏好样本。

## 2. 审计正负回答与模板一致

audit.py检查角色及共同prompt，负例故意Q7/Q8问题不同且模板不同。作者合同通过不代表tokenize后长度和前缀仍正确。

## 3. 用同一真实tokenizer套模板

对两边使用同一chat_template和特殊token配置，保存token IDs与共享前缀长度。不要把模板差异学成“更喜欢哪种格式”。

## 4. 构建DPO数据集与配置

按当前TRL支持的显式prompt/偏好格式导入，固定模型与参考模型设置。不要提前把chosen/rejected拼成无法分辨的单文本。

## 5. 检查截断与空回答

确认max_length/max_prompt_length等配置未把两边不同内容截没，也没有把共同问题混入completion loss。版本参数变更要读安装版签名。

## 6. 在目标环境训练并留pair级证据

记录真实loss、chosen/rejected logps和任务质量；作者认为chosen更好并不保证训练后模型学到事实。

## 7. 交付配对、模板与失败清单

本包包含可直接审计JSONL及错配反例，没有TRL训练或伪造DPO损失；目标环境的tokenized pair与模型结果需另附。

## 官方依据

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