

# Nova 2.0 上的 RFT
<a name="nova-hp-rft-nova2"></a>

RFT 训练数据遵循 OpenAI 对话格式。每个训练样本都是一个 JSON 对象，包含消息、参考答案及可选的工具定义。本节提供相关的指导说明，帮助您了解如何为 Nova 2.0 上的 RFT 准备有效训练数据。

**Topics**
+ [数据格式与结构](#nova-hp-rft-data-format)
+ [字段描述](#nova-hp-rft-field-descriptions)
+ [超参数指导](#nova-hp-rft-monitoring-hyperparams)
+ [其它属性](#nova-hp-rft-additional-properties)
+ [数据集规模建议](#nova-hp-rft-dataset-size)
+ [有效训练数据的特征](#nova-hp-rft-effective-data)
+ [监控 RFT 训练](nova-hp-rft-monitoring.md)

## 数据格式与结构
<a name="nova-hp-rft-data-format"></a>

每个训练样本都是一个 JSON 对象，其中包含：
+ **messages**：使用系统、用户和可选的助手角色进行的对话轮次数组
+ **reference\_answer**：用于奖励计算的预期输出或评测标准
+ **tools**（选填）：可供模型使用的函数定义数组
+ **id**（选填）：用于跟踪和去重的唯一标识符

每个样本需单独占一行，JSONL 文件中每行对应一个 JSON 对象。

### 示例 1：化学问题
<a name="nova-hp-rft-example-chemistry"></a>

以下示例是一个化学问题，其参考答案包含真实值：

```
{  
  "id": "chem-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a helpful chemistry assistant"  
    },  
    {  
      "role": "user",  
      "content": "Predict hydrogen bond donors and acceptors for this SMILES: CCN(CC)CCC(=O)c1sc(N)nc1C"  
    }  
  ],  
  "reference_answer": {  
    "donor_bond_counts": 2,  
    "acceptor_bond_counts": 4,  
    "explanation": "Calculated using Lipinski's rule of five: N-H groups (2 donors), N and O atoms with lone pairs (4 acceptors)"  
  }  
}
```

**注意**  
reference\_answer 包含使用领域特定规则计算得出的真实值。奖励函数会将模型的预测值与这些参考值进行比较，以计算奖励分数。

### 示例 2：数学问题
<a name="nova-hp-rft-example-math"></a>

以下示例是一个包含求解步骤的数学问题：

```
{  
  "id": "math-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a math tutor"  
    },  
    {  
      "role": "user",  
      "content": "Solve: 2x + 5 = 13"  
    }  
  ],  
  "reference_answer": {  
    "solution": "x = 4",  
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]  
  }  
}
```

### 示例 3：工具使用
<a name="nova-hp-rft-example-tool"></a>

以下示例显示了工具使用及预期行为：

```
{  
  "id": "tool-001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a helpful game master assistant"  
    },  
    {  
      "role": "user",  
      "content": "Generate a strength stat for a warrior character. Apply a +2 racial bonus modifier."  
    }  
  ],  
  "tools": [  
    {  
      "type": "function",  
      "function": {  
        "name": "StatRollAPI",  
        "description": "Generates character stats by rolling 4d6, dropping the lowest die result, and applying a modifier.",  
        "parameters": {  
          "type": "object",  
          "properties": {  
            "modifier": {  
              "description": "An integer representing the modifier to apply to the total of the stat roll.",  
              "type": "integer"  
            }  
          },  
          "required": ["modifier"]  
        }  
      }  
    }  
  ],  
  "reference_answer": {  
    "tool_called": "StatRollAPI",  
    "tool_parameters": {  
      "modifier": 2  
    },  
    "expected_behavior": "Call StatRollAPI with modifier=2 and return the calculated stat value"  
  }  
}
```

## 字段描述
<a name="nova-hp-rft-field-descriptions"></a>


| 字段 | 说明 | 附加说明 | 必需 | 
| --- |--- |--- |--- |
| id | 此 RFT 样本的唯一标识符 | 字符串（例如 sample-001）：用于追踪与去重。 | 否 | 
| 消息 | 定义提示和上下文的聊天消息有序列表 | 对象数组：模型按顺序查看列表。通常而言，列表以系统消息开头，然后是用户。 | 是 | 
| messages[].role | 消息发送方 | 常用值：system、user（其他上下文中也可能出现 assistant） | 否 | 
| messages[].content | 消息文本内容 | 纯字符串：对系统而言，此为指令；对用户而言，此为任务或输入。 | 否 | 
| 工具 | 在本示例中模型可用的工具规范 | 数组：每个项目均定义了工具的界面与元数据。类型可能包括 function 或 internal。 | 否 | 
| reference\_answer | 本示例的预期模型输出 | 字符串或对象（取决于任务）：作为评测或培训所用的目标。 | 否 | 

**注意**  
任何其他自定义字段（例如 task\_id、difficulty\_level、context\_data）均未经过验证，将作为元数据传递给奖励函数。

## 超参数指导
<a name="nova-hp-rft-monitoring-hyperparams"></a>

根据训练方法，建议采用如下超参数：

**常规：**
+ epoch：1
+ 学习率（lr）：1e – 7
+ 生成次数：8
+ 最大新词元数：8192
+ 批处理大小：256

**LoRA（低秩适应）：**
+ LoRA 秩：32

**注意**  
请根据数据集规模和验证性能调整这些值。监控训练指标以防止过拟合。

## 其它属性
<a name="nova-hp-rft-additional-properties"></a>

将 additionalProperties 设置为 true 后，即可在核心架构要求之外添加自定义字段，从而灵活提供奖励函数正常评测所需的任意数据。

### 常见附加字段
<a name="nova-hp-rft-common-fields"></a>

您可以包含以下类型的附加字段：

**元数据：**
+ task\_id：用于跟踪的唯一标识符
+ difficulty\_level：问题复杂度指示器
+ domain：主题领域或类别
+ expected\_reasoning\_steps：解题过程中的步骤数

**评测标准：**
+ evaluation\_criteria：具体评分规则
+ custom\_scoring\_weights：不同维度的相对权重
+ context\_data：问题背景信息
+ external\_references：相关文档或资源链接

### 包含其他属性的示例
<a name="nova-hp-rft-additional-example"></a>

以下示例包含自定义元数据字段：

```
{  
  "id": "algebra_001",  
  "messages": [  
    {  
      "role": "system",  
      "content": "You are a math tutor"  
    },  
    {  
      "role": "user",  
      "content": "Solve: 2x + 5 = 13"  
    }  
  ],  
  "reference_answer": {  
    "solution": "x = 4",  
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]  
  },  
  "task_id": "algebra_001",  
  "difficulty_level": "easy",  
  "domain": "algebra",  
  "expected_reasoning_steps": 3  
}
```

## 数据集规模建议
<a name="nova-hp-rft-dataset-size"></a>

### 起步要求
<a name="nova-hp-rft-starting-point"></a>

建议采用以下最小数据集规模：
+ 至少 100 个训练样本
+ 至少 100 个评测样本

优先使用高质量的输入数据，以及能够在模型响应上一致执行的可靠奖励函数。

### 评测优先的方法
<a name="nova-hp-rft-evaluation-first"></a>

在投入大规模 RFT 训练之前，请先评测模型的基线性能：
+ **性能优异（奖励大于 95%）**：无需进行 RFT，模型表现足够好
+ **性能极差（奖励为 0%）**：先切换到 SFT，建立基本能力
+ **性能中等**：适合采用 RFT 训练

这种“评测优先”的方法可确保奖励函数无缺陷，并判断 RFT 是否适用于自己的使用案例。从小规模数据起步，有助于您熟悉 RFT 工作流程，尽早发现并解决问题，在扩容前验证方案，并测试奖励函数的可靠性。验证通过后，即可扩展到更大规模的数据集，进一步提升模型性能。

## 有效训练数据的特征
<a name="nova-hp-rft-effective-data"></a>

### 清晰性与一致性
<a name="nova-hp-rft-clarity"></a>

优质的 RFT 样本需要清晰、无歧义的输入数据，以便能够针对不同的模型输出进行准确的奖励计算。数据中应避免以下干扰：
+ 格式不一致
+ 标签或指令相互矛盾
+ 提示词含义模糊
+ 参考答案互相冲突

任何歧义都会误导训练过程，导致模型学习到非预期的行为。

### 多样性
<a name="nova-hp-rft-diversity"></a>

数据集应覆盖生产环境中的各类使用案例，确保模型在真实环境中表现稳健。包含：
+ 各种问题类型与难度级别
+ 不同的输入格式和边界情况
+ 来自所有预期场景的代表性样本

这种多样性有助于防止过拟合，并确保模型能够妥善处理不熟悉的输入。

### 奖励函数注意事项
<a name="nova-hp-rft-reward-considerations"></a>

设计奖励函数，实现高效训练：
+ 在几秒钟内执行完毕（而非几分钟）
+ 使用 Lambda 实现高效并行
+ 返回一致且可靠的分数
+ 妥善处理不同类型的模型输出

快速且可扩展的奖励函数可支持快速迭代，并在大规模实验中实现高成本效益。