mcpField
H
huawei-cloud-cloudrobo-dataset

huawei-cloud-cloudrobo-dataset

github.com/huaweicloud数据与数据库5969 次安装2 天前更新
代码仓库

关于 huawei-cloud-cloudrobo-dataset

用于管理 CloudRobo 数据处理与评估任务全生命周期的技能。它指导 Agent 通过 CloudRobo CLI 或 Python SDK 创建、监控和检查任务,并处理批量工作流与故障诊断。

主要功能

  1. 01创建和管理处理及评估任务
  2. 02轮询任务状态并获取日志
  3. 03预览输出并查看数据帧
  4. 04编排处理到评估的工作流
  5. 05批量运行并汇总任务
  6. 06诊断故障并提出修复建议

适用场景

  1. 01创建数据处理或评估任务
  2. 02检查结果并下载任务日志
  3. 03用同一算法处理多个数据集
  4. 04排查失败任务并规划修正

安装

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

$npx skills add https://github.com/huaweicloud/huaweicloud-skills --skill huawei-cloud-cloudrobo-dataset

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

包含的文件

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

references/
acceptance-criteria.md
cli-installation-guide.md
dataflow-diagram.md
iam-policies.md
interactive-workflow.md
task-config-catalog.md
verification-method.md
scripts/
test-cli-commands.sh
templates/
test-vars.json

详细介绍

Windows / PowerShell: 示例使用 bash 语法。要在 Windows PowerShell 中运行:

  • 将 \ 续行符合并为单行,或在行尾使用反引号。
  • 使用 $env:NAME="value" 设置环境变量,而不是 export NAME="value"。
  • 单引号括起来的 JSON '{"a":"b"}' 可直接使用。

概述

cloudrobo-dataset 技能用于管理 CloudRobo 数据处理(proc-tasks)和数据评估(eval-tasks)的完整生命周期。它涵盖算法查询、任务 CRUD 操作、状态轮询、日志检索(系统日志和作业日志)与下载、输出数据预览、帧提取、从资产市场发现算法、处理→评估工作流编排、批量任务管理以及故障诊断。

适用场景: 任务管理(CRUD + 重启)、问题排查(日志检索 + 错误分析)、算法发现、结果验证(预览 + 帧)、工作流编排、批量管理、分析。

架构:

Agent / LLM
    │
    ├── CLI  →  cloudrobo dataset proc <command>     (proc-tasks)
    │           cloudrobo dataset eval <command>     (eval-tasks)
    ├── SDK  →  DatasetClient (Python)
                    │
                    ▼
              cloudrobo-service (REST API)
              /v1/data-eng/proc-tasks/*
              /v1/data-eng/eval-tasks/*

所有操作都针对 cloudrobo-service 后端,并且需要 workspace_id(除非通过 --workspace-id 覆盖,否则使用默认工作区)。算法和数据集发现是跨包操作,会通过 cloudrobo asset 调用 cloudrobo-asset-manager 服务。

前置条件

CLI 安装、AK/SK 身份验证和工作区配置请参阅 references/cli-installation-guide.md。所有数据集操作都需要有效的 workspace_id(默认值或显式指定 --workspace-id)。

工作流

交互式任务创建

所有交互式创建工作流都遵循交互规则:每轮最多调用一次工具,并在提出下一个问题前显示查询结果。

Proc-Task 创建(10 个步骤):任务名称 → 描述 → 算法类型(PRESET_ASSETS/WORKSPACE_ASSETS/OBS_ASSETS)→ 使用字段映射配置算法 → 环境变量 → 作业类型和资源(CCE/K8S 或 CCE_RAY/RAY、资源池、实例规格)→ 动态存储(仅限公共池)→ 输入数据集(多数据集循环)→ 输出配置 → 确认并提交。详细步骤请参阅 references/interactive-workflow.md。

Eval-Task 创建(7 个步骤):任务名称 → 描述 → 资源池和实例规格 → 评估算法 → 数据集(单个)→ 机器人配置 → 确认并提交。详细步骤请参阅 references/interactive-workflow.md。

任务轮询与结果处理
  1. 轮询状态 — 使用 dataset proc wait-task(建议间隔为 15s),向用户报告每次状态变化,直到任务进入终态(SUCCEEDED/FAILED/DELETED)
  2. 完成后:
    • SUCCEEDED:通过 get-preview 查看处理结果,并输出系统日志
    • FAILED:询问用户是否要查看日志,并输出系统日志和作业日志

Eval 任务: SUCCEEDED 后,从任务详情的 target_report_path 中提取报告路径,并使用 dataset eval get-preview --task-id <task-id> --file-name <obs-path-without-bucket> 获取 OBS 临时链接。

工作流(任务编排)

场景:数据转换 → 数据评估 → 下载产物

  1. 运行处理任务,等待其进入 SUCCEEDED 状态
  2. 从任务详情中提取 target_path 和 target_asset_id
  3. 构造 dataset_configs 条目,其中 obs_path = target_path,asset_id = target_asset_id
  4. 创建评估任务,等待其进入 SUCCEEDED 状态
  5. 获取报告:dataset eval get-preview --file-name <path-from-target_report_path>(移除 obs://<bucket>/ 前缀)
  6. 通过 download-asset 下载产物
批量工作流(批量任务)

场景:对多个数据集运行相同算法

  1. 获取数据集列表(asset list-assets --type dataset)
  2. 为每个数据集创建处理任务(沿用第一个任务的算法/资源配置;仅输入数据集不同)
  3. 收集 task_ids,并轮询状态
  4. 汇总成功/失败/进行中任务数
  5. 对于失败的任务:查看日志或重启
故障诊断工作流

场景:任务失败 → 分析日志,提出修复建议

  1. 获取系统日志和用户日志
  2. 分析错误模式:OOM → 增加 worker_spec.memory;找不到路径 → 检查 dataset_configs;拉取镜像失败 → 检查 image;参数错误 → 检查 algo_entrance/envs;访问被拒绝 → 检查 catalog_id/权限
  3. 输出诊断结果和修复建议
  4. 确认后,通过 update-task 修改,或通过 restart-task 重启
分析工作流(数据分析)

按状态汇总任务统计信息、算法排名、时间趋势和失败率。输出分析报告并提供根因建议。

长时间运行任务工作流

启动 wait-task 并设置超时时间。超时后,报告状态和已耗时长;由用户决定:继续 / 查看日志 / 终止。

CLI 命令格式规范

cloudrobo dataset proc <command> [OPTIONS]
cloudrobo dataset eval <command> [OPTIONS]
特性描述示例
命令组dataset proc(proc-tasks)、dataset eval(eval-tasks)cloudrobo dataset proc
子命令kebab-casecreate-task、list-tasks、show-task
覆盖工作区--workspace-id <id>--workspace-id abc-123
输出格式将 JSON 输出到 stdoutout(result)
试运行--dry-run(支持时)预览但不执行
布尔标志--is-system true--is-system true
逗号分隔列表--task-ids id1,id2,id3--task-ids aaa,bbb

核心命令

任务管理(proc-tasks)
创建数据处理任务
cloudrobo dataset proc create-task --name <task-name> --algo-type PRESET_ASSETS --task-config '<json-config>' [--workspace-id <id>] [--wait] [--timeout 1800] [--dry-run]
  • SDK: client.create_task(task_config: dict)
  • API: POST /v1/data-eng/proc-tasks

必填的 task_config 字段:name、algo_type(根据步骤 3 的选择,为 PRESET_ASSETS / WORKSPACE_ASSETS / OBS_ASSETS)、algo_name、algo_entrance、 image、algo_id、catalog_id(工作区的)、resource_pool_type、cluster_type、 task_framework_type、dataset_configs(JSON 字符串数组,多数据集输入)、 output_type、output_path、output_name、head_spec(必须包含 cpu/memory/gpu/npu)、worker_spec(必须包含 cpu/memory/gpu/npu)、worker_num、 evs_spec。完整字段映射请参阅 references/task-config-catalog.md。

⚠️ 非空验证: 除 description 外,所有参数都不能是空值(空字符串 ""、None、空字典 {})。SDK 会在提交 API 前进行验证。head_spec/worker_spec 必须包含全部四个键:cpu、memory、gpu、npu(值为 0 时有效)。dataset_configs 必须至少包含 1 个数据集条目;空数组 "[]" 无效。

列出任务
cloudrobo dataset proc list-tasks [--status RUNNING|SUCCEEDED|FAILED] [--algo-type <type>] [--name <name>] [--order-by start_at|update_at|finish_at] [--order DESC|ASC] [--offset <n>] [--limit <n>] [--user-id <id>] [--algo-name <name>] [--output-name <name>] [--workspace-id <id>]
  • SDK: client.list_tasks(workspace_id=None, statuses=..., algo_type=..., name=..., order_by=..., ...)
  • API: GET /v1/data-eng/proc-tasks?workspace_id=<id>&statuses=<status>
查看任务详情
cloudrobo dataset proc show-task --task-id <task-id>
  • SDK: client.get_task_detail(task_id)
  • API: GET /v1/data-eng/proc-tasks/{task_id}
更新任务(仅限 SDK)
  • SDK: client.update_task(task_id, task_config: dict)
  • API: PATCH /v1/data-eng/proc-tasks/{task_id}
删除任务(仅限 SDK)
  • SDK: client.delete_tasks([task_id_1, task_id_2])
  • API: DELETE /v1/data-eng/proc-tasks?ids=id1,id2
重启任务
cloudrobo dataset proc restart-task --task-id <task-id>
  • SDK: client.restart_task(task_id)
  • API: POST /v1/data-eng/proc-tasks/{task_id}/restart
任务监控
等待任务达到终态
cloudrobo dataset proc wait-task --task-id <task-id> [--timeout 1800] [--interval 10]

终态:SUCCEEDED、FAILED、DELETED

  • SDK: client.wait_task(task_id, timeout=1800, interval=10, on_status=callback)
  • API: GET /v1/data-eng/proc-tasks/{task_id}(轮询)
获取任务日志
# Step 1: List log files to get file_path
cloudrobo dataset proc get-log --task-id <id> --is-system true
cloudrobo dataset proc get-log --task-id <id> --is-system false

# Step 2: Get log content (default: latest 64KB tail)
cloudrobo dataset proc get-log --task-id <id> --file-name <name> --file-path <path>

# Get full log (not just tail)
cloudrobo dataset proc get-log --task-id <id> --file-name <name> --file-path <path> --all
  • SDK: client.list_log_files(task_id, is_system=True) → client.get_task_log(task_id, file_name, file_path, start_byte, end_byte) 或 client.get_task_log_tail(task_id, file_name)
  • API:
    • GET /v1/data-eng/proc-tasks/{task_id}/logs?is_system=true|false
    • GET /v1/data-eng/proc-tasks/{task_id}/logs/{file_name}?start_byte=&end_byte=&file_path=&job_id=
下载日志文件
cloudrobo dataset proc download-log --task-id <id> --file-name <name> --file-path <path>
  • SDK: client.download_task_log(task_id, file_name, file_path)
  • API: GET /v1/data-eng/proc-tasks/{task_id}/logs/{file_name}/download
获取任务资源使用情况
cloudrobo dataset proc get-resource-usage --task-id <task-id> --metric CPU_UTIL|CPU_USED_CORE|MEM_UTIL|MEM_USED_MB|NETWORK_TX_RATE|NETWORK_RX_RATE|DISK_READ_KB|DISK_WRITE_KB --start <unix-ts-sec> --end <unix-ts-sec> --step <10-3600>
  • SDK: client.get_task_resource_usage(task_id, metric, start, end, step)
  • API: GET /v1/data-eng/proc-tasks/{task_id}/resource-usage?metric=&start=&end=&step=
数据预览
预览任务输出数据

获取数据集文件的 OBS 临时下载链接。file_name = 不含存储桶名称的 OBS 路径(例如,cloudrobo/f91cee72-.../1ddf1498-.../data/chunk-000/file-000.parquet)。

cloudrobo dataset proc get-preview --task-id <task-id> --file-name <obs-path-without-bucket>
  • SDK: client.get_task_preview(task_id, file_name)
  • API: GET /v1/data-eng/proc-tasks/{task_id}/preview?file_name=<file_name>
获取任务帧

查询任务输入/输出数据集的目录文件列表。prefix = 不含存储桶名称的数据集 OBS 路径(例如,cloudrobo/f91cee72-.../1ddf1498-.../)。

cloudrobo dataset proc get-frames --task-id <task-id> --prefix <obs-path-without-bucket>
  • SDK: client.get_task_frames(task_id, prefix)
  • API: GET /v1/data-eng/proc-tasks/{task_id}/frames?prefix=<prefix>
评估任务(eval-tasks)

评估任务在字段名称、删除粒度和支持的操作方面与处理任务不同。请参阅 references/task-config-catalog.md 中的完整对比表。

创建评估任务
cloudrobo dataset eval create-task --name <task-name> --task-config '<json-config>' [--workspace-id <id>] [--wait] [--timeout 1800]
  • SDK: client.create_eval_task(task_config: dict)
  • API: POST /v1/data-eng/eval-tasks

task-config 字段说明:

eval-task 的 task-config 需要两组数据集字段:顶层单值字段(dataset_type、dataset_id、dataset_name、dataset_path)+ dataset_configs 数组(单个数据集,格式与 proc-task 相同)。

必填字段:name、algo_type、algo_id、algo_name、algo_entrance、image、catalog_id(工作空间的)、cluster_type、task_framework_type、dataset_type/dataset_id/dataset_name/dataset_path(顶层)、dataset_configs、robot_config、resource_pool_type、head_spec、worker_spec、worker_num、evs_spec、output_type、output_path、output_name。

可选字段:description、resource_id、dedicated_pool_name。

⚠️ 重要提醒:

  • 顶层数据集字段和 dataset_configs 数组都必填
  • dataset_name 不能为空(对于 UDF_OBS_ASSET,请从 OBS 路径的最后一个目录提取)
  • dataset_type 的取值:BUILD_IN_ASSET / UDF_OBS_ASSET

完整的字段映射和 eval-task 字段差异请参阅 references/task-config-catalog.md。

列出评估任务
cloudrobo dataset eval list-tasks [--status <status>] [--name <name>] [--workspace-id <id>]
  • SDK: client.list_eval_tasks(workspace_id=None, **params)
  • API: GET /v1/data-eng/eval-tasks?workspace_id=<id>
查看评估任务详情
cloudrobo dataset eval show-task --task-id <task-id>
  • SDK: client.get_eval_task_detail(task_id)
  • API: GET /v1/data-eng/eval-tasks/{task_id}
更新评估任务(仅 SDK)
  • SDK: client.update_eval_task(task_id, task_config: dict)
  • API: PATCH /v1/data-eng/eval-tasks/{task_id}
删除评估任务(单任务粒度,仅 SDK)
  • SDK: client.delete_eval_task(task_id)
  • API: DELETE /v1/data-eng/eval-tasks/{task_id}

注意: eval-tasks 的删除粒度为单个任务(delete-task),与 proc-tasks 相同(delete-task)。eval-tasks 不支持重启。

获取评估任务日志
# Step 1: List log files
cloudrobo dataset eval get-log --task-id <id> --is-system true
cloudrobo dataset eval get-log --task-id <id> --is-system false

# Step 2: Get log content
cloudrobo dataset eval get-log --task-id <id> --file-name <name> --file-path <path>
  • SDK: client.list_eval_log_files(task_id, is_system=True) + client.get_eval_task_log(task_id, file_name, ...)
  • API:
    • GET /v1/data-eng/eval-tasks/{task_id}/logs?is_system=true|false
    • GET /v1/data-eng/eval-tasks/{task_id}/logs/{file_name}?file_path=&job_id=
获取评估任务预览

file_name 是报告文件的 OBS 路径(不包含存储桶名称)。从任务详情的 target_report_path 中提取,移除 obs://<bucket-name>/ 前缀。

例如:如果 target_report_path 为 obs://cloudrobo-test-203/eval_task/report/abc-123/diversity_evaluation_report.pdf,则 file_name = eval_task/report/abc-123/diversity_evaluation_report.pdf。

cloudrobo dataset eval get-preview --task-id <task-id> --file-name <obs-path-without-bucket> [--is-download]
  • SDK: client.get_eval_task_preview(task_id, file_name, is_download=False)
  • API: GET /v1/data-eng/eval-tasks/{task_id}/preview?file_name=<obs-path-without-bucket>&isDownload=

返回 OBS 临时 URL。使用 --is-download 获取下载链接,省略则获取预览链接。请及时保存或下载。

算法发现
列出可用算法
cloudrobo asset list-publication-assets --type algorithm --tags "Data Processing" [--name <fuzzy-name>] [--limit 20]
  • SDK(跨包): asset_client.list_publication_assets(type="algorithm", sub_type="data_processing", limit=20)
  • API: 跨包调用——调用资产服务,而非直接调用数据集服务。

每个算法都包含 ext_metadata,其中有创建任务所需的 engine.image_url、command 和 environment_variables。使用 --tags "Data Evaluation" 可查找评估算法。

参考文档

边缘情况

场景处理方式
缺少 workspace_id运行 cloudrobo workspace use 或使用 --workspace-id
任务处于非终止状态wait-task 会持续轮询,直到状态变为 SUCCEEDED/FAILED/DELETED 或超时
未找到日志文件回退使用 system-std-output.log / job-std-output.log
日志文件过大默认读取末尾 64KB;使用 --all 或 download-log
创建任务失败检查 algo_type、JSON 有效性、dataset_configs 和资源配额
未设置 AK/SK设置 HUAWEI_CLOUD_AK/HUAWEI_CLOUD_SK
未找到算法使用 --name 模糊搜索或 sub_type 筛选
eval-task 删除仅支持单个删除;不支持批量删除或重启
Pipeline 输入将 target_path 包装到 dataset_configs 条目中
评估报告链接OBS 临时 URL;请及时保存/下载
envs 格式JSON 数组字符串,而非对象;参见 task-config-catalog.md
catalog_id 不匹配使用工作空间的 ID,而非算法的 ID
list-assets 参数提供 --catalog-id 或 --repository-id;通过 cloudrobo workspace current 获取
算法来源内置算法:list-publication-assets;自定义算法:list-assets
dataset_configs使用资源的 url 字段;不要手动拼接
日志查询先获取文件列表以取得 file_path,再获取内容
任务状态终止状态:SUCCEEDED、FAILED、DELETED;非终止状态:CREATING、RUNNING、PENDING、FROZEN
删除任务不可撤销
算法字段从 ext_metadata 中提取;不要捏造
对象存储必须使用 obs://;禁止使用 s3://
API 路径取自 SDK 的 _url() 调用,不要推断
跨技能不提供训练/推理;请使用 cloudrobo-train/infer
修改操作create/update/delete/restart 需要确认
工作流触发无参数 → 交互式;参数完整 → 跳过并直接确认
缺少可选字段没有 environment_variables 时跳过;worker_spec 使用默认值;评估时询问 robot_config
空字段验证除 description 外,所有参数都不能为空;SDK 会在提交前拒绝空字符串/None/空字典
head_spec/worker_spec必须包含 cpu、memory、gpu、npu 键(值 0 有效)
dataset_configs 为空必须至少包含 1 个数据集条目;空数组 "[]" 无效
高级资源DEDICATED_POOL:查询 ID;Ray:配对集群/框架类型,并使用非零的 head_spec

验证方法

规范符合性验证
bash scripts/test-cli-commands.sh -s . -e cli
功能测试
# CLI / SDK
bash scripts/test-cli-commands.sh -s . -e {cli|sdk}

API 层级验证需手动进行——在 API Explorer 中重放 references/task-config-catalog.md 中的 API 路径。

测试用例

完整测试用例列表见 templates/test-vars.json,涵盖 proc-tasks、eval-tasks、 算法发现和 Pipeline 场景。

验证清单
  • 创建任务后,轮询状态(建议间隔 15s),并向用户报告每次状态变化
  • 状态为 SUCCEEDED 时:通过 get-preview 和输出系统日志验证结果
  • 状态为 FAILED 时:询问用户是否要查看日志,并按两步流程获取系统日志和作业日志 (列出文件 → 获取内容)
  • 对于 Pipeline:验证处理后的 target_path 已包装到评估任务的 dataset_configs 中,然后确认评估任务 状态为 SUCCEEDED → get-preview 返回 OBS 链接
  • 对于评估任务:在状态为 SUCCEEDED 后验证报告预览

最佳实践

  • 创建任务前,始终先运行 list-algorithms,以发现可用算子
  • 使用 create-task 的 --dry-run 验证任务配置,再实际执行
  • 使用带有 --timeout 的 wait-task,避免无限轮询;报告每次状态转换
  • 任务失败时,获取系统日志(--is-system true)和作业日志(--is-system false), 分析错误模式(OOM / 路径不存在 / 镜像拉取失败 / OBS 访问问题),并在重启前提供修复建议
  • 编排流水线时,等待处理状态变为 SUCCEEDED 后,再创建评估任务
  • 批量删除前,确认任务 ID,避免不可逆删除
  • 使用 delete-task 清理已完成或失败的任务,以释放资源
  • 排查问题时,设置 CLOUDROBO_DEBUG=1 以显示详细错误信息
  • 评估报告链接是 OBS 临时 URL,请及时保存或下载

评论

支持 Markdown