📦 Alibabacloud Pai Workspace Manage — 管理PAI工作区

v0.0.1

一键创建、查询、列举阿里云PAI工作区,全程自动脱敏,支持权限诊断与凭据安全校验。

0· 71·0 当前·0 累计
by @sdk-team (alibabacloud-skills-team)·MIT-0
下载技能包
License
MIT-0
最后更新
2026/3/31
0
安全扫描
VirusTotal
无害
查看报告
OpenClaw
可疑
high confidence
该技能声称轻量且无必需二进制/凭据,但运行时文档要求Aliyun CLI、jq及阿里云凭据,且示例存在泄露原始API响应的矛盾,需澄清后方可自主使用。
评估建议
该技能意在管理PAI工作区,但包元数据、SKILL.md与参考文件多处冲突。安装或让智能体自动运行前:1) 要求作者修正元数据,声明依赖aliyun、jq及阿里云凭据;2) 修复矛盾示例,移除命令替换捕获原始JSON,确保所有示例用单管道jq过滤;3) 优先使用最小权限RAM用户,勿用主账号;4) 手动试运行验证输出与脱敏;5) 在文档清理前勿授予配置凭据或自动安装插件权限。若维护者无法统一矛盾,则视为不可自动调用。...
详细分析 ▾
用途与能力
清单未声明所需二进制、环境变量或主凭据,但SKILL.md与参考文档明确要求Aliyun CLI(aliyun)和jq,并需有效阿里云凭据。管理PAI工作区理应依赖这些工具,却未声明,显示元数据疏漏或能力低报。
指令范围
运行时指令严禁任何暴露原始API JSON的操作(禁止中间变量、禁止两步处理,必须单管道jq),但其他参考文件示例违反此规则(如命令替换捕获WorkspaceId、快速验证脚本未用强制单管道jq脱敏)。内部矛盾使智能体可能意外违反禁令,增加凭据/PII泄露风险。
安装机制
无正式安装规范(仅指令),表面风险低,但文档要求通过Homebrew或aliyuncdn安装aliyun CLI,合理却未声明所需jq。缺失权威安装规范与jq说明,需修正。
凭证需求
清单未声明所需环境变量或主凭据,但技能运行需阿里云凭据(AK/SK、STS或ECS RAM角色),安装示例还展示aliyun configure设置AK/SK。SKILL.md禁止打印/询问AK/SK,参考文档却含非交互设置示例。凭据处理不一致且未列入元数据,造成混乱。
持久化与权限
技能非常驻,未请求平台高权限,但指令需执行`aliyun configure set --auto-plugin-install true`修改CLI配置,安装指南亦改PATH与配置文件。属CLI技能常规操作,然配置变更与凭据处理不一致,若误操作易致泄露。
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

无特殊依赖

版本

latestv0.0.12026/3/31

阿里云PAI工作区管理技能初始发布。 - 在阿里云PAI平台创建、查询、列举工作区。 - 对所有输出中的敏感信息(用户ID、名称、管理员账号)实施严格脱敏。 - 强制使用单管道命令 `| jq -r` 查询或列举工作区;绝不显示或记录原始API输出。 - 运行任何命令前均需确认所有用户可自定义参数。 - 提供凭据设置、权限要求及API输出安全处理的清晰指引。 - 通过与ram-permission-diagnose技能集成,为权限被拒错误提供排查流程。

无害

安装命令

点击复制
官方npx clawhub@latest install alibabacloud-pai-workspace-manage
镜像加速npx clawhub@latest install alibabacloud-pai-workspace-manage --registry https://cn.longxiaskill.com

技能文档

在阿里云人工智能平台(PAI)上创建、查询和列出工作空间。 工作空间是用于 AI 模型训练、数据处理等任务的独立管理单元。

