你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

强化微调

强化微调(RFT)是一种通过基于奖励的过程来改进推理模型的技术,而不是只依赖于标记的数据。 RFT 可帮助模型开发更好的推理和解决问题技能,特别是在标记示例有限或需要获取复杂行为的情况下。

注释

当 RFT 作业在总培训成本(培训 + 评分)中达到 5,000 美元时,微调服务会自动暂停 RFT 作业。 用户可以部署最新的检查点或恢复训练作业。 如果用户决定恢复作业,则作业的计费将继续且不再设定额外的成本限制。

模型支持

支持强化微调的模型有以下几种:

  • o4-mini 版本 2025-04-16
  • gpt-5 版本 2025-08-07 (预览版)

GPT-5 对强化微调的支持目前处于私密预览阶段,您可能无法在订阅中使用。

要求

强化微调(RFT)需要将训练和验证数据格式化为 JSONL,并包含使用聊天补全格式的 messages 数组。

但是,RFT 具有更多要求:

  • 数据
    • 数据中的“最终消息”必须被分配一个 user 角色。
    • 数据可以包含供评分员使用的额外字段和值。
    • 必须同时提供训练数据集和验证数据集。
  • 评分程序
    • 必须定义一个分级程序,以对微调模型的质量进行评分并指导学习。
    • 只能提供单个评分程序,但可以通过多评分器组合多个评分程序。

训练数据示例

以下示例演示如何向模型显示提示,并包括供评分员使用的真实数据。

{
  "messages": [
    {
      "role": "developer",
      "content": "Your task is to solve logic puzzles. The user will provide an expression with ?'s as placeholders for arithmetic operations. Replace the ?'s with arithmetic operation signs (+, -, *, /) to obtain a valid equation."
    },
    {
      "role": "user",
      "content": "1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 = 100"
    }
  ],
  "solution": "1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 * 9 = 100"
}

注释

此示例拆分为多行,仅用于演示目的。 它必须是 JSONL 文件中的单个行。

评分员

评分员提供训练期间使用的奖励函数,并有权访问数据集中的任何用户提供的字段。 提供了多种类型的评分程序:

  • 文本比较:根据其文本对响应内容进行评分
  • 模型:使用语言模型和提示为响应评分
  • 自定义代码:使用自定义代码对响应进行评分
  • 多级评分器:基于其他评分程序的分数组合评分

大多数评分员通过模板执行运行时数据的替换。 任何输入属性或引用属性都可以包括用双大括号({{ }})括起来的变量替换,其中包含对变量的引用。

每个模板引用都必须使用类似 {{ namespace.variable }}模式进行命名空间化。 对于任何复杂的嵌套数据,都支持 JSON 路径等语法。

支持以下命名空间:

  • sample - 要评分的模型输出在 sample 命名空间下以类似聊天完成响应的格式显示。
  • item - 训练数据中提供的额外字段可选地显示在 item 命名空间下。

使用上述命名空间的模板替换的一些示例:

  • {{ sample.output_text }} - 将模型输出替换为字符串
  • {{ sample.output_json }} - 如果模型生成结构化输出,则将其引用为 JSON
  • {{ item.answer }} - 替换数据集中的“answer”字段
  • {{ item.ground_truth.date }} - 替换数据集中定义的“ground_truth”对象的“date”字段

以下各节记录了各个评分员,并提供其 JSON 规范,用于通过 API 进行定义。

文本比较评分器

当用例要求模型输出明确的标签或输出必须类似于已知的真实结果时,请使用文本比较评分器。

字符串检查评分器

字符串检查评分器将给定操作应用于输入和引用以返回 01,提供简单的通过/失败功能。

{
    "type": "string_check",
    "name": string,
    "operation": "eq" | "ne" | "like" | "ilike",
    "input": string,
    "reference": string,
}

操作:

  • eq:如果输入与引用匹配(区分大小写),则返回 1;否则返回 0
  • neq:如果输入与引用不匹配(区分大小写),则返回 1;否则返回 0
  • like:如果输入包含引用(区分大小写),则返回 1;否则返回 0
  • ilike:如果输入包含引用(不区分大小写),则返回 1;否则返回 0

文本相似度

