

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

# 使用 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
  }'
```

------