

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Amazon Bedrock 中通过钢筋微调来自定义模型
<a name="reinforcement-fine-tuning"></a>

强化微调是 Amazon Bedrock 中的一种模型定制技术，它通过称为奖励的反馈信号向模型传授什么构成 “良好” 的响应，从而提高基础模型的性能。与依赖于标记数据集的传统微调方法不同，强化微调使用反馈驱动的方法来迭代优化模型，以最大限度地提高这些回报。

## 加固微调应用和场景
<a name="reinforcement-fine-tuning-when"></a>

当您可以定义清晰、可衡量的成功标准来评估响应质量时，请使用强化微调。钢筋微调在可以客观测量输出质量的领域中表现出色，尤其是在存在多个有效响应或难以预先定义最佳响应时。它非常适合：
+ 数学问题解决和代码生成（使用基于规则的评分器进行客观评估）
+ 科学推理和结构化数据分析
+ 主观任务，例如教学跟踪、内容审核和创意写作（使用基于人工智能的评委）
+ 需要 step-by-step推理或多轮解决问题的任务
+ 有多种有效解决方案的场景，其中一些解决方案明显优于其他解决方案
+ 平衡多个目标（准确性、效率、风格）的应用程序
+ 需要迭代改进、个性化或遵守复杂业务规则的应用程序
+ 可以通过执行结果或性能指标以编程方式验证成功的场景
+ 收集带有标签的高质量样本昂贵或不切实际的情况

## 钢筋微调的好处
<a name="reinforcement-fine-tuning-benefits"></a>
+ **提高模型性能** — 与基础模型相比，钢筋微调平均可将模型精度提高多达 66%。这可以通过微调更小、更快、更高效的模型变体来优化价格和性能。
+ **易用性** — Amazon Bedrock 可自动完成复杂的强化微调，让开发者可以轻松构建 AI 应用程序。您可以使用上传的数据集或现有的 API 调用日志对模型进行微调。您可以使用 Lambda 或评分 model-as-a-judge器定义奖励函数，使用自定义代码对模型输出进行评分，并使用有助于快速设置的内置模板。
+ **安全性与合规性** — 在定制过程中，您的专有数据永远不会离开 AWS安全、受管控的环境。

## 支持钢筋微调的模型
<a name="rft-supported-models"></a>

下表显示了可以通过钢筋微调进行自定义的基础模型：


**支持钢筋微调的模型**  

| Provider | 模型 | 模型 ID | 区域名称 | Region | 
| --- | --- | --- | --- | --- | 
| Amazon | 新星 2 精简版 | amazon.nova-2-lite-v 1:0:256 k |  美国东部（弗吉尼亚州北部）  |  us-east-1  | 
| OpenAI | gpt-oss-20b | openai.gpt-oss-20b | 美国西部（俄勒冈州） | us-west-2 | 
| Qwen | Qwen3 32B | qwen.qwen3-32b | 美国西部（俄勒冈州） | us-west-2 | 

## 钢筋微调的工作原理
<a name="rft-how-it-works"></a>

Amazon Bedrock 可实现钢筋微调工作流程的完全自动化。该模型从您的训练数据集中接收提示，并针对每个提示生成多个响应。然后通过奖励函数对这些响应进行评分。Amazon Bedrock 使用带有分数的即时响应对，使用组相对策略优化 (GRPO) 通过基于策略的学习来训练模型。训练循环一直持续到训练数据的末尾，或者你在选定的检查点停止作业，生成一个针对你重要的指标进行了优化的模型。

## 强化微调最佳实践
<a name="rft-best-practices"></a>
+ **从小**处着手 — 从 100-200 个示例开始，验证奖励功能的正确性，然后根据结果逐步缩放
+ **预微调评估** — 在钢筋微调之前测试基线模型性能。如果奖励始终为0％，请先使用监督微调来建立基本能力。如果奖励大于95％，则可能没有必要进行强化微调
+ **监控培训**-跟踪平均奖励分数和分配。注意是否过度拟合（训练奖励增加，而验证奖励减少）。寻找令人担忧的模式，例如奖励稳定在 0.15 以下、奖励差异随着时间的推移而增加以及验证绩效下降
+ **优化奖励函数** — 在几秒钟（而不是几分钟）内执行，尽量减少外部 API 调用，使用高效算法，实施适当的错误处理，并利用 Lambda 的并行扩展
+ **迭代策略** — 如果奖励没有改善，请调整奖励功能设计，增加数据集的多样性，添加更多具有代表性的示例，并验证奖励信号是否清晰一致