文本相似性评分器根据选择算法计算分数,以量化输入文本和给定参考文本之间的相似性。

规范:

{
    "type": "text_similarity",
    "name": string,
    "input": string,
    "reference": string,
    "pass_threshold": number,
    "evaluation_metric": "fuzzy_match" | "bleu" | "gleu" | "meteor" | "rouge_1" | "rouge_2" | "rouge_3" | "rouge_4" | "rouge_5" | "rouge_l" 
}

评估指标:

  • fuzzy_match – 使用 RapidFuzz 算法进行模糊字符串匹配
  • bleu – 计算两个字符串的 BLEU(双语评估替补)评分
  • gleu – 计算字符串之间的 Google BLEU 分数
  • meteor - 计算字符串之间的 METEOR 分数
  • rouge-* - 由 rouge python 库定义

模型评分程序

模型评分器向评分模型提供指令,说明如何评估和评分给定的响应。 这种灵活性允许使用提示工程复杂评分程序,这些评分程序支持解释特定分数的原因。

以下模型可用作模型评分器:

  • gpt-4o-2024-08-06
  • o3-mini-2025-01-31

模型分级师不需要在 Foundry 中部署模型。

评分模型

评分模型评分者根据给定的输入和提示输出数值分数。 任何提供的 sampling_params 控制评分模型的行为,并允许自定义诸如温度和推理程度等内容。

{
    "type": "score_model",
    "name": string,
    "input": Message[],
    "model": string,
    "pass_threshold": number,
    "range": number[],
    "sampling_params": object
}

代码评审器

模型评分员提供了一种灵活但不确定的方式来对响应进行评分。 确定性很重要时,代码分级器提供了一种定义评分逻辑的替代方法。

Python 评分程序

Python 评分程序允许执行任意的 Python 代码来生成分数。

提供的代码必须定义一个需要两个 grade 位置参数的函数: sampleitem。 该函数必须返回数值分数。

{
    "type": "python",
    "name": string,
    "source": "def grade(sample, item):\n    return 1.0"
}

Python 代码在受约束的环境中执行,但存在以下限制:

  • 提供的代码的大小必须小于 256 kB
  • 未提供网络访问
  • 两个 (2) GB 内存和一个 (1) GB 的磁盘空间可供使用
  • 一个 (1) 个 CPU 核心可用
  • 评分程序的总运行时限制为 2 分钟

小窍门

代码应处理任何可能的错误,并始终返回数值。 如果在评分程序执行过程中发生过多异常,训练作业将失败。

在 Python 运行时中,以下模块和版本可供提供的代码使用:

  • numpy==2.2.4
  • scipy==1.15.2
  • sympy==1.13.3
  • pandas==2.2.3
  • rapidfuzz==3.10.1
  • scikit-learn==1.6.1
  • rouge-score==0.1.2
  • deepdiff==8.4.2
  • jsonschema==4.23.0
  • pydantic==2.10.6
  • pyyaml==6.0.2
  • nltk==3.9.1
  • sqlparse==0.5.3
  • rdkit==2024.9.6
  • scikit-bio==0.6.3
  • ast-grep-py==0.36.2

端点评估器(预览版)

终结点分级程序通过 HTTP API 调用远程终结点,以对模型响应进行评分。 它们非常适合作为需要访问真实数据以进行准确评分的用例,或者适用于能够以 Python 之外的语言实现评分程序的场合。

在私有预览阶段中,终结点分级器的 API 仍未发布。

多级评分器

多重评分器将多个评分器的输出组合在一起,基于 calculate_output 中提供的算术表达式生成单一分数。

{  
  "type": "multi",
  "name": string,
  "graders": dict[str, Grader],
  "calculate_output": string
}

当多级评分器计算分数时,表达式“calculate_output”通过 graders 对象中的密钥引用所提供的 graders 中的单个分数。

运算符:

  • + (新增)
  • -(减法)
  • * (乘法)
  • /(除法)
  • ^ (电源)

功能:

  • min:计算变量值的最小值
  • max:计算一个值的最大值
  • abs:计算绝对值
  • floor:向下舍入值
  • ceil:将值向上取整
  • exp:计算 e 获得所提供的值的幂
  • sqrt:获取值的平方根
  • log:计算所提供的值的对数

