

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

# 为开放式权重模型准备数据
<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
}
```

------