

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

# 使用兼容功能微调开放式重量模型 OpenAI APIs
<a name="fine-tuning-openai-apis"></a>

Amazon Bedrock 提供了OpenAI兼容的 API 终端节点，用于微调基础模型。这些终端节点允许您使用 Amazon Bedrock 模型使用熟悉OpenAI SDKs 的工具来创建、监控和管理微调任务。本页重点介绍如何使用它们 APIs 进行钢筋微调。

## 关键功能
<a name="fine-tuning-openai-key-capabilities"></a>
+ **上传训练文件**-使用 Files API 上传和管理用于微调作业的训练数据
+ **创建微调作业** — 使用自定义训练数据和奖励函数开始微调作业
+ **列出和检索作业**-查看所有微调任务并获取有关特定任务的详细信息
+ **监控作业事件**-通过详细的事件日志跟踪微调进度
+ **访问检查点**-检索训练期间创建的中间模型检查点
+ **即时推断** — 微调完成后，通过 APIs 兼容 Amazon Bedrock 的 OpenAI（响应/聊天完成 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. **创建 Fine OpenAI-Tuning J** ob — 通过指定基础模型、数据集、奖励函数和其他可选设置（例如超参数），使用兼容的 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. **运行推理** — 直接使用经过微调的模型 ID 通过 Amazon Bedrock OpenAI 兼容的回复或聊天完成进行推理。 APIs有关更多信息，请参阅 [使用经过微调的模型运行推理](fine-tuning-openai-job-create.md#fine-tuning-openai-inference)。

## 支持的区域和终端节点
<a name="fine-tuning-openai-supported-regions"></a>

下表显示了支持OpenAI兼容微调 APIs的基础模型和区域：


**支持OpenAI兼容微调的型号和区域 APIs**  

| Provider | 模型 | 模型 ID | 区域名称 | 区域 | 端点 | 
| --- | --- | --- | --- | --- | --- | 
| 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软件开发工具包需要且可用于 HTTP 请求）
   + AWS 凭证（支持 HTTP 请求）
**注意**  
[如果您使用的是 Amazon Bedrock 短期/长期 API 密钥，请确保您的角色有权访问以下 IAM 策略权限：和角色。`AmazonBedrockMantleFullAccess` AWSLambda](https://docs.aws.amazon.com/bedrock/latest/ug/rft-open-weight-access-security#openai-fine-tuning-lambda-permissions)

1. **OpenAI软件开发工具包（可选）**— 如果使用基于 SDK 的OpenAI请求，请安装 Python 开发工具包。

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>

训练数据必须遵循 OpenAI 聊天完成格式，并附有 100-2 万个示例。每个训练示例都包含：
+ `messages`：在此字段中，包括包含向模型提供的输入提示的用户、系统或助手角色。
+ `reference_answer`：在此字段中，它应包含您的奖励函数用来对模型的响应进行评分的预期输出或评估标准。它不仅限于结构化输出，还可以包含任何有助于您的奖励功能评估质量的格式。
+ [可选] 您可以添加评分者 Lambda 用于评分的字段。

**要求：**
+ JSONL 格式，提示符采用 OpenAI 聊天完成格式（每行一个提示）
+ 目的必须设置为 `fine-tune`
+ 训练数据集中至少有 100 条记录
+ Amazon Bedrock 会自动验证训练数据集的格式

------
#### [ Example: General question-answering ]

```
{
            "messages": [
                {
                    "role": "system", 
                    "content": "You are a helpful assistant"
                },
                {
                    role": "user", 
                    "content": "What is machine learning?"}
            ],
            "reference_answer": "Machine learning is a subset of artificial intelligence that enables computers to learn and make decisions from data without being explicitly programmed."
            }
```

------
#### [ Example: Math problem ]

```
{
  "id": "sample-001",
  "messages": [
    {
      "role": "system",
      "content": "You are a math tutor"
    },
    {
      "role": "user",
      "content": "Solve: 2x + 5 = 13"
    }
  ],
  "reference_answer": {
    "solution": "x = 4",
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]
  }
}
```

------

## 文件 API
<a name="fine-tuning-openai-files-api"></a>

您可以使用兼容 OpenAI 的文件 api 上传训练数据以进行微调作业。文件安全地存储在 Amazon Bedrock 中，用于创建微调任务。如需完整的 API 详细信息，请参阅[OpenAI文件文档](https://platform.openai.com/docs/api-reference/files)。

### 上传训练文件
<a name="fine-tuning-openai-upload-file"></a>

要上传训练文件，请选择首选方法的选项卡，然后按照以下步骤操作：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Upload training file
with open(TRAINING_FILE_PATH, 'rb') as f:
    file_response = client.files.create(
        file=f,
        purpose='fine-tune'
    )

# Store file ID for next steps
training_file_id = file_response.id
print(f"✅ Training file uploaded successfully: {training_file_id}")
```

------
#### [ HTTP request ]

向以下地址发出 POST 请求`/v1/files`：

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/files \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -F purpose="fine-tune" \
  -F file="@training_data.jsonl"
```

------

### 检索文件详细信息
<a name="fine-tuning-openai-retrieve-file"></a>

要检索有关特定文件的详细信息，请选择首选方法的选项卡，然后按照以下步骤操作：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Retrieve file details
file_details = client.files.retrieve(training_file_id)

# Print raw response
print(json.dumps(file_details.model_dump(), indent=2))
```

------
#### [ HTTP request ]

向以下地址发出 GET 请求`/v1/files/{file_id}`：

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/files/file-abc123 \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

### 列出文件
<a name="fine-tuning-openai-list-files"></a>

要列出上传的文件，请选择首选方法对应的选项卡，然后按照以下步骤操作：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# List files
files_response = client.files.list(purpose='fine-tune')

# Print raw response
print(json.dumps(files_response.model_dump(), indent=2))
```

------
#### [ HTTP request ]

向以下地址发出 GET 请求`/v1/files`：

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/files?purpose=fine-tune \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

### delete-file
<a name="fine-tuning-openai-delete-file"></a>

要删除文件，请选择首选方法的选项卡，然后按照以下步骤操作：

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Delete file
delete_response = client.files.delete(training_file_id)
```

------
#### [ HTTP request ]

向以下地址发出 “删除” 请求`/v1/files/{file_id}`：

```
curl -X DELETE https://bedrock-mantle.us-west-2.api.aws/v1/files/file-abc123 \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

## 有效训练数据的特征
<a name="rft-data-characteristics-open-weight"></a>

有效的 RFT 训练数据需要三个关键特征：
+ **清晰度和一致性** — 使用格式一致的清晰、毫不含糊的提示。避免使用相互矛盾的标签、模棱两可的说明或相互矛盾的参考答案，从而误导培训。
+ **多样性** — 包括不同的输入格式、边缘案例和难度级别，以反映不同用户类型和场景的生产使用模式。
+ **高效的奖励函数** — 设计可快速执行（几秒钟，而不是几分钟）、与之并行并行并返回一致分数的函数 AWS Lambda，从而实现经济高效的训练。

## 其它属性
<a name="rft-additional-properties-open-weight"></a>

RFT 数据格式支持超出核心架构要求的自定义字段（`messages`和`reference_answer`）。这种灵活性使您可以添加奖励功能所需的任何其他数据，以便进行适当的评估。

**注意**  
您无需在食谱中对此进行配置。数据格式本质上支持其他字段。只需将它们包含在您的训练数据 JSON 中，它们就会传递给您的`metadata`现场奖励函数。

**常见的附加属性**
+ `task_id`— 用于跟踪的唯一标识符
+ `difficulty_level`— 问题复杂度指标
+ `domain`— 主题领域或类别
+ `expected_reasoning_steps`— 解决方案中的步骤数

这些额外字段将在评估期间传递给您的奖励函数，从而实现针对您的特定用例量身定制的复杂评分逻辑。

**带有其他属性的示例**

------
#### [ Chemistry problem ]

```
{
  "id": "chem-001",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful chemistry assistant"
    },
    {
      "role": "user",
      "content": "Predict hydrogen bond donors and acceptors for this SMILES: CCN(CC)CCC(=O)c1sc(N)nc1C"
    }
  ],
  "reference_answer": {
    "donor_bond_counts": 2,
    "acceptor_bond_counts": 4
  }
}
```

该`reference_answer`字段包含您的奖励函数用来对模型的响应进行评分的预期输出或评估标准。它不仅限于结构化输出，还可以包含任何有助于您的奖励功能评估质量的格式。

------
#### [ Math problem with metadata ]

```
{
  "messages": [
    {
      "role": "system",
      "content": "You are a math tutor"
    },
    {
      "role": "user",
      "content": "Solve: 2x + 5 = 13"
    }
  ],
  "reference_answer": {
    "solution": "x = 4",
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]
  },
  "task_id": "algebra_001",
  "difficulty_level": "easy",
  "domain": "algebra",
  "expected_reasoning_steps": 3
}
```

------

# 为开放式权重模型设置奖励函数
<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>

列出微调作业的检查点。检查点是在微调期间创建的中间模型快照，可用于推断，以评估不同训练阶段的性能。有关更多信息，请参阅 [OpenAIList 微调检查点文档](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>

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

------