**Topics**
+ [加固微调应用和场景](#reinforcement-fine-tuning-when)
+ [钢筋微调的好处](#reinforcement-fine-tuning-benefits)
+ [支持钢筋微调的模型](#rft-supported-models)
+ [钢筋微调的工作原理](#rft-how-it-works)
+ [强化微调最佳实践](#rft-best-practices)
+ [通过增强微调来微调 Amazon Nova 型号](rft-nova-models.md)
+ [使用兼容功能微调开放式重量模型 OpenAI APIs](fine-tuning-openai-apis.md)
+ [评估您的 RFT 模型](rft-evaluate-model.md)

# 通过增强微调来微调 Amazon Nova 型号
<a name="rft-nova-models"></a>

在微调之前，请确保您具备先决条件，因为 Amazon Bedrock 需要特定的权限才能创建和管理微调流程。有关全面的安全和权限信息，请参阅[Amazon Nova 机型的访问和安全](rft-access-security.md)。

通过 5 个步骤对 Amazon Nova 型号进行强化微调：

1. **提供训练数据集**-上传所需格式（例如 JSONL）的提示作为强化微调训练数据集。有关更多信息，请参阅 [为 Amazon Nova 机型准备数据](rft-prepare-data.md)。

1. **配置奖励功能（评分器）**-定义评分者以根据正确性、结构、语气或其他目标对模型响应进行评分。可以使用 Lambda 执行奖励函数来计算客观分数。您还可以选择模型作为评判（通过控制台），并根据您配置的标准和原则对响应进行评分（控制台会自动将其转换为 Lambda 函数）。有关更多信息，请参阅 [为 Amazon Nova 机型设置奖励功能](reward-functions.md)。

1. **提交钢筋微调作业** — 通过指定基础模型、数据集、奖励函数和其他可选设置（例如超参数）来启动钢筋微调作业。有关更多信息，请参阅 [为 Amazon Nova 机型创建和管理微调任务](rft-submit-job.md)。

1. **监控培训**-跟踪工作状态、奖励指标和培训进度，直到完成。有关更多信息，请参阅 [监控您的 RFT 训练作业](rft-submit-job.md#rft-monitor-job)。

1. **使用微调模型** — 任务完成后，只需单击一下即可部署生成的 RFT 模型以进行按需推理。您也可以将预配置吞吐量用于需要一致性能的任务关键型工作负载。请参阅[为自定义模型设置推理](model-customization-use.md)。使用 Playg **round 中的测试**来评估响应并将其与基础模型进行比较。

**重要**  
您最多可以向 Amazon Bedrock 提供 2 万条提示，用于对模型进行加固微调。

## 支持的新星型号
<a name="rft-nova-supported-models"></a>

下表显示了您可以通过钢筋微调进行自定义的 Amazon Nova 型号：

**注意**  
有关其他支持的型号（包括开放式重量型号）的信息，请参阅[使用兼容功能微调开放式重量模型 OpenAI APIs](fine-tuning-openai-apis.md)。


**支持钢筋微调的模型**  

| Provider | 模型 | 模型 ID | 支持单区域模型 | 
| --- | --- | --- | --- | 
| Amazon | 新星 2 精简版 | amazon.nova-2-lite-v 1:0:256 k | us-east-1 | 

# Amazon Nova 机型的访问和安全
<a name="rft-access-security"></a>

在开始强化微调之前，请务必了解 Amazon Bedrock 需要什么样的访问权限才能进行 RFT 特定的操作。由于RFT具有奖励功能执行功能，因此除了标准微调外，还需要其他权限。

有关基本模型自定义安全设置，包括信任关系、Amazon S3 权限和 KMS 加密，请参阅[为模型自定义创建 IAM 服务角色](custom-model-job-access-security.md#custom-model-job-service-role)。

## 先决条件
<a name="rft-access-prerequisites"></a>

在添加特定于 RFT 的 IAM 权限之前，您必须添加以下 IAM 服务角色：
+ [信任关系](custom-model-job-access-security.md#custom-model-job-service-role-trust-relationship)
+ [访问训练文件和验证文件以及在 S3 中写入输出文件的权限](custom-model-job-access-security.md#custom-model-job-service-role-s3-permissions)

## 特定于 RFT 的 IAM 权限
<a name="rft-iam-permissions"></a>

将这些权限添加到您现有的模型自定义服务角色中，以实现 RFT 功能。

### 奖励函数的 Lambda 权限
<a name="rft-lambda-permissions"></a>

您必须添加 Lambda 调用权限。以下显示了您可以使用的策略示例：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:*:*:function:reward-function-name"
            ]
        }
    ]
}
```

### 调用日志访问权限
<a name="rft-api-log-permissions"></a>

要使用现有 Amazon Bedrock 模型调用日志作为训练数据，请添加访问存储调用日志的 Amazon S3 存储桶的权限。

您需要为输入存储桶提供 Amazon S3 存储桶访问权限。以下显示了您可以使用的策略示例：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::s3-invocation-logs-bucket",
                "arn:aws:s3:::s3-invocation-logs-bucket/*"
            ]
        }
    ]
}
```

有关包括基本 IAM 角色、Amazon S3 权限和加密在内的安全设置，请参阅[为模型自定义创建 IAM 服务角色](custom-model-job-access-security.md#custom-model-job-service-role)。

## RLAIF 的评分者 Lambda 函数权限
<a name="rft-grader-lambda-permissions"></a>

如果您为通过 AI 反馈进行强化学习 (RLAIF) 奖励函数创建自己的 Lambda 函数，则需要向 Lambda 执行角色添加特定权限。

### 法学硕士评委的基石权限
<a name="rft-bedrock-permissions"></a>

对于 LLM-as-Judge奖励函数 (RLAIF)，添加调用基础模型的权限。下面显示了您可以用于 Lambda 执行角色的示例策略。

**注意**  
只有在您创建自己的 Lambda 函数时，才会将这些权限添加到您的 Lambda 执行角色中。通过控制台创建 Lambda 函数时，控制台会自动处理此问题。

以下是使用基础模型作为判断调用的基岩法学硕士的示例：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel"
            ],
            "Resource": [
                "arn:aws:bedrock:*:*:foundation-model/*"
            ]
        }
    ]
}
```

以下是使用推理配置文件将 bedrock LLM 用作判断调用的示例：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1::foundation-model/amazon.nova-premier-v1:0",
                "arn:aws:bedrock:us-east-2::foundation-model/amazon.nova-premier-v1:0",
                "arn:aws:bedrock:us-west-2::foundation-model/amazon.nova-premier-v1:0"
            ],
            "Condition": {
                "StringLike": {
                    "bedrock:InferenceProfileArn": "arn:aws:bedrock:us-east-1:111122223333:inference-profile/us.amazon.nova-premier-v1:0"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel"
            ],
            "Resource": [
                "arn:aws:bedrock:us-east-1:111122223333:inference-profile/us.amazon.nova-premier-v1:0"
            ]
        }
    ]
}
```

有关推理配置文件先决条件的信息，请参阅推理配置文件的[先决条件](https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-prereq.html)。

# 为 Amazon Nova 机型准备数据
<a name="rft-prepare-data"></a>

当您通过强化微调对 Amazon Nova 模型进行微调时，您可以自带提示或使用现有的 Amazon Bedrock API 调用日志作为训练数据。

## 训练数据要求和来源
<a name="rft-data-source-options"></a>

您可以通过以下选项之一提供训练数据：

**注意**  
我们仅支持 OpenAI 聊天完成格式。

### 选项 1：提供您自己的提示
<a name="w2aac15c25c17c15b5b7b1"></a>

收集您的提示并以 `.jsonl` 文件格式存储它们。您可以上传 JSONL 格式的自定义数据集，也可以从 Amazon S3 中选择现有数据集。JSONL 中的每条记录都必须使用以下结构的 OpenAI 聊天完成格式：
+ `messages`：在此字段中，包括包含向模型提供的输入提示的用户、系统或助手角色。
+ `reference_answer`：在此字段中，它应包含您的奖励函数用来对模型的响应进行评分的预期输出或评估标准。它不仅限于结构化输出，还可以包含任何有助于您的奖励功能评估质量的格式。
+ [可选] 您可以添加评分者 Lambda 用于评分的字段。

**要求：**
+ JSONL 格式，提示符采用 OpenAI 聊天完成格式（每行一个提示）
+ 训练数据集中至少有 100 条记录
+ Amazon Bedrock 会自动验证训练数据集的格式

------
#### [ Example: General question-answering ]

```
{
            "messages": [
                {
                    "role": "system", 
                    "content": "You are a helpful assistant"
                },
                {
                    role": "user", 
                    "content": "What is machine learning?"}
            ],
            "reference_answer": "Machine learning is a subset of artificial intelligence that enables computers to learn and make decisions from data without being explicitly programmed."
            }
```

------
#### [ Example: Math problem ]

```
{
  "id": "sample-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"]
  }
}
```

------

### 选项 2：使用调用日志
<a name="w2aac15c25c17c15b5b7b3"></a>

在创建强化微调任务时，您可以让 Amazon Bedrock 使用您的 S3 存储桶中的现有调用日志作为训练数据。对于 Amazon Bedrock，调用日志是模型调用的详细记录。

您可以使用来自 Amazon S3 的客户端存储 Invoke/Converse 的 API 调用日志进行培训。

**要求：**
+ 必须启用 API 日志才能使用 Amazon Bedrock
+ 日志必须采用支持的格式（Amazon Bedrock Invoke/Converse API）
+ 至少 100 个提示示例

要使用调用日志进行强化微调，请将模型调用日志设置为开启，使用其中一个模型调用操作，并确保已将 Amazon S3 存储桶设置为日志的目标。有关设置调用日志的更多信息，请参阅[使用 CloudWatch 日志和 Amazon S3 监控模型调用](https://docs.aws.amazon.com/bedrock/latest/userguide/model-invocation-logging.html)。

在以 S3 存储桶中的调用日志作为输入开始强化微调任务之前，必须提供 Amazon Bedrock 访问来自 S3 存储桶的日志的权限。有关更多信息，请参阅 [模型自定义访问权限和安全性](custom-model-job-access-security.md)。

您可以选择使用其中一个模型调用操作向调用日志中的提示-响应对添加请求元数据，稍后再使用该元数据来筛选日志。Amazon Bedrock 可以使用筛选后的日志来微调模型。

#### 在调用日志中的提示和响应中添加请求元数据
<a name="rft-request-metadata"></a>

通过调用日志，您可以使用附加到调用日志的请求元数据来识别您希望 Amazon Bedrock 用于强化微调的训练数据集提示。

以下是来自调用的调用日志的`InvokeModel`示例：`requestMetadata`

```
{
"schemaType": "ModelInvocationLog",
    "schemaVersion": "1.0",
    "timestamp": "2024-09-11T17:16:18Z",
    "accountId": "XXXXX",
    "identity": {
"arn": "arn:aws:sts::XXXXXXX:assumed-role/Admin/XXXXXX"
    },
    "region": "us-east-1",
    "requestId": "7ee514f3-9eff-467c-af75-8fd564ce58e5",
    "operation": "InvokeModel",
    "modelId": "meta.llama3-1-405b-instruct-v1:0",
    "input": {
"inputContentType": "application/json",
        "inputBodyJson": {
"prompt": "story of two dogs",
            "max_tokens_to_sample": 300
        },
        "inputTokenCount": 13
    },
    "output": {
"outputContentType": "application/json",
        "outputBodyJson": {
"type": "completion",
            "completion": " Here is a story about two dogs:\n\nRex and Charlie were best friends who lived next door to each other. Every morning, their owners would let them out into the backyard to play. Rex was a golden retriever with long, shaggy fur. He loved to run and chase sticks. Charlie was a corgi with short legs and a big smile. He was happy just sniffing the grass and rolling around. \n\nThe two dogs spent every day playing together. Rex would grab a stick and bring it over to Charlie, wagging his tail excitedly. Charlie would take the other end of the stick in his mouth and they'd have a friendly game of tug-of-war. After tiring themselves out, they'd flop down in the warm sunshine for a nap. \n\nAt lunchtime, their owners would call them in for food. Rex would gobble up his kibble hungrily while Charlie ate his at a more leisurely pace. After lunch, it was right back outside for more playtime. The afternoon sunbeams would light up their fur as they chased each other around the yard. \n\nWhen it started getting late, their owners called them in for the night. Rex and Charlie would head inside, tired but happy after another fun day of play. After slurping up fresh water from their bowls, they'd curl up on their beds, Rex's fluffy golden tail tucked over his nose and little",
            "stop_reason": "max_tokens",
            "stop": null
        },
        "outputTokenCount": 300
    },
    "requestMetadata": {
"project": "CustomerService",
        "intent": "ComplaintResolution",
        "priority": "High"
    }
}
```

开始钢筋微调作业时，您可以将调用日志指定为输入数据源。您可以通过 Amazon Bedrock 控制台、 AWS CLI API 或 SDK 开始钢筋微调工作。

##### 提供请求元数据的要求
<a name="rft-metadata-requirements"></a>

请求元数据必须满足以下要求：
+ 以 JSON `key:value` 格式提供。
+ 键值对必须是长度不超过 256 个字符的字符串。
+ 最多提供 16 个键值对。

##### 使用请求元数据筛选条件
<a name="rft-metadata-filters"></a>

一旦包含请求元数据的调用日志可用，您就可以根据请求元数据应用过滤器，有选择地选择要包含哪些提示以微调模型。例如，您可能只想包含那些带有`"project": "CustomerService"`和`"priority": "High"`请求元数据的内容。

要使用多个请求元数据筛选日志，请使用单个布尔运算符`AND`或`OR`。您不能组合这些运算符。要筛选单个请求的元数据，请使用`Equals`或`Not Equals`运算符。

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

有效的 RFT 训练数据需要三个关键特征：
+ **清晰度和一致性** — 使用格式一致的清晰、毫不含糊的提示。避免使用相互矛盾的标签、模棱两可的说明或相互矛盾的参考答案，从而误导培训。
+ **多样性** — 包括不同的输入格式、边缘案例和难度级别，以反映不同用户类型和场景的生产使用模式。
+ **高效的奖励函数** — 设计可快速执行（几秒钟，而不是几分钟）、与之并行并行并返回一致分数的函数 AWS Lambda，从而实现经济高效的训练。

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

RFT 数据格式支持超出核心架构要求的自定义字段（`messages`和`reference_answer`）。这种灵活性使您可以添加奖励功能所需的任何其他数据，以便进行适当的评估。

**注意**  
您无需在食谱中对此进行配置。数据格式本质上支持其他字段。只需将它们包含在您的训练数据 JSON 中，它们就会传递给您的`metadata`现场奖励函数。

**常见的附加属性**
+ `task_id`— 用于跟踪的唯一标识符
+ `difficulty_level`— 问题复杂度指标
+ `domain`— 主题领域或类别
+ `expected_reasoning_steps`— 解决方案中的步骤数

这些额外字段将在评估期间传递给您的奖励函数，从而实现针对您的特定用例量身定制的复杂评分逻辑。

**带有其他属性的示例**

------
#### [ Chemistry problem ]

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

该`reference_answer`字段包含您的奖励函数用来对模型的响应进行评分的预期输出或评估标准。它不仅限于结构化输出，还可以包含任何有助于您的奖励功能评估质量的格式。

------
#### [ Math problem with metadata ]

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

------

# 为 Amazon Nova 机型设置奖励功能
<a name="reward-functions"></a>

奖励函数评估响应质量并为模型训练提供反馈信号。您可以使用自定义 Lambda 函数或 Amazon Bedrock 托管的基础模型作为评委来设置奖励函数。引导式模板可用于简化常见任务的奖励功能创建，例如指导跟踪和格式验证。选择符合您的任务要求的方法。

## 通过可验证奖励 (RLVR) 进行强化学习
<a name="rft-rlvr"></a>

RLVR 使用可验证的基于规则的评分器或模板来优化目标任务（例如代码生成或数学推理）的模型。 ready-to-use

RLVR（自定义代码）有两个选项：

### 选项 1：使用控制台提供的模板
<a name="w2aac15c25c17c17b5b7b1"></a>

Amazon Bedrock 控制台为平地机 Lambda 函数提供了示例模板：
+ 具有真实性验证的数学推理
+ 格式验证和约束检查
+ 带有样板代码的通用评分器 Lambda 模板

按照 [Amazon Bedrock](https://console.aws.amazon.com/bedrock) 控制台中**创建 RFT 任务**页面上提供的模板中的说明进行操作。

### 选项 2：自带自己的 Lambda 函数
<a name="w2aac15c25c17c17b5b7b3"></a>

使用您自己的 Lambda ARN 创建自定义奖励函数，用于复杂逻辑、外部计算 APIs、多步骤计算或组合多个评估标准。

**注意**  
如果您自带了 Lambda 函数，请记住以下几点：  
将复杂评估的 Lambda 超时时间从默认 3 秒增加到最长 15 分钟。
Lambda 执行角色需要权限才能调用模型，如中所述。[Amazon Nova 机型的访问和安全](rft-access-security.md)

## 通过人工智能反馈进行强化学习 (RLAIF)
<a name="rft-rlaif"></a>

RLAIF使用带有模板的基于人工智能的评委来优化主观任务的模型，例如教学跟踪或聊天机器人互动。 ready-to-use

**对于 RLAIF（模特作为评委）：**
+ 选择 Amazon Bedrock 托管的基本模型作为评委
+ 配置评估指令
+ 定义评估标准和评分指南

Amazon Bedrock 控制台中可用的 LLM-as-Judge提示模板：
+ 指导如下（裁判模型训练）
+ 摘要（多回合对话框）
+ 推理评估（专门领域的 CoT）
+ RAG 忠诚度（基于情境的问答）

**注意**  
在训练期间，控制台的 “**模型即判断**” 选项会自动将您的配置转换为 Lambda 函数。

## Lambda 函数实现细节
<a name="rft-lambda-implementation"></a>

实现自定义 Lambda 奖励函数时，您的函数必须接受并返回以下格式的数据。

------
#### [ Input structure ]

```
[{
  "id": "123",
  "messages": [
    {
      "role": "user",
      "content": "Do you have a dedicated security team?"
    },
    {
      "role": "assistant",
      "content": "As an AI developed by Amazon, I don not have a dedicated security team..."
    }
  ],
  "metadata": {
    "reference_answer": {
      "compliant": "No",
      "explanation": "As an AI developed by Company, I do not have a traditional security team..."
    },
    "my_key": "sample-001"
  }
}]
```

------
#### [ Output structure ]

```
[{
  "id": "123",
  "aggregate_reward_score": 0.85,
  "metrics_list": [
    {
      "name": "accuracy",
      "value": 0.9,
      "type": "Reward"
    },
    {
      "name": "policy_compliance",
      "value": 0.8,
      "type": "Metric"
    }
  ]
}]
```

------

**设计指南**
+ **对回复进行排名** — 给最佳答案一个明显更高的分数
+ **使用一致的检查** — 评估任务完成情况、格式遵守情况、安全性和合理的长度
+ **保持稳定的缩放比例** — 保持分数标准化且不可被利用

# 为 Amazon Nova 机型创建和管理微调任务
<a name="rft-submit-job"></a>

您可以使用 Amazon Bedrock 控制台或 API 创建钢筋微调 (RFT) 任务。RFT 作业可能需要几个小时，具体取决于训练数据的大小、周期数和奖励函数的复杂性。

## 先决条件
<a name="rft-prerequisites"></a>
+ 创建具有所需权限的 IAM 服务角色。有关全面的安全和权限信息，包括特定于 RFT 的权限，请参阅。[Amazon Nova 机型的访问和安全](rft-access-security.md)
+ （可选）加密输入和输出数据、您的 RFT 作业或向自定义模型发出的推理请求。有关更多信息，请参阅[自定义模型的加密](https://docs.aws.amazon.com/bedrock/latest/userguide/encryption-custom-job.html)。

## 创建你的 RFT 作业
<a name="rft-submit-job-how-to"></a>

选择与您的首选方法对应的选项卡，然后按照以下步骤操作：

------
#### [ Console ]

要在控制台中提交 RFT 作业，请执行以下步骤：

1. 打开 Amazon Bedrock 控制台，然后导航到 **Tune** 下的**自定义模型**。

1. 选择**创建**，然后选择**创建钢筋微调作业**。

1. 在**型号详情**部分，选择 **Amazon Nova 2 Lite** 作为您的基本型号。

1. 在**自定义详细信息**部分中，输入自定义名称。

1. 在**训练数据**部分，选择您的数据源。您可以从存储在 Amazon S3 中的可用调用日志中进行选择，也可以选择训练数据集文件的 Amazon S3 位置，或者直接从您的设备上传文件。
**注意**  
您的训练数据集应采用 OpenAI 聊天完成数据格式。如果您以 Amazon Bedrock 调用或对话格式提供调用日志，Amazon Bedrock 会自动将其转换为 “聊天完成” 格式。

1. 在**奖励功能**部分，设置您的奖励机制：
   + **Model as judge (RLAIF)**-选择 Bedrock 托管的基本模型作为评判并配置评估说明。将其用于主观任务，例如内容审核。
**注意**  
在训练期间，控制台的 “**模型即判断**” 选项会自动将您的配置转换为 Lambda 函数。
   + **自定义代码 (RLVR)-使用通过 L** ambda 函数执行的 Python 代码创建自定义奖励函数。将其用于诸如代码生成之类的客观任务。

   有关更多信息，请参阅 [为 Amazon Nova 机型设置奖励功能](reward-functions.md)。

1. （可选）在 “**超参数**” 部分中，调整训练参数或使用默认值。

1. 在**输出数据**部分，输入 Amazon Bedrock 应保存任务输出的 Amazon S3 位置。

1. 在 “**角色配置**” 部分，从下拉列表中选择现有角色或输入要创建的服务角色的名称。

1. （可选）在**其他配置**部分中，通过指向 Amazon S3 存储桶、KMS 加密设置以及任务和模型标签来配置验证数据。

1. 选择**创建钢筋微调作业**开始作业。

------
#### [ API ]

发送`customizationType`设置为的 CreateModelCustomizationJob 请求`REINFORCEMENT_FINE_TUNING`。

**必填字段：**`roleArn``baseModelIdentifier`、`customModelName`、`jobName`、、`trainingDataConfig`、`outputDataConfig`、`rftConfig`

**请求示例：**

```
{
    "roleArn": "arn:aws:iam::123456789012:role/BedrockRFTRole",
    "baseModelIdentifier": "amazon.nova-2.0",
    "customModelName": "my-rft-model",
    "jobName": "my-rft-job",
    "customizationType": "REINFORCEMENT_FINE_TUNING",
    "trainingDataConfig": {
        "s3Uri": "s3://my-bucket/training-data.jsonl"
    },
    "customizationConfig": {
        "rftConfig" : {
            "graderConfig": {
                "lambdaGrader": {
                    "lambdaArn": "arn:aws:lambda:us-east-1:123456789012:function:function-name"
                }
            },
            "hyperParameters": {
                "batchSize": 64,
                "epochCount": 2,
                "evalInterval": 10,
                "inferenceMaxTokens": 8192,
                "learningRate": 0.00001,
                "maxPromptLength": 4096,
                "reasoningEffort": "high",
                "trainingSamplePerPrompt": 4
            }
        }
    },
    "outputDataConfig": {
        "s3Uri": "s3://my-bucket/rft-output/"
    }
}
```

**Python API 示例请求：**

```
import boto3

bedrock = boto3.client(service_name='bedrock')
    
# Set parameters
customizationType = "REINFORCEMENT_FINE_TUNING"
baseModelIdentifier = "arn:aws:bedrock:us-east-1::foundation-model/amazon.nova-2-lite-v1:0:256k"
roleArn = "${your-customization-role-arn}"
jobName = "MyFineTuningJob"
customModelName = "MyCustomModel"

customizationConfig = {
    'rftConfig' : {
        'graderConfig': {
            'lambdaGrader': {
                'lambdaArn': 'arn:aws:lambda:us-east-1:123456789012:function:function-name'
            }
        },
        'hyperParameters': {
            'batchSize': 64,
            'epochCount': 2,
            'evalInterval': 10,
            'inferenceMaxTokens': 8192,
            'learningRate':0.00001,
            'maxPromptLength': 4096,
            'reasoningEffort': 'high',
            'trainingSamplePerPrompt':4
        }
    }
}

trainingDataConfig = {"s3Uri": "s3://${training-bucket}/myInputData/train.jsonl"}
outputDataConfig = {"s3Uri": "s3://${output-bucket}/myOutputData"}

# Create job
response_ft = bedrock.create_model_customization_job(
    jobName=jobName, 
    customModelName=customModelName,
    roleArn=roleArn,
    baseModelIdentifier=baseModelIdentifier,
    customizationConfig=customizationConfig,
    trainingDataConfig=trainingDataConfig,
    outputDataConfig=outputDataConfig,
    customizationType=customizationType
)

jobArn = response_ft['jobArn']
```

------

## 监控您的 RFT 训练作业
<a name="rft-monitor-job"></a>

Amazon Bedrock 在 RFT 训练期间通过可视化图表和指标提供实时监控。这些指标可以帮助您了解模型是否正确收敛以及奖励功能是否有效地指导了学习过程。

### Job 状态跟踪
<a name="rft-job-status"></a>

您可以在 Amazon Bedrock 控制台中通过验证和培训阶段监控您的 RFT 作业状态。

**完成指标：**
+ 训练成功**完成**后，Job 状态更改为 “已完成”
+ 自定义模型 ARN 可供部署
+ 训练指标达到收敛阈值

### 实时训练指标
<a name="rft-real-time-metrics"></a>

Amazon Bedrock 通过显示训练和验证指标的可视化图表在 RFT 训练期间提供实时监控。

#### 核心训练指标
<a name="rft-core-metrics"></a>
+ **训练损失**-衡量模型从训练数据中学习的程度
+ **训练奖励统计信息**-显示由您的奖励函数分配的奖励分数
+ **奖励幅度**-衡量好坏回应奖励之间的区别
+ **训练集和验证集的精度**-显示模型在训练和保留数据上的性能

**详细的指标类别**
+ **奖励指标** — `critic/rewards/mean`、`critic/rewards/max`、`critic/rewards/min`（奖励分配）和`val-score/rewards/mean@1`（验证奖励）
+ **模型行为** —`actor/entropy`（政策差异；越高等于探索性越强）
+ **训练运行状况** —`actor/pg_loss`（策略梯度损失）、`actor/pg_clipfrac`（剪辑更新的频率）和`actor/grad_norm`（梯度幅度）
+ **响应特征** — `prompt_length/mean`、`prompt_length/max`、`prompt_length/min`（输入令牌统计信息）`response_length/mean`、、`response_length/max`、`response_length/min`（输出令牌统计信息）和`response/aborted_ratio`（不完整生成率；0 等于全部完成）
+ **性能**-`perf/throughput`（训练吞吐量）、`perf/time_per_step`（每个训练步骤的时间）和`timing_per_token_ms/*`（每个令牌的处理时间）
+ **资源使用情况** — `perf/max_memory_allocated_gb`、`perf/max_memory_reserved_gb`（GPU 内存）和`perf/cpu_memory_used_gb`（CPU 内存）

#### 训练进度可视化
<a name="rft-progress-visualization"></a>

控制台显示交互式图表，这些图表会随着您的 RFT 任务进行实时更新。这些可视化可以帮助您：
+ 追踪趋同以实现最佳性能
+ 尽早发现潜在的培训问题
+ 确定最佳停靠点
+ 比较不同时期的表现

## 设置推理
<a name="rft-setup-inference"></a>

任务完成后，部署 RFT 模型以进行按需推理，或者使用预配置吞吐量以获得稳定的性能。有关设置推理的信息，请参阅[为自定义模型设置推理](model-customization-use.md)。

使用 Playg **round 中的测试**来评估响应并将其与基础模型进行比较。要评估已完成的 RFT 模型，请参阅[评估您的 RFT 模型](rft-evaluate-model.md)。

# 使用兼容功能微调开放式重量模型 OpenAI APIs
<a name="fine-tuning-openai-apis"></a>

Amazon Bedrock 提供了OpenAI兼容的 API 终端节点，用于微调基础模型。这些终端节点允许您使用 Amazon Bedrock 模型使用熟悉OpenAI SDKs 的工具来创建、监控和管理微调任务。本页重点介绍如何使用它们 APIs 进行钢筋微调。

## 关键功能
<a name="fine-tuning-openai-key-capabilities"></a>
+ **上传训练文件**-使用 Files API 上传和管理用于微调作业的训练数据
+ **创建微调作业** — 使用自定义训练数据和奖励函数开始微调作业
+ **列出和检索作业**-查看所有微调任务并获取有关特定任务的详细信息
+ **监控作业事件**-通过详细的事件日志跟踪微调进度
+ **访问检查点**-检索训练期间创建的中间模型检查点
+ **即时推断** — 微调完成后，通过 APIs 兼容 Amazon Bedrock 的 OpenAI（响应/聊天完成 API），使用生成的微调模型进行按需推理，无需额外的部署步骤
+ **易于迁移** — 与现有 OpenAI SDK 代码库兼容

## 开放式重量模型的钢筋微调工作流程
<a name="fine-tuning-openai-workflow"></a>

在微调之前，请确保您具备先决条件，因为 Amazon Bedrock 需要特定的权限才能创建和管理微调流程。有关全面的安全和权限信息，请参阅[开放式重量模型的访问权限和安全性](rft-open-weight-access-security.md)。

通过 5 个步骤对开放式重量模型进行钢筋微调：

1. **上传训练数据集** — 使用 Files API 上传所需格式的提示（例如 JSONL），目的是 “微调” 作为强化微调训练数据集。有关更多信息，请参阅 [为开放式权重模型准备数据](rft-prepare-data-open-weight.md)。

1. **配置奖励函数**-使用 Lambda 函数定义评分者，根据正确性、结构、语气或其他目标对模型响应进行评分。有关更多信息，请参阅 [为开放式权重模型设置奖励函数](reward-functions-open-weight.md)。

1. **创建 Fine OpenAI-Tuning J** ob — 通过指定基础模型、数据集、奖励函数和其他可选设置（例如超参数），使用兼容的 API 启动钢筋微调作业。有关更多信息，请参阅 [创建微调作业](fine-tuning-openai-job-create.md#fine-tuning-openai-create-job)。

1. **监控训练进度**-使用微调作业跟踪作业状态、事件和训练指标。 APIs有关更多信息，请参阅 [列出微调事件](fine-tuning-openai-job-create.md#fine-tuning-openai-list-events)。访问中间模型检查点以评估不同训练阶段的性能，请参阅[列出微调检查点](fine-tuning-openai-job-create.md#fine-tuning-openai-list-checkpoints)。

1. **运行推理** — 直接使用经过微调的模型 ID 通过 Amazon Bedrock OpenAI 兼容的回复或聊天完成进行推理。 APIs有关更多信息，请参阅 [使用经过微调的模型运行推理](fine-tuning-openai-job-create.md#fine-tuning-openai-inference)。

## 支持的区域和终端节点
<a name="fine-tuning-openai-supported-regions"></a>

下表显示了支持OpenAI兼容微调 APIs的基础模型和区域：


**支持OpenAI兼容微调的型号和区域 APIs**  

| Provider | 模型 | 模型 ID | 区域名称 | 区域 | 端点 | 
| --- | --- | --- | --- | --- | --- | 
| OpenAI | gpt-oss-20b | openai.gpt-oss-20b | 美国西部（俄勒冈州） | us-west-2 | bedrock-mantle.us-west-2.api.aws | 
| Qwen | Qwen3 32B | qwen.qwen3-32b | 美国西部（俄勒冈州） | us-west-2 | bedrock-mantle.us-west-2.api.aws | 

# 开放式重量模型的访问权限和安全性
<a name="rft-open-weight-access-security"></a>

在开始钢筋微调 (RFT) 之前，请务必了解 Amazon Bedrock 需要什么样的访问权限才能进行 RFT 特定的操作。由于RFT具有奖励功能执行功能，因此除了标准微调外，还需要其他权限。

## 先决条件
<a name="fine-tuning-openai-prereq"></a>

在使用与 Amazon Bedrock OpenAI 兼容的微调之前 APIs，请确保您具备以下条件：

1. 具有适当权限访问 Amazon Bedrock 的 AWS 账户

1. **身份验证**-您可以使用以下方式进行身份验证：
   + Amazon Bedrock API 密钥（OpenAI软件开发工具包需要且可用于 HTTP 请求）
   + AWS 凭证（支持 HTTP 请求）
**注意**  
[如果您使用的是 Amazon Bedrock 短期/长期 API 密钥，请确保您的角色有权访问以下 IAM 策略权限：和角色。`AmazonBedrockMantleFullAccess` AWSLambda](https://docs.aws.amazon.com/bedrock/latest/ug/rft-open-weight-access-security#openai-fine-tuning-lambda-permissions)

1. **OpenAI软件开发工具包（可选）**— 如果使用基于 SDK 的OpenAI请求，请安装 Python 开发工具包。

1. **环境变量**-设置以下环境变量：
   + `OPENAI_API_KEY`— 设置为你的 Amazon Bedrock API 密钥
   + `OPENAI_BASE_URL`— 设置为您所在地区的 Amazon Bedrock 终端节点（例如，`https://bedrock-mantle.us-west-2.api.aws/v1`）

   有关更多信息，请参阅 [响应 API](bedrock-mantle.md#bedrock-mantle-responses)。

1. 为此，**训练数据**格式化为 JSONL 文件。`fine-tune`有关更多信息，请参阅 [为开放式权重模型准备数据](rft-prepare-data-open-weight.md)。

## 奖励函数的 Lambda 权限
<a name="openai-fine-tuning-lambda-permissions"></a>

您必须添加 Lambda 调用权限。以下显示了您可以使用的策略示例：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:*:*:function:reward-function-name"
            ]
        }
    ]
}
```

您也可以使用 Amazon Bedrock 托管的模型作为评委来设置奖励功能。您需要向 Lambda 执行角色添加调用基础模型的特定权限。在您的 lambda 角色中，您可以配置这些 LLMs 用于评分的托管策略。请参阅[AmazonBedrockLimitedAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockLimitedAccess.html)。

以下是使用 Invoke API 调用 Amazon Bedrock 基础模型作为判断的示例：

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel"
            ],
            "Resource": [
                "arn:aws:bedrock:*:*:foundation-model/*"
            ]
        }
    ]
}
```

# 为开放式权重模型准备数据
<a name="rft-prepare-data-open-weight"></a>

当你使用兼容 OpenAI 的强化微调微调来微调开放权重模型时 APIs，请使用自己的 JSONL 格式提示来提供训练数据。`fine-tune`

## 训练数据格式和要求
<a name="rft-data-format-open-weight"></a>

训练数据必须遵循 OpenAI 聊天完成格式，并附有 100-2 万个示例。每个训练示例都包含：
+ `messages`：在此字段中，包括包含向模型提供的输入提示的用户、系统或助手角色。
+ `reference_answer`：在此字段中，它应包含您的奖励函数用来对模型的响应进行评分的预期输出或评估标准。它不仅限于结构化输出，还可以包含任何有助于您的奖励功能评估质量的格式。
+ [可选] 您可以添加评分者 Lambda 用于评分的字段。

**要求：**
+ JSONL 格式，提示符采用 OpenAI 聊天完成格式（每行一个提示）
+ 目的必须设置为 `fine-tune`
+ 训练数据集中至少有 100 条记录
+ Amazon Bedrock 会自动验证训练数据集的格式

------
#### [ Example: General question-answering ]

```
{
            "messages": [
                {
                    "role": "system", 
                    "content": "You are a helpful assistant"
                },
                {
                    role": "user", 
                    "content": "What is machine learning?"}
            ],
            "reference_answer": "Machine learning is a subset of artificial intelligence that enables computers to learn and make decisions from data without being explicitly programmed."
            }
```

------
#### [ Example: Math problem ]

```
{
  "id": "sample-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"]
  }
}
```

------

## 文件 API
<a name="fine-tuning-openai-files-api"></a>

您可以使用兼容 OpenAI 的文件 api 上传训练数据以进行微调作业。文件安全地存储在 Amazon Bedrock 中，用于创建微调任务。如需完整的 API 详细信息，请参阅[OpenAI文件文档](https://platform.openai.com/docs/api-reference/files)。

### 上传训练文件
<a name="fine-tuning-openai-upload-file"></a>

要上传训练文件，请选择首选方法的选项卡，然后按照以下步骤操作：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Upload training file
with open(TRAINING_FILE_PATH, 'rb') as f:
    file_response = client.files.create(
        file=f,
        purpose='fine-tune'
    )

# Store file ID for next steps
training_file_id = file_response.id
print(f"✅ Training file uploaded successfully: {training_file_id}")
```

------
#### [ HTTP request ]

向以下地址发出 POST 请求`/v1/files`：

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/files \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -F purpose="fine-tune" \
  -F file="@training_data.jsonl"
```

------

### 检索文件详细信息
<a name="fine-tuning-openai-retrieve-file"></a>

要检索有关特定文件的详细信息，请选择首选方法的选项卡，然后按照以下步骤操作：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Retrieve file details
file_details = client.files.retrieve(training_file_id)

# Print raw response
print(json.dumps(file_details.model_dump(), indent=2))
```

------
#### [ HTTP request ]

向以下地址发出 GET 请求`/v1/files/{file_id}`：

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/files/file-abc123 \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

### 列出文件
<a name="fine-tuning-openai-list-files"></a>

要列出上传的文件，请选择首选方法对应的选项卡，然后按照以下步骤操作：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# List files
files_response = client.files.list(purpose='fine-tune')

# Print raw response
print(json.dumps(files_response.model_dump(), indent=2))
```

------
#### [ HTTP request ]

向以下地址发出 GET 请求`/v1/files`：

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/files?purpose=fine-tune \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

### delete-file
<a name="fine-tuning-openai-delete-file"></a>

要删除文件，请选择首选方法的选项卡，然后按照以下步骤操作：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Delete file
delete_response = client.files.delete(training_file_id)
```

------
#### [ HTTP request ]

向以下地址发出 “删除” 请求`/v1/files/{file_id}`：

```
curl -X DELETE https://bedrock-mantle.us-west-2.api.aws/v1/files/file-abc123 \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

## 有效训练数据的特征
<a name="rft-data-characteristics-open-weight"></a>

有效的 RFT 训练数据需要三个关键特征：
+ **清晰度和一致性** — 使用格式一致的清晰、毫不含糊的提示。避免使用相互矛盾的标签、模棱两可的说明或相互矛盾的参考答案，从而误导培训。
+ **多样性** — 包括不同的输入格式、边缘案例和难度级别，以反映不同用户类型和场景的生产使用模式。
+ **高效的奖励函数** — 设计可快速执行（几秒钟，而不是几分钟）、与之并行并行并返回一致分数的函数 AWS Lambda，从而实现经济高效的训练。

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

RFT 数据格式支持超出核心架构要求的自定义字段（`messages`和`reference_answer`）。这种灵活性使您可以添加奖励功能所需的任何其他数据，以便进行适当的评估。

**注意**  
您无需在食谱中对此进行配置。数据格式本质上支持其他字段。只需将它们包含在您的训练数据 JSON 中，它们就会传递给您的`metadata`现场奖励函数。

**常见的附加属性**
+ `task_id`— 用于跟踪的唯一标识符
+ `difficulty_level`— 问题复杂度指标
+ `domain`— 主题领域或类别
+ `expected_reasoning_steps`— 解决方案中的步骤数

这些额外字段将在评估期间传递给您的奖励函数，从而实现针对您的特定用例量身定制的复杂评分逻辑。

**带有其他属性的示例**

------
#### [ Chemistry problem ]

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

该`reference_answer`字段包含您的奖励函数用来对模型的响应进行评分的预期输出或评估标准。它不仅限于结构化输出，还可以包含任何有助于您的奖励功能评估质量的格式。

------
#### [ Math problem with metadata ]

```
{
  "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="reward-functions-open-weight"></a>

奖励函数评估响应质量并为模型训练提供反馈信号。您可以使用自定义 Lambda 函数设置奖励函数。选择与您的任务要求相匹配的方法。

## 用于奖励评估的自定义 Lambda 函数
<a name="rft-custom-lambda-functions"></a>

您可以使用自定义 Lambda 函数设置奖励函数。在您的 Lambda 函数中，您可以灵活地实现评估逻辑：
+ **目标任务** — 对于代码生成或数学推理等客观任务，请使用可验证的基于规则的评分器，根据已知标准或测试用例检查正确性。
+ **主观任务** — 对于主观任务，例如指导关注或聊天机器人互动，请在 Lambda 函数中调用 Amazon Bedrock 基础模型作为评委，根据您的标准评估响应质量。

根据您的任务要求，您的 Lambda 函数可以实现复杂的逻辑 APIs、外部集成、执行多步骤计算或组合多个评估标准。

**注意**  
使用自定义 Lambda 函数时：  
将复杂评估的 Lambda 超时时间从默认 3 秒增加到最长 15 分钟。
Lambda 执行角色需要权限才能调用 Lambda 函数，如中所述。[奖励函数的 Lambda 权限](rft-open-weight-access-security.md#openai-fine-tuning-lambda-permissions)

## Lambda 函数实现细节
<a name="rft-lambda-implementation-open-weight"></a>

在实现自定义 Lambda 奖励函数时，您的函数必须接受并返回以下格式的数据。

------
#### [ Input structure ]

```
[{
  "id": "123",
  "messages": [
    {
      "role": "user",
      "content": "Do you have a dedicated security team?"
    },
    {
      "role": "assistant",
      "content": "As an AI developed by Amazon, I don not have a dedicated security team..."
    }
  ],
  "metadata": {
    "reference_answer": {
      "compliant": "No",
      "explanation": "As an AI developed by Company, I do not have a traditional security team..."
    },
    "my_key": "sample-001"
  }
}]
```

------
#### [ Output structure ]

```
[{
  "id": "123",
  "aggregate_reward_score": 0.85,
  "metrics_list": [
    {
      "name": "accuracy",
      "value": 0.9,
      "type": "Reward"
    },
    {
      "name": "policy_compliance",
      "value": 0.8,
      "type": "Metric"
    }
  ]
}]
```

------

**设计指南**
+ **对回复进行排名** — 给最佳答案打出明显更高的分数
+ **使用一致的检查** — 评估任务完成情况、格式遵守情况、安全性和合理的长度
+ **保持稳定的缩放比例** — 保持分数标准化且不可被利用

# 使用 OpenAI 创建和管理开放权重模型的微调作业 APIs
<a name="fine-tuning-openai-job-create"></a>

兼容 OpenAI 的微调作业 APIs 允许您创建、监控和管理微调作业。本页重点介绍如何使用它们 APIs 进行钢筋微调。有关完整的 API 详细信息，请参阅[OpenAI微调文档](https://platform.openai.com/docs/api-reference/fine-tuning)。

## 创建微调作业
<a name="fine-tuning-openai-create-job"></a>

创建微调作业，开始根据给定数据集创建新模型的过程。如需完整的 API 详细信息，请参阅[OpenAI创建微调任务文档](https://developers.openai.com/api/reference/resources/fine_tuning/subresources/jobs/methods/create)。

### 示例
<a name="fine-tuning-openai-create-job-examples"></a>

要使用 RFT 方法创建微调作业，请选择首选方法的选项卡，然后按照以下步骤操作：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Create fine-tuning job with RFT method
job_response = client.fine_tuning.jobs.create(
    model=MODEL_ID,
    training_file=training_file_id,
    # Suffix field is not supported so commenting for now.
    # suffix="rft-example",  # Optional: suffix for fine-tuned model name
    extra_body={
        "method": {
            "type": "reinforcement", 
            "reinforcement": {
                "grader": {
                    "type": "lambda",
                    "lambda": {
                        "function": "arn:aws:lambda:us-west-2:123456789012:function:my-reward-function"  # Replace with your Lambda ARN
                    }
                },
                "hyperparameters": {
                    "n_epochs": 1,  # Number of training epochs
                    "batch_size": 4,  # Batch size
                    "learning_rate_multiplier": 1.0  # Learning rate multiplier
                }
            }
        }
    }
)

# Store job ID for next steps
job_id = job_response.id
print({job_id})
```

------
#### [ HTTP request ]

向以下地址发出 POST 请求`/v1/fine_tuning/jobs`：

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/fine_tuning/jobs \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "training_file": "file-abc123",
    "model": "gpt-4o-mini",
    "method": {
      "type": "reinforcement",
      "reinforcement": {
        "grader": {
          "type": "lambda",
          "lambda": {
            "function": "arn:aws:lambda:us-west-2:123456789012:function:my-grader"
          }
        },
        "hyperparameters": {
          "n_epochs": 1,
          "batch_size": 4,
          "learning_rate_multiplier": 1.0
        }
      }
    }
  }'
```

------

## 列出微调事件
<a name="fine-tuning-openai-list-events"></a>

列出微调任务的事件。微调事件提供有关任务进度的详细信息，包括训练指标、检查点创建和错误消息。如需完整的 API 详细信息，请参阅[OpenAI列表微调事件文档](https://developers.openai.com/api/reference/resources/fine_tuning/subresources/jobs/methods/list_events)。

### 示例
<a name="fine-tuning-openai-list-events-examples"></a>

要列出微调事件，请选择首选方法的选项卡，然后按照以下步骤操作：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# List fine-tuning events
events = client.fine_tuning.jobs.list_events(
    fine_tuning_job_id="ftjob-abc123",
    limit=50
)

for event in events.data:
    print(f"[{event.created_at}] {event.level}: {event.message}")
    if event.data:
        print(f"  Metrics: {event.data}")
```

------
#### [ HTTP request ]

向以下地址发出 GET 请求`/v1/fine_tuning/jobs/{fine_tuning_job_id}/events`：

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/fine_tuning/jobs/ftjob-abc123/events?limit=50
```

------

活动包括以下信息：
+ 培训开始和完成消息
+ 检查点创建通知
+ 每个步骤的训练指标（损失、准确性）
+ 任务失败时的错误消息

要对所有事件进行分页，请选择首选方法对应的选项卡，然后按照以下步骤操作：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Paginate through all events
all_events = []
after = None

while True:
    events = client.fine_tuning.jobs.list_events(
        fine_tuning_job_id="ftjob-abc123",
        limit=100,
        after=after
    )
    
    all_events.extend(events.data)
    
    if not events.has_more:
        break
    
    after = events.data[-1].id
```

------
#### [ HTTP request ]

使用以下`after`参数发出多个 GET 请求：

```
# First request
curl https://bedrock-mantle.us-west-2.api.aws/v1/fine_tuning/jobs/ftjob-abc123/events?limit=100

# Subsequent requests with 'after' parameter
curl "https://bedrock-mantle.us-west-2.api.aws/v1/fine_tuning/jobs/ftjob-abc123/events?limit=100&after=ft-event-abc123"
```

------

## 检索微调作业
<a name="fine-tuning-openai-retrieve-job"></a>

获取有关微调任务的详细信息。如需完整的 API 详细信息，请参阅[OpenAI检索微调任务文档](https://developers.openai.com/api/reference/resources/fine_tuning/subresources/jobs/methods/retrieve)。

### 示例
<a name="fine-tuning-openai-retrieve-job-examples"></a>

要检索特定的工作详细信息，请选择首选方法的选项卡，然后按照以下步骤操作：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Retrieve specific job details
job_details = client.fine_tuning.jobs.retrieve(job_id)

# Print raw response
print(json.dumps(job_details.model_dump(), indent=2))
```

------
#### [ HTTP request ]

向以下地址发出 GET 请求`/v1/fine_tuning/jobs/{fine_tuning_job_id}`：

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/fine_tuning/jobs/ftjob-abc123 \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

## 列出微调任务
<a name="fine-tuning-openai-list-jobs"></a>

列出贵组织支持分页的微调任务。如需完整的 API 详细信息，请参阅[OpenAI列出微调任务文档](https://developers.openai.com/api/reference/resources/fine_tuning/subresources/jobs/methods/list)。

### 示例
<a name="fine-tuning-openai-list-jobs-examples"></a>

要列出带有限制和分页的微调作业，请选择首选方法的选项卡，然后按照以下步骤操作：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# List fine-tuning jobs with limit and pagination
response = client.fine_tuning.jobs.list(
    limit=20  # Maximum number of jobs to return
)

# Print raw response
print(json.dumps(response.model_dump(), indent=2))
```

------
#### [ HTTP request ]

向以下地址发出 GET 请求`/v1/fine_tuning/jobs`：

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/fine_tuning/jobs?limit=20 \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

## 取消微调作业
<a name="fine-tuning-openai-cancel-job"></a>

取消正在进行的微调任务。一旦取消，任务将无法恢复。如需完整的 API 详细信息，请参阅[OpenAI取消微调任务文档](https://developers.openai.com/api/reference/resources/fine_tuning/subresources/jobs/methods/cancel)。

### 示例
<a name="fine-tuning-openai-cancel-job-examples"></a>

要取消微调作业，请选择首选方法的选项卡，然后按照以下步骤操作：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Cancel fine-tuning job
cancel_response = client.fine_tuning.jobs.cancel("ftjob-abc123")

print(f"Job ID: {cancel_response.id}")
print(f"Status: {cancel_response.status}")  # Should be "cancelled"
```

------
#### [ HTTP request ]

向以下地址发出 POST 请求`/v1/fine_tuning/jobs/{fine_tuning_job_id}/cancel`：

```
curl -X POST https://bedrock-mantle.us-west-2.api.aws/v1/fine_tuning/jobs/ftjob-abc123/cancel \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

## 列出微调检查点
<a name="fine-tuning-openai-list-checkpoints"></a>

列出微调作业的检查点。检查点是在微调期间创建的中间模型快照，可用于推断，以评估不同训练阶段的性能。有关更多信息，请参阅 [OpenAIList 微调检查点文档](https://developers.openai.com/api/reference/resources/fine_tuning/subresources/jobs/subresources/checkpoints/methods/list)。

### 示例
<a name="fine-tuning-openai-list-checkpoints-examples"></a>

要列出微调作业的检查点，请选择首选方法的选项卡，然后按照以下步骤操作：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# List checkpoints for a fine-tuning job
checkpoints = client.fine_tuning.jobs.checkpoints.list(
    fine_tuning_job_id="ftjob-abc123",
    limit=10
)

for checkpoint in checkpoints.data:
    print(f"Checkpoint ID: {checkpoint.id}")
    print(f"Step: {checkpoint.step_number}")
    print(f"Model: {checkpoint.fine_tuned_model_checkpoint}")
    print(f"Metrics: {checkpoint.metrics}")
    print("---")
```

------
#### [ HTTP request ]

向以下地址发出 GET 请求`/v1/fine_tuning/jobs/{fine_tuning_job_id}/checkpoints`：

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/fine_tuning/jobs/ftjob-abc123/checkpoints?limit=10
```

------

每个检查点包括：
+ **检查点 ID**-检查点的唯一标识符
+ **步骤编号**-创建检查点的训练步骤
+ **模型检查点**-可用于推理的模型标识符
+ **指标**-此检查点的验证损失和准确性

要使用检查点模型进行推理，请选择首选方法的选项卡，然后按照以下步骤操作：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Test inference with a checkpoint
response = client.chat.completions.create(
    model=checkpoint.fine_tuned_model_checkpoint,
    messages=[{"role": "user", "content": "What is AI?"}],
    max_tokens=100
)

print(response.choices[0].message.content)
```

------
#### [ HTTP request ]

向以下地址发出 POST 请求`/v1/chat/completions`：

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ft:gpt-4o-mini:openai:custom:7p4lURel:ckpt-step-1000",
    "messages": [{"role": "user", "content": "What is AI?"}],
    "max_tokens": 100
  }'
```

------

## 使用经过微调的模型运行推理
<a name="fine-tuning-openai-inference"></a>

微调任务完成后，您可以使用经过微调的模型通过响应 API 或聊天完成 API 进行推理。有关 API 的完整详细信息，请参阅[使用生成响应 OpenAI APIs](bedrock-mantle.md)。

### 响应 API
<a name="fine-tuning-openai-responses-api"></a>

在经过微调的模型中使用 Responses API 生成单圈文本：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Get the fine-tuned model ID
job_details = client.fine_tuning.jobs.retrieve("ftjob-abc123")

if job_details.status == 'succeeded' and job_details.fine_tuned_model:
    fine_tuned_model = job_details.fine_tuned_model
    print(f"Using fine-tuned model: {fine_tuned_model}")
    
    # Run inference with Responses API
    response = client.completions.create(
        model=fine_tuned_model,
        prompt="What is the capital of France?",
        max_tokens=100,
        temperature=0.7
    )
    
    print(f"Response: {response.choices[0].text}")
else:
    print(f"Job status: {job_details.status}")
    print("Job must be in 'succeeded' status to run inference")
```

------
#### [ HTTP request ]

向以下地址发出 POST 请求`/v1/completions`：

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "ft:gpt-4o-mini:openai:custom-model:7p4lURel",
    "prompt": "What is the capital of France?",
    "max_tokens": 100,
    "temperature": 0.7
  }'
```

------

### 聊天完成 API
<a name="fine-tuning-openai-inference-examples"></a>

使用 Chat Completions API 与经过微调的模型进行对话互动：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Get the fine-tuned model ID
job_details = client.fine_tuning.jobs.retrieve("ftjob-abc123")

if job_details.status == 'succeeded' and job_details.fine_tuned_model:
    fine_tuned_model = job_details.fine_tuned_model
    print(f"Using fine-tuned model: {fine_tuned_model}")
    
    # Run inference
    inference_response = client.chat.completions.create(
        model=fine_tuned_model,
        messages=[
            {"role": "user", "content": "What is the capital of France?"}
        ],
        max_tokens=100
    )
    
    print(f"Response: {inference_response.choices[0].message.content}")
else:
    print(f"Job status: {job_details.status}")
    print("Job must be in 'succeeded' status to run inference")
```

------
#### [ HTTP request ]

向以下地址发出 POST 请求`/v1/chat/completions`：

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "ft:gpt-4o-mini:openai:custom-model:7p4lURel",
    "messages": [
      {"role": "user", "content": "What is the capital of France?"}
    ],
    "max_tokens": 100
  }'
```

------

# 评估您的 RFT 模型
<a name="rft-evaluate-model"></a>

成功完成钢筋微调工作后，您可以使用多种评估方法评估自定义模型的性能。Amazon Bedrock 提供了内置评估工具，可帮助您将 RFT 模型与基本模型进行比较，并验证改进情况。

**Topics**
+ [评估方法](#rft-evaluation-methods)
+ [为评估设置推理](#rft-setup-inference-evaluation)
+ [评估最佳实践](#rft-evaluation-best-practices)

## 评估方法
<a name="rft-evaluation-methods"></a>

Amazon Bedrock 提供了多种评估您的 RFT 模型性能的方法。

### 验证指标
<a name="rft-validation-metrics"></a>

如果您上传验证数据集，您将在训练指标中看到另外两个图表。
+ **验证奖励**-显示您的模型在训练示例之外的泛化效果。分数低于训练奖励是正常的，也是预期的。
+ **验证剧集长度**-看不见的验证数据的平均响应时长。显示与训练示例相比，您的模型对新输入的响应效率如何。

### 在操场上测试
<a name="rft-test-playground"></a>

使用 Playground 测试功能进行快速、临时的评估。要使用 Playground 中的测试功能，需要设置推理。有关更多信息，请参阅 [为评估设置推理](#rft-setup-inference-evaluation)。

此交互式工具允许您：
+ 直接使用您的 RFT 模型测试提示
+ 比较您的自定义模型和基础模型 side-by-side之间的响应
+ 实时评估响应质量的改进
+ 尝试使用不同的提示来评估模型能力

### 基岩模型评估
<a name="rft-model-evaluation"></a>

使用 Amazon Bedrock 的模型评估，使用您自己的数据集来评估您的 RFT 模型。这提供了具有标准化指标和基准的全面性能分析。以下是 Amazon Bedrock 模型评估优势的一些示例。
+ 使用自定义测试数据集进行系统评估
+ 定量绩效比较
+ 用于一致评估的标准化指标
+ 与现有的 Amazon Bedrock 评估工作流程集成

## 为评估设置推理
<a name="rft-setup-inference-evaluation"></a>

在评估 RFT 模型之前，请使用以下选项之一设置推理：

### 按需型推理
<a name="rft-on-demand-inference"></a>

创建自定义模型按需部署，以实现灵活的 pay-per-use评估。此选项包括基于代币的定价，根据推理期间处理的代币数量收费。

## 评估最佳实践
<a name="rft-evaluation-best-practices"></a>
+ **系统地比较** ——始终使用相同的测试提示和评估标准对照基础模型评估您的 RFT 模型。
+ **使用不同的测试用例**-包括代表您的真实用例的各种提示类型和场景。
+ **验证奖励一致性**-确保您的模型改进与训练期间使用的奖励功能保持一致。
+ **测试边缘案例**-评估具有挑战性或异常输入的模型行为，以评估稳健性。
+ **监控响应一致性**-使用相似的提示检查您的模型在多次运行中是否提供一致的质量。