

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

# Amazon Bedrock で強化ファインチューニングを使用してモデルをカスタマイズする
<a name="reinforcement-fine-tuning"></a>

強化ファインチューニングは、報酬と呼ばれるフィードバックシグナルを通じて「良い」レスポンスを構成するものをモデルに教えることで、基盤モデルのパフォーマンスを向上させる Amazon Bedrock のモデルカスタマイズ手法です。ラベル付きデータセットに依存する従来のファインチューニング方法とは異なり、強化ファインチューニングはフィードバック駆動型のアプローチを使用してモデルを繰り返し最適化し、これらの報酬を最大化します。

## ファインチューニングアプリケーションとシナリオの強化
<a name="reinforcement-fine-tuning-when"></a>

応答品質を評価するための明確で測定可能な成功基準を定義できる場合は、強化ファインチューニングを使用します。強化ファインチューニングは、出力品質を客観的に測定できるドメイン、特に複数の有効なレスポンスが存在する場合、または最適なレスポンスを事前に定義することが困難な場合に適しています。これは、以下に最適です。
+ 数学的問題解決とコード生成 (目標評価にルールベースのグレーダーを使用)
+ 科学的推論と構造化データ分析
+ 指示、コンテンツのモデレーション、クリエイティブライティングなどの主観的なタスク (AI ベースの審査員を使用)
+ 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>

次の表は、強化ファインチューニングでカスタマイズできる基盤モデルを示しています。


**強化ファインチューニングでサポートされているモデル**  

| プロバイダー | モデル | モデル ID | リージョン名 | リージョン | 
| --- | --- | --- | --- | --- | 
| Amazon | ノバ 2 ライト | amazon.nova-2-lite-v1:0:256k |  米国東部 (バージニア北部)  |  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)。

Amazon Nova モデルの強化ファインチューニングを 5 つのステップで実行します。

1. **トレーニングデータセットの提供** – 強化ファインチューニングトレーニングデータセットとして、必要な形式 (JSONL など) でプロンプトをアップロードします。詳細については、「[Amazon Nova モデルのデータを準備する](rft-prepare-data.md)」を参照してください。

1. **Configure Reward Function (grader)** – 正確性、構造、トーン、またはその他の目標に基づいてモデルレスポンスをスコアリングするグレーダーを定義します。報酬関数は、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)」を参照してください。**プレイグラウンドでテスト**を使用して、レスポンスを評価し、ベースモデルと比較します。

**重要**  
Amazon Bedrock に最大 20K 個のプロンプトを提供して、モデルの微調整を強化できます。

## サポートされている Nova モデル
<a name="rft-nova-supported-models"></a>

次の表は、強化ファインチューニングでカスタマイズできる Amazon Nova モデルを示しています。

**注記**  
オープンウェイトモデルなど、サポートされているその他のモデルについては、「」を参照してください[OpenAI互換 APIs](fine-tuning-openai-apis.md)。


**強化ファインチューニングでサポートされているモデル**  

| プロバイダー | モデル | モデル ID | 単一リージョンモデルのサポート | 
| --- | --- | --- | --- | 
| Amazon | ノバ 2 ライト | amazon.nova-2-lite-v1:0:256k | us–east–1 | 

# Amazon Nova モデルのアクセスとセキュリティ
<a name="rft-access-security"></a>

強化ファインチューニングを開始する前に、Amazon Bedrock が RFT 固有のオペレーションに必要なアクセスの種類を理解していることを確認してください。RFT には、報酬関数の実行機能のため、標準のファインチューニングを超える追加のアクセス許可が必要です。

