关于 huawei-cloud-cloudrobo-dataset
用于管理 CloudRobo 数据处理与评估任务全生命周期的技能。它指导 Agent 通过 CloudRobo CLI 或 Python SDK 创建、监控和检查任务,并处理批量工作流与故障诊断。
主要功能
- 01创建和管理处理及评估任务
- 02轮询任务状态并获取日志
- 03预览输出并查看数据帧
- 04编排处理到评估的工作流
- 05批量运行并汇总任务
- 06诊断故障并提出修复建议
适用场景
- 01创建数据处理或评估任务
- 02检查结果并下载任务日志
- 03用同一算法处理多个数据集
- 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.mdcli-installation-guide.mddataflow-diagram.mdiam-policies.mdinteractive-workflow.mdtask-config-catalog.mdverification-method.mdscripts/test-cli-commands.shtemplates/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。
任务轮询与结果处理
- 轮询状态 — 使用
dataset proc wait-task(建议间隔为 15s),向用户报告每次状态变化,直到任务进入终态(SUCCEEDED/FAILED/DELETED) - 完成后:
- SUCCEEDED:通过
get-preview查看处理结果,并输出系统日志 - FAILED:询问用户是否要查看日志,并输出系统日志和作业日志
- SUCCEEDED:通过
Eval 任务: SUCCEEDED 后,从任务详情的 target_report_path 中提取报告路径,并使用 dataset eval get-preview --task-id <task-id> --file-name <obs-path-without-bucket> 获取 OBS 临时链接。
工作流(任务编排)
场景:数据转换 → 数据评估 → 下载产物
- 运行处理任务,等待其进入 SUCCEEDED 状态
- 从任务详情中提取
target_path和target_asset_id - 构造
dataset_configs条目,其中obs_path=target_path,asset_id=target_asset_id - 创建评估任务,等待其进入 SUCCEEDED 状态
- 获取报告:
dataset eval get-preview --file-name <path-from-target_report_path>(移除obs://<bucket>/前缀) - 通过
download-asset下载产物
批量工作流(批量任务)
场景:对多个数据集运行相同算法
- 获取数据集列表(
asset list-assets --type dataset) - 为每个数据集创建处理任务(沿用第一个任务的算法/资源配置;仅输入数据集不同)
- 收集 task_ids,并轮询状态
- 汇总成功/失败/进行中任务数
- 对于失败的任务:查看日志或重启
故障诊断工作流
场景:任务失败 → 分析日志,提出修复建议
- 获取系统日志和用户日志
- 分析错误模式:OOM → 增加
worker_spec.memory;找不到路径 → 检查dataset_configs;拉取镜像失败 → 检查image;参数错误 → 检查algo_entrance/envs;访问被拒绝 → 检查catalog_id/权限 - 输出诊断结果和修复建议
- 确认后,通过
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-case | create-task、list-tasks、show-task |
| 覆盖工作区 | --workspace-id <id> | --workspace-id abc-123 |
| 输出格式 | 将 JSON 输出到 stdout | out(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|falseGET /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|falseGET /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" 可查找评估算法。
参考文档
- CLI 安装指南 — cloudrobo CLI 的安装与配置
- IAM 策略 — 最小权限凭据模型
- 验证方法 — 验证方法详情
- 数据流图 — Mermaid 数据流图
- 验收标准 — 验收标准
- 任务配置参考 — 算法字段映射、必填字段模板、envs 格式、eval-tasks 字段差异
- 交互式工作流 — proc-tasks 和 eval-tasks 的交互式创建工作流详解
边缘情况
| 场景 | 处理方式 |
|---|---|
缺少 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,请及时保存或下载