View a markdown version of this page

Nova 2.0 上的 RFT - Amazon Nova

Nova 2.0 上的 RFT

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

数据格式与结构

每个训练样本都是一个 JSON 对象,其中包含:

  • messages:使用系统、用户和可选的助手角色进行的对话轮次数组

  • reference_answer:用于奖励计算的预期输出或评测标准

  • tools(选填):可供模型使用的函数定义数组

  • id(选填):用于跟踪和去重的唯一标识符

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

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

{ "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 包含使用领域特定规则计算得出的真实值。奖励函数会将模型的预测值与这些参考值进行比较,以计算奖励分数。

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

{ "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"] } }

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

{ "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" } }

字段描述

字段

说明

附加说明

必需

id

此 RFT 样本的唯一标识符

字符串(例如 sample-001):用于追踪与去重。

消息

定义提示和上下文的聊天消息有序列表

对象数组:模型按顺序查看列表。通常而言,列表以系统消息开头,然后是用户。

messages[].role

消息发送方

常用值:system、user(其他上下文中也可能出现 assistant)

messages[].content

消息文本内容

纯字符串:对系统而言,此为指令;对用户而言,此为任务或输入。

工具

在本示例中模型可用的工具规范

数组:每个项目均定义了工具的界面与元数据。类型可能包括 function 或 internal。

reference_answer

本示例的预期模型输出

字符串或对象(取决于任务):作为评测或培训所用的目标。

注意

任何其他自定义字段(例如 task_id、difficulty_level、context_data)均未经过验证,将作为元数据传递给奖励函数。

超参数指导

根据训练方法,建议采用如下超参数:

常规:

  • epoch:1

  • 学习率(lr):1e – 7

  • 生成次数:8

  • 最大新词元数:8192

  • 批处理大小:256

LoRA(低秩适应):

  • LoRA 秩:32

注意

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

其它属性

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

常见附加字段

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

元数据:

  • task_id:用于跟踪的唯一标识符

  • difficulty_level:问题复杂度指示器

  • domain:主题领域或类别

  • expected_reasoning_steps:解题过程中的步骤数

评测标准:

  • evaluation_criteria:具体评分规则

  • custom_scoring_weights:不同维度的相对权重

  • context_data:问题背景信息

  • external_references:相关文档或资源链接

包含其他属性的示例

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

{ "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 }

数据集规模建议

起步要求

建议采用以下最小数据集规模:

  • 至少 100 个训练样本

  • 至少 100 个评测样本

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

评测优先的方法

在投入大规模 RFT 训练之前,请先评测模型的基线性能:

  • 性能优异(奖励大于 95%):无需进行 RFT,模型表现足够好

  • 性能极差(奖励为 0%):先切换到 SFT,建立基本能力

  • 性能中等:适合采用 RFT 训练

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

有效训练数据的特征

清晰性与一致性

优质的 RFT 样本需要清晰、无歧义的输入数据,以便能够针对不同的模型输出进行准确的奖励计算。数据中应避免以下干扰:

  • 格式不一致

  • 标签或指令相互矛盾

  • 提示词含义模糊

  • 参考答案互相冲突

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

多样性

数据集应覆盖生产环境中的各类使用案例,确保模型在真实环境中表现稳健。包含:

  • 各种问题类型与难度级别

  • 不同的输入格式和边界情况

  • 来自所有预期场景的代表性样本

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

奖励函数注意事项

设计奖励函数,实现高效训练:

  • 在几秒钟内执行完毕(而非几分钟)

  • 使用 Lambda 实现高效并行

  • 返回一致且可靠的分数

  • 妥善处理不同类型的模型输出

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