信頼関係、Amazon S3 アクセス許可、KMS 暗号化などの基本的なモデルカスタマイズセキュリティ設定については、「」を参照してください[モデルのカスタマイズ用のサービスロールを作成する](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 アクセス許可、暗号化などのセキュリティ設定については、「」を参照してください[モデルのカスタマイズ用のサービスロールを作成する](custom-model-job-access-security.md#custom-model-job-service-role)。

## RLAIF の grader Lambda 関数のアクセス許可
<a name="rft-grader-lambda-permissions"></a>

AI フィードバックからの強化学習 (RLAIF) 報酬関数用に独自の Lambda 関数を作成する場合は、Lambda 実行ロールに特定のアクセス許可を追加する必要があります。

### LLM 審査員の Bedrock アクセス許可
<a name="rft-bedrock-permissions"></a>

LLM-as-Judge 報酬関数 (RLAIF) の場合、基盤モデルを呼び出すアクセス許可を追加します。Lambda 実行ロールに使用できるポリシーの例を次に示します。

**注記**  
独自の Lambda 関数を作成する場合にのみ、これらのアクセス許可を Lambda 実行ロールに追加します。コンソールを使用して Lambda 関数を作成すると、コンソールによって自動的に処理されます。

基盤モデルを使用した審査員呼び出しとしての基盤 LLM の例を次に示します。

```
{
    "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 が使用するフィールドを追加できます。

**要件:**
+ OpenAI チャット完了形式のプロンプトを含む JSONL 形式 (1 行あたり 1 つのプロンプト)
+ トレーニングデータセットに最低 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 呼び出しログをトレーニングに使用できます。

**要件:**
+ Amazon Bedrock の使用に対して API ログ記録を有効にする必要があります
+ ログはサポートされている形式である必要があります (Amazon Bedrock Invoke/Converse API)
+ 少なくとも 100 個のプロンプト例

呼び出しログを使用して強化ファインチューニングを行うには、モデルの呼び出しログをオンに設定し、モデルの呼び出しオペレーションのいずれかを使用して、Amazon S3 バケットをログの送信先として設定していることを確認します。呼び出しログの設定の詳細については、[CloudWatch Logs と Amazon S3 を使用したモデル呼び出しのモニタリング](https://docs.aws.amazon.com/bedrock/latest/userguide/model-invocation-logging.html)」を参照してください。

S3 バケットからの呼び出しログを入力として強化ファインチューニングジョブを開始する前に、S3 バケットからログにアクセスするためのアクセス許可を Amazon Bedrock に付与する必要があります。詳細については、「[モデルのカスタマイズのアクセスとセキュリティ](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 コンソール、 API、または SDK を使用して AWS CLI、強化ファインチューニングジョブを開始できます。

##### リクエストメタデータを提供するための要件
<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 トレーニングデータには、次の 3 つの主要な特性が必要です。
+ **明確性と一貫性** – 明確であいまいなプロンプトを一貫したフォーマットで使用します。トレーニングを誤解する矛盾するラベル、あいまいな指示、または矛盾する参照回答は避けてください。
+ **多様性** – さまざまな入力形式、エッジケース、およびさまざまなユーザータイプやシナリオにわたる本番稼働用の使用パターンを反映する難易度レベルが含まれます。
+ **効率的な報酬関数 – **迅速に (数分ではなく秒単位で) 実行され、 と並列化され 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 がホストする基盤モデルを審査員として使用して報酬関数を設定できます。ガイド付きテンプレートを使用すると、指示に従う、形式検証などの一般的なタスクの報酬関数の作成を簡素化できます。タスク要件に一致するアプローチを選択します。

## Verifiable Rewards (RLVR) による強化学習
<a name="rft-rlvr"></a>

RLVR は、検証可能なルールベースのグレーダーまたはready-to-useテンプレートを使用して、コード生成や数学の推論などの目標タスクのモデルを最適化します。

RLVR (カスタムコード) には 2 つのオプションがあります。

### オプション 1: コンソール提供のテンプレートを使用する
<a name="w2aac15c25c17c17b5b7b1"></a>

Amazon Bedrock コンソールには、grader Lambda 関数のサンプルテンプレートが用意されています。
+ グラウンドトゥルース検証による数学的推論
+ 形式検証と制約チェック
+ 定型コードを使用した汎用グレーダー Lambda テンプレート

[Amazon Bedrock コンソール](https://console.aws.amazon.com/bedrock)の **RFT ジョブの作成**ページで提供されているテンプレートの指示に従います。

### オプション 2: 独自の Lambda 関数を使用する
<a name="w2aac15c25c17c17b5b7b3"></a>

複雑なロジック、外部 APIs、複数ステップの計算、または複数の評価基準の組み合わせに独自の Lambda ARN を使用してカスタム報酬関数を作成します。

**注記**  
独自の Lambda 関数を使用する場合は、次の点に注意してください。  
複雑な評価では、Lambda タイムアウトをデフォルトの 3 秒から最大 15 分に増やします。
Lambda 実行ロールには、「」で説明されているようにモデルを呼び出すためのアクセス許可が必要です[Amazon Nova モデルのアクセスとセキュリティ](rft-access-security.md)。

## AI フィードバックによる強化学習 (RLAIF)
<a name="rft-rlaif"></a>

RLAIF は、ready-to-useテンプレートを持つ AI ベースの審査員を使用した指示フォローやチャットボットとのやり取りなどの主観的なタスクのモデルを最適化します。

**RLAIF (モデルを審査員として):**
+ Amazon Bedrock がホストするベースモデルを審査員として選択する
+ 評価の手順を設定する
+ 評価基準とスコアリングガイドラインを定義する

Amazon Bedrock コンソールで使用可能な LLM-as-Judge プロンプトテンプレート:
+ 指示に従う (モデルのトレーニングを判断する)
+ 要約 (複数ターンダイアログ)
+ 推論評価 (専用ドメインの CoT)
+ RAG の忠実度 (コンテキストベースの Q&A)

**注記**  
コンソールの **Model as Judge** オプションは、トレーニング中に設定を 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 Chat Completions データ形式である必要があります。Amazon Bedrock の呼び出し形式または逆形式で呼び出しログを指定すると、Amazon Bedrock は自動的にそれらをチャット完了形式に変換します。

1. **報酬関数**セクションで、報酬メカニズムを設定します。
   + **Model as judge (RLAIF)** - Bedrock がホストするベースモデルを審査者として選択し、評価の手順を設定します。これは、コンテンツモデレーションなどの主観的なタスクに使用します。
**注記**  
コンソールの **Model as judge** オプションは、トレーニング中に設定を Lambda 関数に自動的に変換します。
   + **カスタムコード (RLVR)** - Lambda 関数を介して実行される Python コードを使用してカスタム報酬関数を作成します。これは、コード生成などの目標タスクに使用します。

   詳細については、「[Amazon Nova モデルの報酬関数の設定](reward-functions.md)」を参照してください。

1. (オプション) **Hyperparameters** セクションで、トレーニングパラメータを調整するか、デフォルト値を使用します。

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 トレーニング中にビジュアルグラフとメトリクスによるリアルタイムモニタリングを提供します。これらのメトリクスは、モデルが適切に収束するかどうか、および報酬関数が学習プロセスを効果的に導くかどうかを理解するのに役立ちます。

### ジョブステータスの追跡
<a name="rft-job-status"></a>

Amazon Bedrock コンソールで検証フェーズとトレーニングフェーズを通じて RFT ジョブのステータスをモニタリングできます。

**完了インジケータ:**
+ トレーニングが正常に完了すると、ジョブのステータスは**完了**に変わります
+ カスタムモデル 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/min` (出力トークン統計)`response_length/max`、および `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)。

**プレイグラウンドでテスト**を使用してレスポンスを評価し、ベースモデルと比較します。完了した RFT モデルの評価については、「」を参照してください[RFT モデルを評価する](rft-evaluate-model.md)。

# OpenAI互換 APIs
<a name="fine-tuning-openai-apis"></a>

Amazon Bedrock は、基盤モデルを微調整するためのOpenAI互換性のある API エンドポイントを提供します。これらのエンドポイントを使用すると、使い慣れた OpenAI SDK とツールを使用して、Amazon Bedrock モデルでファインチューニングジョブを作成、モニタリング、管理できます。 SDKs このページではAPIs を使用して強化ファインチューニングを行う方法について説明します。

## 主な機能
<a name="fine-tuning-openai-key-capabilities"></a>
+ **トレーニングファイルのアップロード** – Files API を使用して、ファインチューニングジョブのトレーニングデータをアップロードおよび管理します。
+ **ファインチューニングジョブの作成** – カスタムトレーニングデータと報酬関数を使用してファインチューニングジョブを開始します。
+ **ジョブを一覧表示して取得**する – すべてのファインチューニングジョブを表示し、特定のジョブに関する詳細情報を取得します。
+ **ジョブイベントのモニタリング** – 詳細なイベントログを使用してファインチューニングの進行状況を追跡する
+ **アクセスチェックポイント** – トレーニング中に作成された中間モデルチェックポイントを取得する
+ **即時推論** – ファインチューニングが完了したら、Amazon Bedrock の OpenAI 互換 APIs (Responses/chat completions 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. **ファインチューニングジョブの作成** – ベースモデル、データセット、報酬関数、ハイパーパラメータなどのその他のオプション設定を指定して、 OpenAI互換 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. **推論の実行** – Amazon Bedrock の OpenAI互換の Responses API または Chat Completions APIs を使用して、ファインチューニングされたモデル ID を直接推論に使用します。詳細については、「[微調整されたモデルで推論を実行する](fine-tuning-openai-job-create.md#fine-tuning-openai-inference)」を参照してください。

## サポートされているリージョンとエンドポイント
<a name="fine-tuning-openai-supported-regions"></a>

次の表は、OpenAI互換性のあるファインチューニング APIs をサポートする基盤モデルとリージョンを示しています。


**OpenAI 互換性のあるファインチューニング APIs でサポートされているモデルとリージョン**  

| プロバイダー | モデル | モデル ID | リージョン名 | リージョン | Endpoint | 
| --- | --- | --- | --- | --- | --- | 
| 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 キー (OpenAISDK に必要で、HTTP リクエストで使用可能)
   + AWS 認証情報 (HTTP リクエストでサポート)
**注記**  
Amazon Bedrock の短期/長期 API キーを使用している場合は、ロールが `AmazonBedrockMantleFullAccess`および [AWSLambdaRole](https://docs.aws.amazon.com/bedrock/latest/ug/rft-open-weight-access-security#openai-fine-tuning-lambda-permissions) の IAM ポリシーアクセス許可にアクセスできることを確認してください。

1. **OpenAI SDK (オプション)** – SDK OpenAI ベースのリクエストを使用している場合は、Python SDK をインストールします。

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>

トレーニングデータは、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
}
```

------

# オープンウェイトモデルの報酬関数の設定
<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>

ファインチューニングジョブのチェックポイントを一覧表示します。チェックポイントは、微調整中に作成された中間モデルスナップショットで、さまざまなトレーニング段階でパフォーマンスを評価するために推論に使用できます。詳細については、[OpenAI「ファインチューニングチェックポイントのリスト」ドキュメント](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>

ファインチューニングジョブが完了したら、 Responses API または Chat Completions 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>

チャット完了 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>

検証データセットをアップロードすると、トレーニングメトリクスに 2 つの追加グラフが表示されます。
+ **検証報酬** - モデルがトレーニング例を超えてどの程度一般化されているかを示します。トレーニング報酬よりも低いスコアは正常で予想されます。
+ **検証エピソードの長さ** - 表示されない検証データの平均応答時間。トレーニング例と比較して、モデルが新しい入力に応答する効率を示します。

### プレイグラウンドでテストする
<a name="rft-test-playground"></a>

プレイグラウンドでのテスト機能を使用して、迅速でアドホックな評価を行います。プレイグラウンドでテスト機能を使用するには、推論を設定する必要があります。詳細については、「[評価用の推論の設定](#rft-setup-inference-evaluation)」を参照してください。

このインタラクティブなツールを使用すると、次のことが可能になります。
+ RFT モデルを使用してプロンプトを直接テストする
+ カスタムモデルとベースモデル間でレスポンスをside-by-side比較する
+ レスポンス品質の改善をリアルタイムで評価する
+ さまざまなプロンプトを試してモデル機能を評価する

### Bedrock モデル評価
<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 モデルを評価します。
+ **多様なテストケースを使用する** - 実際のユースケースを表すさまざまなプロンプトタイプとシナリオを含めます。
+ **報酬の調整を検証する** - モデルの改善がトレーニング中に使用される報酬関数と一致していることを確認します。
+ **エッジケースのテスト** - 困難または異常な入力に関するモデルの動作を評価して、堅牢性を評価します。
+ **レスポンスの一貫性をモニタリング**する - モデルが同様のプロンプトで複数の実行にわたって一貫した品質を提供していることを確認します。