--- name: arkcli-custommodel version: 1.0.1 description: "arkcli 自定义模型仓库管理:从 TOS 导入自定义模型、查询/筛选自定义模型、查看详情、改名、删除、查询可用量化模式、量化已就绪的模型。任何提到自定义模型 ID(`cm-*`)的管理、部署准备,或要求用 `cm-*` 直接对话/推理/试效果的边界判断,都必须使用本 skill。注意:查询火山**公共基础模型**(doubao 等 foundation models)走 arkcli-models;本 skill 只管账号下的自定义模型仓库。" metadata: requires: bins: ["arkcli"] cliHelp: "arkcli models custommodel --help" --- # arkcli models custommodel **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../arkcli-shared/SKILL.md`](../arkcli-shared/SKILL.md),其中包含认证闸门、配置排查与共享安全规则** **CRITICAL — 所有 `models custommodel` 命令在执行之前,务必先用 Read 工具读取其对应的 reference 文档,禁止直接盲目调用命令。** **CRITICAL — 写操作(upload / update / delete / quantize)必须先确认用户意图。删除前必须确认是否还有 endpoint 引用。** ## 守卫与使用原则 - 自定义模型相关需求优先使用 `arkcli models custommodel ...` - 这些命令虽然是标准 CLI 类型,但实现入口仍然来自 `shortcuts/models/` - 只有产品命令无法覆盖时,才回退到 [`../arkcli-api-explorer/SKILL.md`](../arkcli-api-explorer/SKILL.md) - 本 skill 不是基础模型查询入口;基础模型目录查询转 [`../arkcli-models/SKILL.md`](../arkcli-models/SKILL.md) - 写操作和异步任务必须把影响范围、轮询方式和后续动作串起来,不要停在单条命令 ## 适用场景 - 把训练好/微调好的权重从 veTOS 导入到 ARK 自定义模型 - 查询账号下已有的自定义模型("我的自定义模型有哪些 / 状态如何") - 查看自定义模型详情、产物形态、活跃 endpoint 引用 - 修改自定义模型展示名或描述 - 删除不再使用的自定义模型 - 把已 `ready` 的自定义模型量化,准备给 `+deploy` 当目标 ## 反唤起信号 - 找官方基础模型 → 用 [`../arkcli-models/SKILL.md`](../arkcli-models/SKILL.md) 的 `search/list/get` - 直接调用自定义模型推理 → 必须先 `+deploy`,再走 `+chat` / `+gen` - 触发模型微调任务(customization job 本身)→ 转 [`../arkcli-train-finetune/SKILL.md`](../arkcli-train-finetune/SKILL.md) - **从精调任务的 step(`global_step_N`)注册成 `cm-`**(=「导出训练产物」)→ 转 [`../arkcli-train-finetune/SKILL.md`](../arkcli-train-finetune/SKILL.md) 的 `arkcli train finetune artifacts list / export`,**不要**用本 skill 的 `upload`(那是给"用户自己的 TOS 文件"用的,后端 Action `UploadModel`;mcj 输出走 `CreateCustomModel`,完全不同的 API) - 已经拿到 endpoint-id 后想管理 endpoint → 转 [`../arkcli-infer-endpoint/SKILL.md`](../arkcli-infer-endpoint/SKILL.md) ## `cm-*` 直接推理边界 - 用户要求“用 `cm-*` 直接对话/推理/试效果”时也必须加载本 skill。明确说明 `cm-*` 是自定义模型资源 ID,不能直接传给 `+chat` / `+gen`;推理前需要单独获得或部署 Endpoint。 - 该请求本身不授权部署、查询账号下 Endpoint 或发起推理。未经用户继续授权,不执行 `arkcli +deploy`、`arkcli +chat`、`arkcli infer endpoint list`,也不拼接 `jq` 等扫描方案。 - 只说明边界和下一步选择;用户明确要求继续部署后,才转 [`../arkcli-deploy/SKILL.md`](../arkcli-deploy/SKILL.md) 并遵守其确认流程。 ## 核心概念 - 本 skill 统一把 `arkcli models custommodel ...` 管理的资源称为**自定义模型**(CustomModel,ID 形如 `cm-xxxxx`);它与 [`../arkcli-models/SKILL.md`](../arkcli-models/SKILL.md) 中 `search/list/get` 操作的官方基础模型(FoundationModel)是**两套独立资源** - 自定义模型来源有两类: - `import` —— 用户从 TOS 上传权重导入(本 skill `upload` 命令,走 `UploadModel` API) - `customization` —— 通过模型微调任务产出(走 [`../arkcli-train-finetune/SKILL.md`](../arkcli-train-finetune/SKILL.md) 的 `train finetune artifacts export`,**底层是另一个 OpenAPI Action `CreateCustomModel`**,跟 `upload` 不互通) - 生命周期状态机:`preparation → processing → ready`(成功)或 `failed`;导出场景另有 `exporting` / `exportfailed` - 量化是单独流程:先 `available-quantizations ` 查可用模式,并查看 `supported_inference_types_by_quantization` 预判每种量化方式支持的部署/付费形态;再 `quantize --quantization ` 提交量化任务,结果是一个**独立的新 cm-xxxxx**。源模型、量化结果模型、最终部署出来的 endpoint 是三类不同资源,不能混用 ID - 自定义模型 ID(`cm-xxxxx`)**不是** `-` 形式,**不能直接作为 `+chat` / `+gen` 的 `--model`**;必须先通过 `arkcli +deploy` 获得 endpoint,拿 `ep-xxx` 才能调用推理。若该自定义模型已有 Running Endpoint,`+deploy` 会直接复用已有 endpoint ## 快速决策 - 用户问"我的自定义模型":读 [`references/arkcli-custommodel-list.md`](references/arkcli-custommodel-list.md),用 `arkcli models custommodel list --mine` - 用户要按名称 / ID / base 模型 display name 模糊查找:读 [`references/arkcli-custommodel-list.md`](references/arkcli-custommodel-list.md),用 `list --search ` - 用户已有 `cm-xxxxx` 并要状态 / 详情 / endpoint 引用 / artifact types:读 [`references/arkcli-custommodel-get.md`](references/arkcli-custommodel-get.md),用 `get` - 用户要从 TOS 导入权重:读 [`references/arkcli-custommodel-upload.md`](references/arkcli-custommodel-upload.md)。用户已有 `tos://...` 时确认 TOS URI、base model 和名称;用户还没有 TOS URI 时先引导开通/上传 TOS,不要直接跑 `upload` - 用户要改名 / 改描述:读 [`references/arkcli-custommodel-update.md`](references/arkcli-custommodel-update.md),确认意图后用 `update` - 用户要删除:读 [`references/arkcli-custommodel-delete.md`](references/arkcli-custommodel-delete.md),先查 `active_endpoints`,确认后再执行 - 用户要量化:先读 [`references/arkcli-custommodel-available-quantizations.md`](references/arkcli-custommodel-available-quantizations.md),再读 [`references/arkcli-custommodel-quantize.md`](references/arkcli-custommodel-quantize.md) ## 列表参数与输出契约 - `custommodel list --sort-order` 只接受小写 `asc` / `desc`。收到其他值时应把它视为本地参数错误,不要尝试调用接口或改成其他大小写后盲目重试。 - 使用 `--format table` 或 `--format csv` 时,每个 `result.items[]` 模型是一行;不要把分页响应根对象或 `result` map 当成模型记录。需要保留完整分页元数据时使用 JSON/YAML。 ## 部署前的自定义模型目标澄清 仅当用户的最终目标是“把我的自定义模型部署成 Endpoint”、但没有给出唯一 `cm-*` 时执行本节;用户已明确给出 `cm-*` 时跳过。 1. 先执行同范围只读查询:`arkcli models custommodel list --mine --statuses ready --page-all --page-delay 500 --format json`。保留退出码与 stderr,不能把认证、权限或网络失败当作空清单;认证/权限错误按 shared 处理,不扫描凭证或自动切身份。 2. 候选只能来自本轮完整结构化结果。输出被宿主截断时,先读取工具保存的完整文件;确实没有完整捕获时,允许把同一只读查询的 stdout 重新落盘,stderr 单独保留,再用 `jq` / `sed` 检查 `result.items` 与分页信息。该同范围补查一轮最多执行一次,不循环重试。`jq` 空结果或字段缺失时先核对当前 reference 与原始 JSON,不盲猜字段、不凭记忆补 `cm-*`。分页未取全、补查仍失败或关键字段仍缺失时,说明具体边界并停止;拿全候选前不出选择题,更不执行部署。 3. 按 0 / 1 / N 收敛: - 0 个:停止,提示用户先 upload、量化或完成精调产物导出。 - 1 个:复述该模型的 `id / name / foundation_model / create_time`,将它作为唯一目标转交 `arkcli-deploy`。 - N 个:使用宿主提供的结构化选择能力,把每个候选的 `id / name / foundation_model / create_time` 直接列给用户选择;不要在通用 Skill 中写死某个宿主的工具名,也不要额外写死 `Other` 选项。 4. 唯一目标确定前,不执行 `arkcli +deploy`、`arkcli infer endpoint create` 或 Raw API。目标选择完成后转 `arkcli-deploy`,并继续遵守其写操作确认;选择模型本身不等于授权部署。 ## Agent 快速执行顺序 1. 不确定认证状态时,先 `arkcli auth status` 2. "我的自定义模型"语义:直接 `custommodel list --mine`,**不要套 shared 的 Tags 默认过滤**(custommodel 服务端原生支持 `--mine`) 3. 上传前必填三项:`--name` / `--base-model ` / `--tos tos:///`;缺任一会被服务端拒 4. `upload` / `quantize` 是异步任务:返回后用 `custommodel get ` 轮询 status,**不要原地循环 upload/quantize** 5. `quantize` 前必跑 `available-quantizations `:不同 base model 支持的量化模式不同,盲传服务端会拒;若用户关心 token / 模型单元等部署形态,优先看返回里的 `supported_inference_types_by_quantization` 6. `quantize --dry-run` 只输出本地 `preview.v1`,不会调用 `CreateQuantizedCustomModel`;`steps[].payload` 只描述真实请求字段,不应出现后端 `DryRun`。它不是服务端校验,核对后仍需确认再执行真实量化 7. `delete` / `update` / `quantize` 是写操作,执行前向用户复述影响范围 8. `delete` 默认会走 [Y/N] 二次确认;`--yes` 表示跳过本地二确,`--dry-run` 表示只预览不删除。只有用户已经明确确认删除目标和影响范围后,agent 才能把 `--yes` 加到命令里 9. `get --transform` 是 `custommodel get` 自己的字段白名单,不是全局 GJSON 表达式;要查嵌套路径时不要把它当作全局 `--transform` ## 典型业务链路 ### 1. 从 TOS 上传新自定义模型 ``` auth status → custommodel upload --name X --base-model --tos tos://b/p → custommodel get (轮询直到 status=ready) → custommodel get --transform 'artifact_types' (看产物形态) ``` ### 2. 量化已就绪的自定义模型 ``` custommodel get (确认 status=ready) → custommodel available-quantizations (看支持哪些 mode) → custommodel quantize --quantization --dry-run → 用户确认量化目标和影响范围 → custommodel quantize --quantization → custommodel get (量化结果是新 cm-xxxxx,再次轮询) ``` ### 3. 准备给 `+deploy` 当目标 ``` custommodel list --mine --statuses ready --page-all --page-delay 500 --format json → 按 0 / 1 / N 澄清唯一 cm-xxxxx → +deploy --model cm-xxxxx ... (若已有 Running Endpoint 会复用;详见 ../arkcli-deploy/SKILL.md) ``` ### 4. 清理不再使用的自定义模型 ``` custommodel get --transform 'active_endpoints' (确认无 endpoint 引用) → custommodel delete --dry-run → custommodel delete (交互二确)或 custommodel delete --yes ``` ## 反模式(agent 必读) - 不要用 `arkcli models search` / `list` 找自定义模型 —— 那两条只走 FoundationModel 目录,自传模型一律不在里面。要找自传模型用 `custommodel list --search ` 或 `--mine` - 不要在 `upload` 之后立刻 `quantize` —— upload 是异步任务,status 经历 `preparation → processing → ready`;先 `custommodel get ` 确认 ready,再走 `available-quantizations` → `quantize` - 不要给 `quantize` 传一个 `available-quantizations` 没列的 mode —— 不同 base model 支持的量化集合不同,盲传必失败。先 `available-quantizations `,从返回里挑 - 不要把 `cm-xxxxx` 直接传给 `+chat` / `+gen` 的 `--model` —— 自定义模型必须先通过 `+deploy` 获得 endpoint(`ep-xxx`)才能推理调用;`+deploy` 可能复用已有 Running Endpoint - 不要在多个 ready 自定义模型中自行挑一个部署 —— 先按“部署前的自定义模型目标澄清”让用户从本轮实时结果中选择 - 不要为了自动化主动补 `--yes` —— 没 `--yes` 时 CLI 会走 [Y/N] 二确;只有用户已经确认删除 `cm-xxxxx` 且知道 endpoint 引用风险时才带 - 不要在 "我的" 语义下走 shared 的 Tags 客户端过滤 —— `custommodel list --mine` 是服务端原生过滤,更准也更省请求 - 不要密集刷 `get` 来轮询 status —— 推荐间隔 ≥ 10s,否则会被限流 ## 命令一览 | 命令 | 说明 | |------|------| | `arkcli models custommodel list` | 翻页 + 多维过滤 | | `arkcli models custommodel get ` | 详情 / 轮询 status | | `arkcli models custommodel upload` | 从 TOS 导入(异步) | | `arkcli models custommodel update ` | 改名 / 改描述 | | `arkcli models custommodel delete [--yes] [--dry-run]` | 删除(破坏性,不可逆);默认二确,`--yes` 跳过,`--dry-run` 预览 | | `arkcli models custommodel available-quantizations ` | 查可用量化模式(quantize 前必跑) | | `arkcli models custommodel quantize --quantization [--dry-run]` | 量化(异步);`--dry-run` 仅本地预览,不调用后端 | ## 常见降级 - 认证失败:转 [`../arkcli-auth/SKILL.md`](../arkcli-auth/SKILL.md) - profile / region 看起来不对:转 [`../arkcli-config/SKILL.md`](../arkcli-config/SKILL.md) - 找的是基础模型不是自定义模型:转 [`../arkcli-models/SKILL.md`](../arkcli-models/SKILL.md) - 拿到自定义模型后要部署:转 [`../arkcli-deploy/SKILL.md`](../arkcli-deploy/SKILL.md) - 产品命令未覆盖(例如想直接触发 customization job):转 [`../arkcli-api-explorer/SKILL.md`](../arkcli-api-explorer/SKILL.md) ## 参考 - [`references/arkcli-custommodel-list.md`](references/arkcli-custommodel-list.md) - [`references/arkcli-custommodel-get.md`](references/arkcli-custommodel-get.md) - [`references/arkcli-custommodel-upload.md`](references/arkcli-custommodel-upload.md) - [`references/arkcli-custommodel-update.md`](references/arkcli-custommodel-update.md) - [`references/arkcli-custommodel-delete.md`](references/arkcli-custommodel-delete.md) - [`references/arkcli-custommodel-available-quantizations.md`](references/arkcli-custommodel-available-quantizations.md) - [`references/arkcli-custommodel-quantize.md`](references/arkcli-custommodel-quantize.md) - [`references/evals.md`](references/evals.md) - [arkcli-models](../arkcli-models/SKILL.md) — 基础模型查询(与本 skill 是两套资源) - [arkcli-deploy](../arkcli-deploy/SKILL.md) — 拿到 ready 的自定义模型后部署成 endpoint - [arkcli-shared](../arkcli-shared/SKILL.md) — 认证、全局 flag、安全规则