例如,一个由两个评分器(“相似性分数”和“标签检查器”)定义的多级评分器,这两个评分器必须计算其平均输出,可能如下所示:

{
  "type": "multi",
  "name": "Example multigrader",
  "graders": {
    "similarity_score": {
      "type": "text_similarity",
      "name": "similarity grader",
      "input": "{{ sample.output_text }}",
      "reference": "{{ item.summary }}",
      "evaluation_metric": "bleu"
    },
    "label_checker": {
      "type": "string_check",
      "name": "label grader",
      "input": "{{ sample.output_text }}",
      "reference": "{{ item.label }}",
      "operation": "eq"
    }
  },
  "calculate_output": "(similarity_score + label_checker) / 2"
}

响应格式(可选)

可以在训练期间生成结构化输出,以便与模型的预期用例保持一致,或者使输出评分更加轻松。

响应格式配置遵循与聊天完成相同的规范,支持文本(默认值)或 JSON。 当模型应输出 JSON 时,必须提供 JSON 架构。

若要继续前面的 示例,如果模型必须以结构化格式输出响应,例如:

{ "solution": "1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 * 9 = 100" }

以下 JSON 架构描述了响应格式:

{
  "type": "json_schema",
  "name": "puzzles_assistant",
  "schema": {
    "type" : "object",
    "properties": {
      "solution": {
        "type": "string",
        "title": "solution"
      }
    },
    "required": [
      "solution",
    ],
    "additionalProperties": false
  },
  "strict": true
}

超参数选择

强化微调支持与监督式微调相同的超参数。 此外,以下的超参数控制 RFT 的特定功能特性:

超参数名称 价值 违约 DESCRIPTION
eval_interval 整数 auto 评估运行之间的训练步骤数。
eval_samples 整数 auto 评估期间要使用的样本数。
compute_multiplier 数字 auto 训练期间用于探索空间的计算量的乘数。
reasoning_effort lowmediumhigh medium 训练过程中模型使用的推理努力。

注释

训练服务根据提供的训练数据启发式自动将设置为 auto 的超参数替换为默认值。

解释训练结果

强化微调在训练期间提供模型的自动评估和实时训练指标。

训练指标

监视正在运行的作业或检查已完成的作业时,“奖励”和“推理”指标指示训练是否成功。

Reward

奖励指标跟踪作为奖励函数的评分程序生成的分数。

  • train_reward_mean:给定步骤中一批训练数据的平均奖励。 由于每个批次在各个步骤中可能有所不同,因此此指标的趋势比跨步骤比较值更重要。
  • valid_reward_mean:给定步骤中从验证集中获取的示例的平均奖励。

奖励指标通常在培训作业过程中不断增加。 如果它们明显偏离,这表明模型可能在进行奖励攻击,评分程序需要进一步的优化。

推理令牌

每个训练作业跟踪模型生成的推理令牌数。 推理工具指标捕捉模型在整个训练期间如何改变其行为。

  • train_reasoning_tokens_mean:给定步骤中在一批训练数据中生成的推理令牌的平均数量。
  • valid_reasoning_tokens_mean:跨验证数据在某一给定步骤生成的推理标记的平均数量。

该模型可能学会使用较少的推理令牌来实现相同的奖励,或者可能学会使用更多推理令牌来实现更高的奖励。 这些指标通常在训练作业期间上升和下降。

自动评估

为每个 RFT 作业自动创建评估。 训练系统在超参数定义的 eval_interval 定期间隔内,使用验证数据执行评估操作。 可在 Foundry 用户界面通过链接的评估获取每个运行的分数。

检查这些评估提供了一个额外的数据点,用于决定提前停止。 如果模型在训练过程中表现出学习能力,那么在任务的整个执行过程中,每次评估运行的结果都应有所提高。

示例项目和数据集

以下示例演示和数据集为强化微调的新用户提供了起点:

  • 倒计时演示 - 使用 RFT 改进数学推理的端到端演示。
  • MedMCQ - 用于回答医学领域的多选问题的示例数据集和分级程序。
  • ClauseMatching - 示例数据集和分类器,展示了法律域中的摘要和内容解释。