

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# オープンウェイトモデルのデータを準備する
<a name="rft-prepare-data-open-weight"></a>

OpenAI 互換 APIs を使用して強化ファインチューニングを使用してオープンウェイトモデルをファインチューニングする場合は、目的 を使用して独自のプロンプトを JSONL 形式で取得してトレーニングデータを提供します`fine-tune`。

## トレーニングデータの形式と要件
<a name="rft-data-format-open-weight"></a>

トレーニングデータは、100-20K000 の例を含む OpenAI チャット完了形式に従う必要があります。各トレーニングの例は次のとおりです。
+ `messages`: このフィールドには、モデルに提供される入力プロンプトを含むユーザー、システム、またはアシスタントロールを含めます。
+ `reference_answer`: このフィールドには、報酬関数がモデルのレスポンスをスコアリングするために使用する期待される出力または評価基準が含まれている必要があります。これは構造化された出力に限定されず、報酬関数が品質を評価するのに役立つ任意の形式を含めることができます。
+ [オプション] グレーダー Lambda がグレーディングに使用するフィールドを追加できます。

**要件:**
+ OpenAI チャット完了形式のプロンプトを含む JSONL 形式 (1 行あたり 1 つのプロンプト)
+ 目的は に設定する必要があります `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"
```

------

### ファイルを削除する
<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 ]

に DELETE リクエストを行います`/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 トレーニングデータには、次の 3 つの主要な特性が必要です。
+ **明確性と一貫性** – 明確であいまいなプロンプトを一貫したフォーマットで使用します。トレーニングを誤解する矛盾するラベル、あいまいな指示、または矛盾する参照回答は避けてください。
+ **多様性** – さまざまな入力形式、エッジケース、およびさまざまなユーザータイプやシナリオにわたる本番稼働用の使用パターンを反映する難易度レベルが含まれます。
+ **効率的な報酬関数 – **迅速に (数分ではなく秒単位で) 実行され、 と並列化され 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
}
```

------