

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 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 | Nova 2 Lite | 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)。

以 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)。在**遊樂場中使用測試**來評估和比較回應與基礎模型。

**重要**  
您可以向 Amazon Bedrock 提供最多 20K個提示，以微調模型。

## 支援的 Nova 模型
<a name="rft-nova-supported-models"></a>

下表顯示您可以使用強化微調來自訂的 Amazon Nova 模型：

**注意**  
如需其他支援模型的資訊，包括開放權重模型，請參閱 [使用 OpenAI相容的 APIs 微調開放權重模型](fine-tuning-openai-apis.md)。


**支援強化微調的模型**  

| 供應商 | 模型 | 模型 ID | 單一區域模型支援 | 
| --- | --- | --- | --- | 
| Amazon | Nova 2 Lite | 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 加密，請參閱 [建立模型自訂的 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 的 Grader Lambda 函數許可
<a name="rft-grader-lambda-permissions"></a>

如果您為從 AI Feedback (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/*"
            ]
        }
    ]
}
```

以下是使用推論描述檔做為判斷調用的基礎 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 使用客戶端儲存的調用/轉換 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)。

您必須先提供 Amazon Bedrock 許可，以從 S3 儲存貯體存取 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"
    }
}
```

當您啟動強化微調任務時，您可以將調用日誌指定為輸入資料來源。您可以使用 API AWS CLI或 SDK，透過 Amazon Bedrock 主控台啟動強化微調任務。

##### 提供請求中繼資料的需求
<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 函數提供範例範本：
+ 使用 Ground Truth 驗證的數學推理
+ 格式驗證和限制條件檢查
+ 具有樣板程式碼的一般分級器 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 會最佳化主觀任務的模型，例如使用 AI 型判斷器搭配ready-to-use範本的指示跟隨或聊天機器人互動。

**對於 RLAIF （模型做為判斷）：**
+ 選取 Amazon Bedrock 託管基礎模型做為判斷
+ 設定評估指示
+ 定義評估條件和評分準則

Amazon Bedrock 主控台中可用的 LLM-as-Judge提示範本：
+ 說明如下 （判斷模型訓練）
+ 摘要 （多迴轉對話方塊）
+ 合理性評估 （專用網域的 CoT)
+ RAG 忠誠度 （內容型問答）

**注意**  
主控台的 **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 任務可能需要幾個小時的時間，取決於訓練資料的大小、epoch 數量，以及獎勵函數的複雜性。

## 先決條件
<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 主控台，並在**調校**下導覽至**自訂模型**。

1. 選擇**建立**，然後選擇**建立強化微調任務**。

1. 在**模型詳細資訊**區段中，選擇 **Amazon Nova 2 Lite** 作為基礎模型。

1. 在**自訂詳細資訊**區段中，輸入自訂名稱。

1. 在**訓練資料**區段中，選擇您的資料來源。從存放在 Amazon S3 中的可用調用日誌中選取，或選取訓練資料集檔案的 Amazon S3 位置，或直接從您的裝置上傳檔案。
**注意**  
您的訓練資料集應該是 OpenAI 聊天完成資料格式。如果您以 Amazon Bedrock 調用或轉換格式提供調用日誌，Amazon Bedrock 會自動將其轉換為聊天完成格式。

1. 在**獎勵函數**區段中，設定您的獎勵機制：
   + **模型作為判斷 (RLAIF)** - 選取 Bedrock 託管基礎模型作為判斷，並設定評估指示。將此用於主觀任務，例如內容管制。
**注意**  
主控台的 **Model as judge** 選項會在訓練期間自動將您的組態轉換為 Lambda 函數。
   + **自訂程式碼 (RLVR)** - 使用透過 Lambda 函數執行的 Python 程式碼建立自訂獎勵函數。將此用於程式碼產生等目標任務。

   如需詳細資訊，請參閱[設定 Amazon Nova 模型的獎勵函數](reward-functions.md)。

1. （選用） 在**超參數**區段中，調整訓練參數或使用預設值。

1. 在**輸出資料**區段中，輸入 Amazon Bedrock 應儲存任務輸出的 Amazon S3 位置。

1. 在**角色組態**區段中，從下拉式清單中選擇現有角色，或輸入要建立之服務角色的名稱。

1. （選用） **在其他組態**區段中，指向 Amazon S3 儲存貯體、KMS 加密設定，以及任務和模型標籤來設定驗證資料。

1. 選擇**建立強化微調任務**以開始任務。

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

傳送 CreateModelCustomizationJob 請求，並將 `customizationType`設定為 `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/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 任務的進行而即時更新。這些視覺化效果可協助您：
+ 追蹤收斂以獲得最佳效能
+ 及早識別潛在的訓練問題
+ 確定最佳停止點
+ 比較不同 epoch 的效能

## 設定推論
<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>
+ **上傳訓練檔案** – 使用檔案 API 上傳和管理訓練資料以進行微調任務
+ **建立微調任務** – 使用自訂訓練資料和獎勵函數開始微調任務
+ **列出和擷取任務** – 檢視所有微調任務，並取得特定任務的詳細資訊
+ **監控任務事件** – 透過詳細的事件日誌追蹤微調進度
+ **存取檢查點** – 擷取訓練期間建立的中繼模型檢查點
+ **立即推論** – 微調完成後，使用產生的微調模型，透過 Amazon Bedrock 的 OpenAI 相容 APIs （回應/聊天完成 API) 進行隨需推論，而無需額外的部署步驟
+ **輕鬆遷移** – 與現有的 OpenAI SDK 程式碼庫相容

## 開放式加權模型的強化微調工作流程
<a name="fine-tuning-openai-workflow"></a>

在微調之前，請確保您有先決條件，因為 Amazon Bedrock 需要特定許可來建立和管理微調程序。如需完整的安全性和許可資訊，請參閱 [開放權重模型的存取和安全性](rft-open-weight-access-security.md)。

以 5 個步驟對開放權重模型執行強化微調：

1. **上傳訓練資料集** – 使用檔案 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相容的回應或聊天完成 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 金鑰 （適用於 OpenAI SDK 和 HTTP 請求）
   + AWS 登入資料 (HTTP 請求支援）
**注意**  
如果您使用的是 Amazon Bedrock 短期/長期 API 金鑰，請確定您的角色可存取下列 IAM 政策許可： `AmazonBedrockMantleFullAccess`和 [AWSLambdaRole](https://docs.aws.amazon.com/bedrock/latest/ug/rft-open-weight-access-security#openai-fine-tuning-lambda-permissions)。

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)。

以下是使用調用 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-20K 範例。每個訓練範例都包含：
+ `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"
```

------

### 刪除檔案
<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 訓練資料需要三個關鍵特性：
+ **清晰度和一致性** – 使用具有一致格式的明確、不明確提示。避免矛盾的標籤、模棱兩可的指示，或誤導訓練的衝突參考答案。
+ **多樣性** - 包括各種輸入格式、邊緣案例和難度等級，反映不同使用者類型和案例的生產使用模式。
+ **高效率獎勵函數** – 設計快速執行 （秒，而非分鐘） 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 函數中，您可以靈活地實作評估邏輯：
+ **目標任務** – 針對程式碼產生或數學推理等目標任務，請使用可驗證的規則型分級器，檢查已知標準或測試案例的正確性。
+ **主觀任務** – 對於如下指示或聊天機器人互動等主觀任務，請呼叫 Amazon Bedrock 基礎模型做為 Lambda 函數中的判斷，以根據您的條件評估回應品質。

您的 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>

微調任務完成後，您可以透過回應 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>

使用聊天完成 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>

使用遊樂場測試功能進行快速、臨機操作的評估。若要使用遊樂場測試功能，需要設定推論。如需詳細資訊，請參閱[設定要評估的推論](#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 模型。
+ **使用多樣化的測試案例** - 包含代表實際使用案例的各種提示類型和案例。
+ **驗證獎勵一致性** - 確保您的模型改進符合訓練期間使用的獎勵函數。
+ **測試邊緣案例** - 評估具有挑戰性或不尋常輸入的模型行為，以評估穩健性。
+ **監控回應一致性** - 檢查您的模型是否在具有類似提示的多個執行中提供一致的品質。