架构:PAI AIWorkSpace(工作空间) 工作空间模式

  • 简单模式:仅生产环境(prod
  • 标准模式:开发(dev)+ 生产(prod)环境

安装

前置检查:需要 Aliyun CLI >= 3.3.1
运行 aliyun version 确认版本 >= 3.3.1。如未安装或版本过低,
请参考 references/cli-installation-guide.md 进行安装。
然后【必须】执行 aliyun configure set --auto-plugin-install true 以启用自动插件安装。
aliyun version
aliyun configure set --auto-plugin-install true

凭证校验

前置检查:需要阿里云凭证

安全规则:
- 禁止 读取、回显或打印 AK/SK 值(例如 echo $ALIBABA_CLOUD_ACCESS_KEY_ID 是禁止的)
- 禁止 在对话或命令行中直接要求用户输入 AK/SK
- 禁止 使用 aliyun configure set 并直接写入明文凭证值
- 仅允许 使用 aliyun configure list 检查凭证状态

敏感数据脱敏:
- 以下 API 响应字段包含个人身份信息,必须在展示前脱敏
- Owner.UserId / Creator — 仅显示后 4 位,如 *1234
- Owner.UserKp — 永不显示,直接省略
- Owner.UserName / Owner.DisplayName — 仅显示首字符 +
,如 z
- AdminNames 中的账号 — 脱敏为 u
@example.com 格式
- 【必须】原始敏感数据不得出现在 stdout、执行日志、磁盘或对话中:执行框架会将所有命令 stdout 记录到执行日志/抄本(如 ran-scripts/executed-actions.log)。因此,任何 get-workspacelist-workspaces 的执行(即使不带 --verbose)都必须包含 | jq -r 管道过滤 —— 因为 Creator 字段始终返回且敏感。不允许出现任何中间步骤将原始 API JSON 输出到命令行。 | jq -r 必须是单条管道命令的一部分:

基础查询(不带 --verbose):
> aliyun aiworkspace get-workspace --workspace-id  --region  \
--user-agent AlibabaCloud-Agent-Skills \
| jq -r '"Workspace: \(.WorkspaceName) (ID: \(.WorkspaceId))
Status: \(.Status)
Environment: \(.EnvTypes | join(", "))
Created: \(.GmtCreateTime)
Creator ID: \(.Creator // "" | if length > 0 then "*" + .[-4:] else "N/A" end)"'


详细查询(带 --verbose true):
> aliyun aiworkspace get-workspace --workspace-id  --verbose true --region  \
--user-agent AlibabaCloud-Agent-Skills \
| jq -r '"Workspace: \(.WorkspaceName) (ID: \(.WorkspaceId))
Status: \(.Status)
Owner: \(.Owner.UserName // "" | if length > 0 then .[0:1] + "
" else "N/A" end) (ID: \(.Owner.UserId // "" | if length > 0 then "*" + .[-4:] else "N/A" end))
Creator ID: \(.Creator // "" | if length > 0 then "
" + .[-4:] else "N/A" end)
Administrators: \(.AdminNames // [] | map(.[0:1] + "
") | join(", "))"'


原始 API 响应仅在管道内部流转,永不进入 shell stdout。只有 jq 的输出(已脱敏且使用自然语言键)被框架捕获。以下行为全部禁止
- 不带 | jq 管道直接执行 CLI 命令 —— 即使基础查询也返回敏感 Creator
- 两步处理 —— 先执行 CLI 获取原始输出,再单独脱敏。原始 JSON 会在脱敏前被记录到执行抄本
- 将原始输出捕获到变量 —— 如 response=$(aliyun ...)echo "$response" | jq ...。变量赋值会把原始数据写入日志
- 输出重定向(> file.json>> file.log| tee file
- 通过磁盘脚本执行命令(如 ran-scripts/.sh
- 在任何脚本或代码文件中嵌入原始 API 响应数据 —— 例如编写 Python/shell 脚本时,将原始 JSON 作为字符串字面量、变量或数据结构(如 ran_scripts/process_workspace_data.py)。所有数据处理必须完全在 | jq -r 管道内完成;不得创建包含原始数据的中间处理脚本
- 在对话中展示原始 JSON 片段
- 【必须】禁止使用原始 API 字段名作为输出键:即使值已脱敏,也禁止在任何输出(对话或文件)中使用原始字段名(如 UserIdUserNameUserKpAdminNames)作为 JSON 键或结构化输出键。应改用自然语言键:
- UserId / CreatorOwner IDCreator ID
- UserNameUsername
- DisplayNameDisplay Name
- AdminNamesAdministrators

正确做法任何 get-workspacelist-workspaces 的执行必须是带 | jq -r单条管道命令。Agent 绝不得先执行 CLI 再分步处理 —— 原始 JSON 会在脱敏前被记录。所有提取、脱敏、格式化必须在同一管道的 jq 过滤器内完成。如需保存到文件,在管道末尾用 > file.md 重定向jq 输出(而非 CLI 输出)。该规则适用于所有查询:基础、详细、列表。
aliyun configure list

检查输出中是否存在有效 profile(AK、STS 或 OAuth 身份)。

若无有效 profile,请在此停止。
1. 前往阿里云控制台获取凭证
2. 在会话外配置凭证(终端执行 aliyun configure 或在 shell 配置文件里设置环境变量)
3. 返回并重新执行,直到 aliyun configure list 显示有效 profile

RAM 权限

请参考 references/ram-policies.md 获取所需权限(含 Policy JSON 及操作说明)。

【必须】权限失败处理: 任何时候因权限错误导致命令或 API 调用失败,按以下流程处理:
1. 读取 references/ram-policies.md 获取本 SKILL 所需的全部权限列表
2. 使用 ram-permission-diagnose 技能引导用户申请所需权限
3. 暂停并等待用户确认权限已授予后再继续

参数确认

重要:参数确认 —— 在执行任何命令或 API 调用前,
所有用户可自定义参数(如 RegionId、WorkspaceName、Description、EnvTypes 等)
必须经用户确认。不得假设或使用默认值。
参数必选/可选说明示例
--region必选地域 ID(全局参数),必须由用户指定,禁止使用默认值cn-hangzhou
--workspace-name必选工作空间名称:3-23 字符,以字母开头,可含字母、数字、下划线,区域内唯一myworkspace
--description必选工作空间描述,最多 80 字符My AI workspace
--env-types必选环境类型(列表格式):简单模式填 prod,标准模式填 dev prodprod
--display-name可选显示名称,默认同 WorkspaceNameMy Workspace
--resource-group-id可选资源组 ID,不填则使用默认资源组rg-xxxxxxxx
注意--resource-group-id 一旦设置,后续无法通过 CLI/代码修改。如需变更,请使用控制台或重建工作空间。

超时配置

API 调用支持超时配置(单位:秒):

方案一:命令行参数(仅对当前命令生效):

  • --connect-timeout <秒> —— 连接超时
  • --read-timeout <秒> —— 读取超时

方案二:持久化配置(写入当前 profile,全局生效):

aliyun configure set --connect-timeout 10 --read-timeout 30
命令行参数优先于持久化配置。未设置时使用内置默认值。
遇到 timeoutcontext deadline exceeded 错误时,请增大 --read-timeout(如 30-60 秒)。

核心流程

详见 references/related-commands.md 获取所有 CLI 命令模板及参数详情。

前置:选择地域并检查 PAI 开通状态

【必须】不得使用默认地域:Agent 不得假设或使用默认地域,必须明确询问用户。

【必须】首次使用某地域时检查 PAI 开通状态:用户指定地域(或会话首次使用该地域)后,Agent 必须先调用 list-products 检查该地域是否已开通 PAI,再继续后续工作空间操作。

步骤 1:确认地域

询问用户要使用哪个地域。若用户未指定,请提供常见地域列表供选择(见 references/related-commands.md 中的常见地域 ID 表)。不得自动选择默认地域。

步骤 2:检查 PAI 开通状态

使用 aliyun aiworkspace list-products 检查用户指定地域是否已开通 PAI 及依赖产品:

aliyun aiworkspace list-products \
--region  \
--product-codes PAI_share \
--verbose true \
--user-agent AlibabaCloud-Agent-Skills

步骤 3:处理检查结果

检查返回的 Products 数组中对应产品条目:

决策逻辑

1. IsPurchased == true → PAI 已开通,继续后续流程
2. IsPurchased == false → PAI 未开通,引导用户开通:
- 查看 HasPermissionToPurchase 字段:
- true → 用户有权限,展示 PurchaseUrl 链接并提示用户前往控制台完成开通
- false → 用户无权限(需主账号或具备 pai:CreateOrder 权限的 RAM 用户),请用户联系主账号管理员
- 不得在 PAI 未开通时继续创建/查询工作空间

流程 1:创建工作空间(CreateWorkspace)

使用 aliyun aiworkspace create-workspace 创建工作空间。 必填参数:--region--workspace-name--description--env-types。 简单模式传 --env-types prod,标准模式传 --env-types dev prod。 可选参数:--display-name--resource-group-id

步骤 1:输入参数校验

【必须】参数格式校验:调用 API 前,Agent 必须按以下规则校验用户输入。若校验失败,请提示用户修正,不得提交不合规参数:
参数校验规则示例
--workspace-name3-23 字符,必须以字母开头,仅允许字母、数字、下划线(_)。不允许连字符(-)、空格、汉字及其他符号my_workspace_01
--description最多 80 字符,含特殊字符时请用引号包裹"My AI workspace"
--env-types只能为 proddev prod,列表格式prod
--display-name可选,无严格格式限制My Workspace

步骤 2:名称唯一性检查(check-then-act 幂等模式)

【必须】幂等保证:CreateWorkspace API 不支持 ClientToken,因此采用 check-then-act 模式确保幂等。创建前必须调用 list-workspaces --option CheckWorkspaceExists --workspace-name 检查名称是否已存在。
决策逻辑:
- TotalCount == 0 → 名称可用,进入步骤 3 创建
- TotalCount >= 1 → 名称已存在,执行以下操作:
1. 从返回的 Workspaces[0] 提取已有 WorkspaceId
2. 调用 get-workspace --workspace-id 获取完整信息
3. 比对现有工作空间关键参数(EnvTypesDescription 等)与当前请求参数
4. 匹配 → 视为已创建,直接返回已有 WorkspaceId不再重复创建
5. 不匹配 → 告知用户名称已被占用且配置不同,请换名

步骤 3:执行创建

参数校验通过且名称不存在后,执行 create-workspace 命令。成功后将返回 WorkspaceId。 若因并发场景返回 WorkspaceNameAlreadyExists 错误,按步骤 2 中 TotalCount >= 1 的逻辑处理。


流程 2:查询工作空间详情(GetWorkspace)

【必须】单工作空间查询必须使用 get-workspace:查询单个工作空间详情时,必须使用 aliyun aiworkspace get-workspace --workspace-id 不得list-workspaces --workspace-ids 替代。
get-workspace 调用 GetWorkspace API,返回单个工作空间的完整信息。仅接受 --workspace-id(必填)与 --verbose(可选)。地域通过全局 --region 指定。
StatusENABLED 表示工作空间就绪。
【必须】--verbose true 触发规则--verbose true 会返回 Owner(UserKp、UserId、UserName、DisplayName)及 AdminNames(管理员账号列表)。Agent 须遵守以下规则:

1. 触发条件 —— 当用户请求包含以下关键词时,构造命令必须追加 --verbose true(在调用前判定,不依赖 API 结果):
- 中文关键词:所有者、拥有者、创建者、管理员、负责人、归属
- 英文关键词:owner、admin、administrator、verbose
- 字段名:Owner、AdminNames
2. 不触发时 —— 用户仅查询基础信息(状态、环境类型等)时,不追加 --verbose
3. 脱敏规则 —— UserId/Creator:仅后 4 位(
1234);UserKp:直接省略;UserName/DisplayName:仅首字符(z);AdminNames 条目:u@example.com
4.
不得在任何地方输出原始敏感数据 —— 任何 get-workspace(无论是否 --verbose)或 list-workspaces 的执行必须是带 | jq -r单条管道命令。Agent 绝不得先执行 CLI 再分步脱敏 —— 原始 JSON 会被记录。禁止两步处理、禁止变量捕获(response=$(aliyun ...))、禁止中间脚本。所有脱敏必须在同一管道的 jq 过滤器内完成。详见“敏感数据脱敏”节及 references/related-commands.md 模板
【必须】404 错误处理:当 get-workspace 返回 StatusCode: 404, Code: 100400027, Message: Workspace not exists 时,表示该工作空间 ID 不存在。Agent 必须直接向用户报告工作空间不存在,并附带用户最初提供的 workspace-id。不得回退到 list-workspaces 或其他 API 去“查找”工作空间。不得静默忽略该错误。若用户随后提供新的 workspace-id,Agent 必须使用与初次调用相同参数(含 --verbose true 等)重新执行 get-workspace

流程 3:列出工作空间(ListWorkspaces)

使用 aliyun aiworkspace list-workspaces 列出工作空间。支持以下过滤与排序参数:

  • --workspace-name —— 按名称模糊匹配
  • --workspace-ids —— 按 ID 列表批量查询,逗号分隔(例:--workspace-ids "123,456,789"
  • --status —— 按状态过滤,枚举值(全大写):ENABLED | INITIALIZING | FAILURE | DISABLED | FROZEN | UPDATING
  • --sort-by —— 排序字段(区分大小写):GmtCreateTime(默认)| GmtModifiedTime
  • --order —— 排序方向(全大写):ASC(默认)| DESC
  • --page-number / --page-size —— 分页参数
  • --option GetResourceLimits —— 获取资源额度信息(而非工作空间列表)
  • --option CheckWorkspaceExists —— 检查指定名称的工作空间是否已存在(创建前检查,需配合 --workspace-name
【必须】API 选择规则:查询单个 ID 用 get-workspace --workspace-id(GetWorkspace API);查询多个 ID(≥2)用 list-workspaces --workspace-ids "id1,id2,..." 一次性批量查询(ListWorkspaces API)。不得对每个 ID 单独调用 get-workspace

【必须】批量查询结果即为最终信息list-workspaces --workspace-ids 返回的 Workspaces 数组已包含每个工作空间的完整信息(Status、EnvTypes、GmtCreateTime 等)。不得对批量结果中的任何 ID 再调用 get-workspace 获取详情。若某些 ID 未出现在响应中,即表示这些 ID 不存在 —— 直接向用户说明。

【必须】枚举值区分大小写--sort-by 必须为 GmtCreateTimeGmtModifiedTime(驼峰),--order 必须为 ASCDESC(全大写),--status 必须为全大写如 ENABLED。大小写错误(如 descgmtCreateTimeenabled)会导致 API 报错或结果异常。

【必须】ListWorkspaces 敏感字段脱敏list-workspaces 返回的每个工作空间对象始终包含 Creator(创建者用户 ID)和 AdminNames(管理员账号列表)——无需 --verbose true。Agent 必须在展示时脱敏(Creator:仅后 4 位;AdminNames首字符 +
)。不得输出含原始值的 JSON,也不得通过重定向(> file)或脚本保存原始响应。

成功验证

验证目标方法成功标准
返回 WorkspaceId解析 create 命令响应WorkspaceId 非空
工作空间状态正常get-workspace 命令Status == "ENABLED"
控制台可见登录 PAI 控制台 手动确认列表中出现新工作空间
详见 references/verification-method.md 了解详细验证方法

清理(删除工作空间)

警告:删除工作空间是不可逆操作,会清空其内所有资源,请谨慎操作。

注意:工作空间无法直接通过 CLI 删除aiworkspace 插件暂不支持 delete-workspace)。请使用以下方式:
1. 控制台删除:登录 PAI 控制台 -> 工作空间列表 -> 选择工作空间 -> 删除
2. API 调用:使用 DELETE /api/v1/workspaces/{WorkspaceId} 端点(通过 SDK 或直接 HTTP 请求)

最佳实践

  • 命名规范:WorkspaceName 使用项目名或团队标识前缀,如 nlp_prodcv_dev(注意:不支持连字符,请用下划线)
  • 环境选择:生产项目请使用标准模式(dev+prod),以便隔离开发与生产资源
  • 描述信息:描述应说明用途、团队或项目,方便管理
  • 地域选择:选择与数据存储最近的地域,降低数据传输延迟
  • 资源组管理:多项目场景使用不同资源组,便于成本分摊与权限管理
  • DisplayName:使用业务友好名称作为显示名,WorkspaceName 保持英文标识

参考文档

文档说明
references/ram-policies.mdRAM 权限策略、Policy JSON 及操作说明
references/related-commands.md完整 CLI 命令模板、参数表、枚举值及返回字段
references/verification-method.md验证步骤与脚本
references/acceptance-criteria.mdCLI 命令正误示例
references/cli-installation-guide.mdAliyun CLI 安装与配置
ListWorkspaces API DocListWorkspaces API 参考
CreateWorkspace API DocCreateWorkspace API 参考
GetWorkspace API DocGetWorkspace API 参考
ListProducts API DocListProducts API 参考(产品开通状态检查)
数据来源ClawHub ↗ · 中文优化:龙虾技能库