mcpField
D
dataset-transformation

dataset-transformation

github.com/awslabs数据与数据库932150 次安装3 周前更新
代码仓库

关于 dataset-transformation

Dataset Transformation Agent 是一项引导式技能,可将用户提供的数据集转换为 SageMaker 模型训练或评估所需的格式。它通过分阶段审核与确认来推进,生成并测试转换代码,默认输出 JSONL。

主要功能

  1. 01训练与评估数据转换流程
  2. 02依据参考资料或 AWS 文档确定格式
  3. 03基于样本测试转换函数
  4. 04各阶段提供审核与确认
  5. 05默认输出 JSONL

适用场景

  1. 01准备 SageMaker 模型训练数据集
  2. 02将评估数据集转换为指定架构
  3. 03转换前检查数据样本记录
  4. 04运行前审核生成的转换代码

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/awslabs/agent-plugins --skill dataset-transformation

安装后在 Claude Code 中输入/dataset-transformation确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

code_templates/
transformation.py
references/
code_output_guide.md
dataset_transformation_code.md
sagemaker_dataset_formats.md
scripts/
transformation_tools.py

详细介绍

数据集转换 Agent

将用户提供的数据集转换为所需格式。

适用场景

  • 用户需要生成代码,以转换用于 SageMaker 模型训练或模型评估的数据集。
  • 数据集在训练或评估前需要进行处理、清理或格式化。
  • 工作流要求在执行前进行正式的审核和审批。

前置条件

  • 已验证 SDK 环境(SDK 版本、区域、执行角色)。如果尚未完成,请先启用 sdk-getting-started 技能。

原则

  1. 一次只做一件事。 每次回复只推进一个决策。切勿在同一轮中同时提出多个问题或建议。
  2. 确认后再继续。 等待用户同意后,再进入下一步。你是引导者,不要一味向前推进。
  3. 需要时再读取文件。 只有到达工作流中需要参考文件的步骤,且用户已确认方向后,才读取参考文件。切勿提前读取。
  4. 不做过程说明。 不要解释接下来要做什么,也不要复述刚刚做了什么。只分享结果并提出问题。回复要简短、聚焦。
  5. 不重复。 如果在调用工具前已经说过某件事,调用后就不要再重复。只分享新信息。
  6. 不要偏离工作流。 必须严格按照工作流中列出的步骤执行。从第 1 步到第 11 步完成任务。不要偏离工作流!
  7. 始终以问题结尾。 每当暂停以等待用户输入、确认或反馈时,回复都必须以问题结尾。不要只留下一句陈述,让用户自行判断是否需要回应。
  8. 默认输出格式为 JSONL。 除非用户明确要求其他文件格式,否则转换后的数据集应写为 .jsonl(JSON Lines — 每行一个 JSON 对象)。

已知数据集格式参考

此技能支持两种转换用途——训练数据和评估数据——各自采用不同的格式确定流程。用途由工作流第 1 步确定。

训练数据格式

使用参考文件 ../dataset-evaluation/references/strategy_data_requirements.md 确定目标格式。对于模型训练转换,所需格式取决于模型类型(如 Llama/Qwen 等开放权重模型与 Nova)和微调技术(SFT、DPO、RLVR、RLAIF);请确保同时匹配这两个维度。如果模型类型或技术尚未确定,请先询问用户,再确定格式。

评估数据格式

对于模型评估转换,请按以下顺序确定目标格式:

  1. 尝试获取最新文档 https://docs.aws.amazon.com/sagemaker/latest/dg/model-customize-evaluation-dataset-formats.html,以了解最新的评估数据集架构定义。
  2. 如果获取失败(例如,没有互联网访问权限或处于 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 中收集了样本数据,请使用样本记录测试函数:

  1. 生成转换函数。
  2. 将样本数据写入临时 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))"
  3. 如果测试失败,请修复并重新测试,直到通过。
  4. 向用户展示函数和转换后的样本输出以供审阅。

如果没有样本数据,请提交函数供审阅和完善。

⏸ 等待用户。

步骤 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 中收集了样本数据,请测试完整流程:

  1. 将样本记录写入临时 JSONL 文件(例如,/tmp/test_input.jsonl)。
  2. 运行:python3 <project-dir>/scripts/<script_name> --input /tmp/test_input.jsonl --output /tmp/test_output.jsonl
  3. 如果失败,请排查并修复,然后重新运行,直到成功。
  4. 向用户展示输出以供审阅。

如果没有样本数据,请提交 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 条样本记录,展示给用户。
  • 报告已转换的记录总数。
  • 询问用户输出是否符合预期。

⏸ 等待用户确认。

评论

支持 Markdown