为开放式权重模型准备数据 - Amazon Bedrock

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

为开放式权重模型准备数据

当你使用兼容 OpenAI 的强化微调微调来微调开放权重模型时 APIs,请使用自己的 JSONL 格式提示来提供训练数据。fine-tune

训练数据格式和要求

训练数据必须遵循 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

您可以使用兼容 OpenAI 的文件 api 上传训练数据以进行微调作业。文件安全地存储在 Amazon Bedrock 中,用于创建微调任务。如需完整的 API 详细信息,请参阅OpenAI文件文档

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

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"

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

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"

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

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"

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

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"

有效训练数据的特征

有效的 RFT 训练数据需要三个关键特征:

  • 清晰度和一致性 — 使用格式一致的清晰、毫不含糊的提示。避免使用相互矛盾的标签、模棱两可的说明或相互矛盾的参考答案,从而误导培训。

  • 多样性 — 包括不同的输入格式、边缘案例和难度级别,以反映不同用户类型和场景的生产使用模式。

  • 高效的奖励函数 — 设计可快速执行(几秒钟,而不是几分钟)、与之并行并行并返回一致分数的函数 AWS Lambda,从而实现经济高效的训练。

其它属性

RFT 数据格式支持超出核心架构要求的自定义字段(messagesreference_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 }