关于 dataset-transformation
Dataset Transformation Agent 是一项引导式技能,可将用户提供的数据集转换为 SageMaker 模型训练或评估所需的格式。它通过分阶段审核与确认来推进,生成并测试转换代码,默认输出 JSONL。
主要功能
- 01训练与评估数据转换流程
- 02依据参考资料或 AWS 文档确定格式
- 03基于样本测试转换函数
- 04各阶段提供审核与确认
- 05默认输出 JSONL
适用场景
- 01准备 SageMaker 模型训练数据集
- 02将评估数据集转换为指定架构
- 03转换前检查数据样本记录
- 04运行前审核生成的转换代码
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ awslabs/ agent-plugins --skill dataset-transformation安装后在 Claude Code 中输入/dataset-transformation确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
code_templates/transformation.pyreferences/code_output_guide.mddataset_transformation_code.mdsagemaker_dataset_formats.mdscripts/transformation_tools.py详细介绍
数据集转换 Agent
将用户提供的数据集转换为所需格式。
适用场景
- 用户需要生成代码,以转换用于 SageMaker 模型训练或模型评估的数据集。
- 数据集在训练或评估前需要进行处理、清理或格式化。
- 工作流要求在执行前进行正式的审核和审批。
前置条件
- 已验证 SDK 环境(SDK 版本、区域、执行角色)。如果尚未完成,请先启用
sdk-getting-started技能。
原则
- 一次只做一件事。 每次回复只推进一个决策。切勿在同一轮中同时提出多个问题或建议。
- 确认后再继续。 等待用户同意后,再进入下一步。你是引导者,不要一味向前推进。
- 需要时再读取文件。 只有到达工作流中需要参考文件的步骤,且用户已确认方向后,才读取参考文件。切勿提前读取。
- 不做过程说明。 不要解释接下来要做什么,也不要复述刚刚做了什么。只分享结果并提出问题。回复要简短、聚焦。
- 不重复。 如果在调用工具前已经说过某件事,调用后就不要再重复。只分享新信息。
- 不要偏离工作流。 必须严格按照工作流中列出的步骤执行。从第 1 步到第 11 步完成任务。不要偏离工作流!
- 始终以问题结尾。 每当暂停以等待用户输入、确认或反馈时,回复都必须以问题结尾。不要只留下一句陈述,让用户自行判断是否需要回应。
- 默认输出格式为 JSONL。 除非用户明确要求其他文件格式,否则转换后的数据集应写为
.jsonl(JSON Lines — 每行一个 JSON 对象)。
已知数据集格式参考
此技能支持两种转换用途——训练数据和评估数据——各自采用不同的格式确定流程。用途由工作流第 1 步确定。
训练数据格式
使用参考文件 ../dataset-evaluation/references/strategy_data_requirements.md 确定目标格式。对于模型训练转换,所需格式取决于模型类型(如 Llama/Qwen 等开放权重模型与 Nova)和微调技术(SFT、DPO、RLVR、RLAIF);请确保同时匹配这两个维度。如果模型类型或技术尚未确定,请先询问用户,再确定格式。
评估数据格式
对于模型评估转换,请按以下顺序确定目标格式:
- 尝试获取最新文档 https://docs.aws.amazon.com/sagemaker/latest/dg/model-customize-evaluation-dataset-formats.html,以了解最新的评估数据集架构定义。
- 如果获取失败(例如,没有互联网访问权限或处于 VPC 环境),则回退到离线副本
references/sagemaker_dataset_formats.md。告知用户这些格式架构来自离线副本,可能已过时。
使用成功获取的来源作为目标格式的事实依据。不要依赖记忆中的架构。
工作流
步骤 1:确定转换目的
你的首条回复应确定此次转换是用于模型训练还是模型评估。如果上下文已经明确(例如,用户说“我需要准备训练数据”或“我需要整理评估数据集”),请确认你的理解并继续。否则,请询问:
“这次数据集转换是用于模型训练还是模型评估?这有助于我为你查找合适的目标格式。”
- 训练 → 格式解析将使用本地训练数据要求参考资料(具体取决于模型类型和微调技术)。
- 评估 → 格式解析将使用 AWS 实时文档(并在无法联网时使用备用资料)。
记住这一选择——它将决定在步骤 3 中如何解析目标格式。
⏸ 等待用户。
步骤 2:说明预期
确认用户的请求,并说明此技能可以做什么:
“我可以帮你转换数据集格式!我的计划是:首先了解你的数据集格式和转换要求。了解这些信息后,我会生成一个数据集转换函数,我们可以一起完善。等数据集转换函数完善到你满意后,我会执行转换任务,并将结果上传到你指定的位置!这样可以吗?”
⏸ 等待用户。
步骤 3:了解数据集转换任务
此步骤需要了解:用户希望将数据集从哪种格式转换成哪种格式。 如果你已经知道这些信息,可以跳过此步骤。否则,请询问用户:
“你想将数据集转换成什么格式?”
根据步骤 1 确定的目的解析目标格式:
- 如果是训练数据:如果尚未了解,请询问用户使用的微调技术(SFT、DPO、RLVR、RLAIF)和模型类型(开放权重模型,如 Llama/Qwen,还是 Nova)。然后从上方“训练数据格式”一节的“已知数据集格式参考”中查找所需格式。
- 如果是评估数据:如果用户提到知名格式名称(例如“OpenAI 格式”“SageMaker 格式”),请按照上方“评估数据格式”一节中的说明,从实时文档中获取架构。如果获取到了知名格式,请向用户确认:
“我找到了一个 SageMaker 数据集格式:{sagemaker-dataset-format-name},其架构为:{sagemaker-dataset-format-schema}。这是你指的格式吗?”
如果用户描述的自定义格式未列在参考文档中,请让他们提供所需输出格式的示例记录。
⏸ 等待用户。
步骤 4:获取用户的数据集
此步骤需要了解:用户数据集的位置。 如果你已经知道,可以跳过此步骤。否则,请询问用户:
“我可以在哪里找到你的数据集?本地目录或 S3 位置都可以!”
⏸ 等待用户。
步骤 5:检查样本数据
读取用户数据集中的 1–2 条样本记录并展示给用户,以便确认源架构。不要运行格式检测——在调用此技能之前,规划技能已负责处理格式检测。
此处不要展示与目标格式的并排映射——详细映射将在步骤 7 生成转换函数时处理。
⏸ 等待用户。
步骤 6:获取数据集输出位置
此步骤需要了解:转换后的数据集应输出到哪里。可以是 S3 URI 或本地目录。 如果你已经知道数据集应输出到哪里,可以跳过此步骤。否则,请询问用户:
“转换后的数据集应该输出到哪里?本地目录或 S3 位置都可以!”
如果用户提供的是目录(而非完整文件路径),请使用 {original_name}_{target_format}.jsonl 模式构造输出文件名(例如,gen_qa_100k_openai.jsonl)。
⏸ 等待用户。
步骤 7:生成并验证转换函数
在此步骤中,你需要:生成一个 Python 函数,将数据集从步骤 5 的格式转换为步骤 3 的格式
阅读参考指南 references/dataset_transformation_code.md,并在生成转换函数时严格遵循其中的框架。
Python 函数应采用以下形式:
def transform_dataset(df: pd.DataFrame) -> pd.DataFrame:
<project-dir> 是由目录管理技能建立的项目目录(例如,dpo-to-rlvr-conversion)。
在 Notebook 模式下,添加一个 %%writefile <project-dir>/scripts/transform_fn.py 代码单元,并将文件写入磁盘以进行测试。在脚本模式下,直接将文件写入磁盘。
根据用户的反馈继续迭代——每次修订时都直接更新代码,而不是在行内展示代码。
如果在步骤 5 中收集了样本数据,请使用样本记录测试函数:
- 生成转换函数。
- 将样本数据写入临时 JSONL 文件(例如,
/tmp/test_input.jsonl),然后运行:python3 -c "import sys; sys.path.insert(0, '<project-dir>/scripts'); from transform_fn import transform_dataset; import pandas as pd; df = pd.read_json('/tmp/test_input.jsonl', lines=True); result = transform_dataset(df); print(result.to_json(orient='records', lines=True))" - 如果测试失败,请修复并重新测试,直到通过。
- 向用户展示函数和转换后的样本输出以供审阅。
如果没有样本数据,请提交函数供审阅和完善。
⏸ 等待用户。
步骤 8:确定输出目标
如果不存在项目目录,请启用目录管理技能来创建一个。
⏸ 等待用户。
步骤 9:生成执行代码
编写代码前,请阅读:
references/code_output_guide.md(输出格式规则)code_templates/transformation.py(单元结构和框架代码)
模板使用 # Cell N: Label 标记——每个标记都会开始一个新部分。单元 2(转换函数)由步骤 7 动态生成;其他所有单元均遵循模板框架。
按照代码输出指南生成执行逻辑。
- 在 Notebook 模式下,添加一个
%%writefile <project-dir>/scripts/<script_name>.py代码单元,并将文件写入磁盘。在脚本模式下,直接将文件写入磁盘。 - 脚本必须从
transform_fn导入transform_dataset。 - 将占位符替换为实际的输入/输出路径。
阅读参考指南 references/dataset_transformation_code.md,并严格遵循其中的执行脚本框架。
如果在步骤 5 中收集了样本数据,请测试完整流程:
- 将样本记录写入临时 JSONL 文件(例如,
/tmp/test_input.jsonl)。 - 运行:
python3 <project-dir>/scripts/<script_name> --input /tmp/test_input.jsonl --output /tmp/test_output.jsonl - 如果失败,请排查并修复,然后重新运行,直到成功。
- 向用户展示输出以供审阅。
如果没有样本数据,请提交 Notebook 供审阅和完善。
⏸ 等待用户。
第 10 步:确定并确认执行模式
检查输入数据集的大小:
- 如果数据集位于 S3 中,请使用 AWS MCP 工具
head-object(S3 服务),并提供存储桶和键,以获取ContentLength。 - 如果数据集位于本地,请检查文件大小。
决策标准:
- 数据集 < 50 MB → 建议在本地执行
- 数据集 ≥ 50 MB → 建议使用 SageMaker Processing Job
告知用户建议,并征得用户同意:
如果在本地执行:
“您的数据集大小为 {size} MB——由于小于 50 MB,我建议在本地运行转换。您想继续在本地执行,还是更倾向于使用 SageMaker Processing Job?”
如果使用 SageMaker Processing Job:
“您的数据集大小为 {size} MB——由于超过 50 MB,我建议将其作为 SageMaker Processing Job 运行,以获得更好的性能。您想继续使用 SageMaker Processing Job,还是更倾向于在本地运行?”
在用户同意前不要执行。如果用户拒绝该建议,请切换到另一种方案,并在继续前征得用户明确同意。
⏸ 等待用户回复。
用户确认后,在笔记本中添加一个执行单元格。不要直接运行转换(不使用 bash 或内联 Python)。如果有笔记本执行工具(run_cell),请提出代为运行这些单元格。否则,生成单元格供用户自行执行:
如果在本地执行:
- 添加一个单元格,通过导入磁盘上已有的
.py文件来运行转换(由 Agent 在步骤 7 和 9 中编写):从transform_fn导入transform_dataset,加载数据集、执行转换并保存输出。脚本位于<project-dir>/scripts/。
如果使用 SageMaker Processing Job:
- 添加一个单元格,直接使用 V3 SageMaker SDK 在单元格中提交并监控 Processing Job(例如 FrameworkProcessor、ProcessingInput、ProcessingOutput 等)。创建一个使用 SKLearn 1.2-1 镜像的 FrameworkProcessor,配置输入/输出,并调用
processor.run(wait=True, logs=True),使单元格保持运行并持续输出日志,直到任务完成。实现细节请参考scripts/transformation_tools.py。 - 告知用户可以运行此单元格来启动并监控任务。
重要: Agent 不得通过 bash 或内联 Python 直接执行转换。如果有 run_cell,请使用它运行笔记本单元格。否则,单元格供用户检查并运行。Agent 只能转换样本数据(来自步骤 7 和 9),用于验证。
如果有
run_cell:“我已在笔记本中添加执行单元格。您想让我运行它吗?” 否则:“我已在笔记本中添加执行单元格。您可以运行它来转换完整数据集。运行前,您想先检查笔记本吗?”
⏸ 等待用户回复。
第 11 步:验证并与用户确认
此步骤需要:验证输出看起来是否正确,并与用户确认。
- 从输出中读取 1–2 条样本记录,展示给用户。
- 报告已转换的记录总数。
- 询问用户输出是否符合预期。
⏸ 等待用户确认。