Model OPD 开发:纯蒸馏无需编写函数组件,叠加 Reward(进阶用法)评分函数开发,含数据格式与常见问题
Model OPD 开发只需准备数据与提交配置即可开训(纯蒸馏,无需编写函数组件)——学生模型输出生成由百炼完成,无需编写。需按业务目标在线优化时,再编写 Reward 评分函数叠加到训练流程(进阶用法)。两种用法差异如下。训练概述见在线策略蒸馏训练概述。
每行一条 JSONL,
纯蒸馏不写任何函数,开发工作仅为准备数据与提交配置。
注册 Reward 组件后,控制面在每条 Rollout 后调用它评分,产出分维度指标参与训练。
继承
原生 Rollout 的输出里,除了学生的回答,还混着思考过程与工具调用格式的文本。不清理会干扰 Reward 评分,需先剔掉这些只留回答再评分。清理步骤:
写好
提交训练前先本地验证 Reward 评分逻辑,避免到训练任务里才发现评分错误(浪费算力)。对
运行测试:
测试覆盖命中、思考链残留、未命中等场景。扩展维度后相应增加断言。
维度 | 无 Reward(纯蒸馏) | 有 Reward |
|---|---|---|
开发工作 | 仅准备数据与提交配置,无需编写函数组件 | 额外编写 Reward 评分函数 |
训练信号 | 教师模型逐 token 概率分布(唯一监督) | 教师分布 + 任务奖励(按标准答案或多维度评分) |
适用场景 | 教师模型已是任务上限、无需按任务目标在线优化 | 需按业务目标在线优化、拉向标准答案 |
数据格式
每行一条 JSONL,messages 为对话列表,rollout_extra 携带附加信息。
messages 中 system 放任务说明,user 为用户输入。rollout_extra.solution 存 ground truth(标准答案),供 Reward 读取。纯蒸馏不注册 Reward,rollout_extra 仅作数据标记不被消费;启用 Reward 时 Reward 从 solution 取评分基准。
无 Reward 开发参考(纯蒸馏)
纯蒸馏不写任何函数,开发工作仅为准备数据与提交配置。
提交代码
functions=None 使控制面(调度层)执行原生 Rollout(百炼内置的采样生成,学生模型直接生成输出、不传 tools 参数;相对 Agentic OPD 的多轮/自定义交互与自定义 Rollout)。教师模型蒸馏为唯一监督信号。纯蒸馏须传 None 而非空列表 [](控制面对两者处理不保证相同)。
叠加 Reward(进阶用法)
注册 Reward 组件后,控制面在每条 Rollout 后调用它评分,产出分维度指标参与训练。
Reward 函数结构
继承 AbstractRewardProcessor,实现 async process(input: RewardInput) -> RewardOutput,关键约定如下:
- 装饰器自动接入 Tracing:
process用@observe_processor装饰,追踪客户端(trace client)由装饰器隐式注入,process 方法内不显式调用 - 输入字段:
RewardInput含ground_truth与agent_output(原生 Rollout 产出,只读) - 输出字段:
RewardOutput含Reward(reward_score, reward_metrics)与TaskStatus
RewardInput / RewardOutput 关键字段:
字段 | 来源 | 用途 |
|---|---|---|
| RewardInput(源自 rollout_extra.solution) | 评分基准 |
| 原生 Rollout 产出 | 取末轮 assistant content |
| Reward.reward_score | 主分,单独上报 |
| Reward.reward_metrics | 其余维度 dict[float] |
| TaskStatus | 处理结果状态 |
输出文本清理
原生 Rollout 的输出里,除了学生的回答,还混着思考过程与工具调用格式的文本。不清理会干扰 Reward 评分,需先剔掉这些只留回答再评分。清理步骤:
- 剥离思考链 thinking
- 剔除工具调用文本
评分逻辑
reward_score 为主奖励标量,reward_metrics 为附加维度字典(每值 float)。reward_score 单独赋给 Reward.reward_score,不重复进 reward_metrics(metrics.pop("reward_score"))。维度划分与权重由任务决定,按业务自行实现。
下面是最小可跑实现:content 含 ground_truth 即得 1.0,否则 0.0,便于先跑通链路再扩展维度。
提交启用 Reward 的训练任务
写好 MyRewardProcessor 后,用 RewardFunctionComponent 把它注册到 functions 列表即可。run() 一步完成注册 → 上传数据 → 提交任务。
classpath 指向 MyRewardProcessor 所在模块路径;zipdir="." 把整个工作区打包上传。完整字段说明见训练配置。
函数测试
提交训练前先本地验证 Reward 评分逻辑,避免到训练任务里才发现评分错误(浪费算力)。对 your_scoring_function 输入样例 content 与 ground_truth,断言各维度值符合预期。把以下测试与 your_scoring_function、strip_reasoning 放进同一文件(如 test_reward.py),本地即可跑通。
后续步骤
- 训练配置(超参、资源、数据源)见 在线策略蒸馏训练配置
- 可观测(Tracing、指标面板)见 在线策略蒸馏可观测配置