AI 平台统一命令行工具 — 管理任务编排、模型、推理部署与微调。
- 任务编排管理:创建、停止、查询任务,在任务实例中执行命令
- 模型管理:模型 CRUD、分支/提交查询、镜像同步
- 代码仓库管理:创建、查看、删除代码仓库,查看分支/提交/标签与镜像导入
- Notebook 部署:创建、查看、停止、删除 Notebook,远程执行命令与日志跟踪
- 快速开始(exp):一条命令完成「本地代码推送 → 代码仓库创建/复用 → Notebook 创建/复用 → 远程执行」端到端流程,并缓存项目配置
- 运行时框架:查看/管理部署、微调、Notebook 可用的运行时框架
- 技能仓库:浏览、查询、上传、安装、删除平台技能
- 服务部署:模型部署、状态查询、服务删除
- 模型微调:提交微调任务
- 数据洞察:列出数据集、查看数据集详情(STAC Collection)与元数据
- EDA 数据探索:浏览 OM 表资产、查看表详情与关联任务、查看 EDA 结果、查询变量 EDA、数据头预览与图表下载(标识自动续接,无需手填内部 id)
- 集群与资源:查询集群状态、部署/微调/Notebook 可用的 GPU/CPU 资源规格
- 远程执行:在任务实例或 Notebook 中异步执行命令,支持等待结果与总超时上限
- 本地状态:task / notebook / exec session 句柄跨命令复用,支持省略 id;本地操作历史审计
- 多格式输出:table / json / yaml / wide / name / explore / raw
- 交互式浏览:bubbletea TUI JSON 浏览器
- 多平台适配:支持 OpenAPI 标准接口,适配器模式可扩展
- 统一配置:环境变量 / 项目配置 / 全局配置 / exp profile 四级优先级
二进制与安装脚本统一从 public 分发仓库
ai-public/ai-cli-release匿名下载,无需任何 GitLab token。
Linux / macOS / WSL(bash):
# 默认安装到 ~/.local/bin(无需 sudo),自动写入 PATH
curl -fsSL https://gitlab.insightst.com/ai-public/ai-cli-release/-/raw/main/install.sh | bash
# 安装指定版本
curl -fsSL https://gitlab.insightst.com/ai-public/ai-cli-release/-/raw/main/install.sh | bash -s -- -v v0.0.2
# 自定义安装目录
curl -fsSL https://gitlab.insightst.com/ai-public/ai-cli-release/-/raw/main/install.sh | bash -s -- -d /usr/local/binWindows(PowerShell,免管理员,自动加入用户级 PATH):
# ⚠️ 必须 .TrimStart([char]0xFEFF):GitLab raw 返回带 BOM,裸 iex 会解析失败
(irm https://gitlab.insightst.com/ai-public/ai-cli-release/-/raw/main/install.ps1).TrimStart([char]0xFEFF) | iex安装脚本会自动检测平台/架构、下载对应二进制并做 sha256 校验,末尾询问是否预装内置 skill ai-cli 与登录平台(非交互环境默认跳过,可用 --with-skill --agent claude / --login 强制)。
安装后如未在 PATH 中,请重新打开终端,或手动添加:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrcOpenClaw / Claude Code 等 agent 环境一键安装:
curl -fsSL https://gitlab.insightst.com/ai-public/ai-cli-release/-/raw/main/install.sh | bash安装后登录(交互式或非交互式):
# 交互式登录
ai-cli login
# 非交互式登录
ai-cli login --api-url https://ai-dev.insightst.com --token <your-token>登录会保存 api_url、auth_token、current_user 等到 ~/.ai-cli/config.yaml。
更新到最新版本:
ai-cli upgradecurl -fsSL https://gitlab.insightst.com/ai-public/ai-cli-release/-/raw/main/install.sh | bash -s -- --uninstallgo build -o ai-cli或使用 Makefile:
make build # 当前平台
make build-all # 跨平台编译(darwin/linux/windows, amd64/arm64)
make install # 安装到 $GOPATH/bin安装后将二进制文件放到 PATH 中即可使用:
cp ai-cli ~/bin/ai-cli首次使用前需要配置 API 地址和认证 Token。支持三种方式(优先级从高到低):
export AI_CLI_TASK_API_URL="https://task.insightst.com"
export AI_CLI_API_URL="https://ai-dev.insightst.com"
export AI_CLI_AUTH_TOKEN="your-token-here"
# 数据洞察平台(与 AI 平台用户体系未打通,使用独立 token)
export AI_CLI_DATA_API_URL="https://data-platform-service.insightst.com/data_platform_api"
export AI_CLI_DATA_TOKEN="your-data-token-here"
# EDA 数据探索(feature-platform-service,X-Auth-Token 裸 token)
export AI_CLI_EDA_API_URL="https://feature-platform-service.insightst.com"
export AI_CLI_EDA_TOKEN="your-eda-token-here"AI_CLI_TASK_API_URL:任务编排平台 API 地址AI_CLI_API_URL:AI 模型平台 API 地址AI_CLI_AUTH_TOKEN:认证 Token(AI/任务平台,Bearer)AI_CLI_DATA_API_URL:数据洞察平台 API 地址(可选,不配则dataset命令不可用)AI_CLI_DATA_TOKEN:数据洞察平台 Token(X-Auth-Token,与 AI 平台独立)AI_CLI_EDA_API_URL:EDA 数据探索 API 地址(可选,不配则dataset explore命令不可用;指向 feature-platform-service,路径前缀/api/v1)AI_CLI_EDA_TOKEN:EDA 数据探索 Token(X-Auth-Token裸 token,与数据平台认证方式一致)AI_CLI_GIT_PASSWORD:代码仓库 Git 认证密码/Token(exp / repo 推送时使用)
ai-cli login登录后会在~/.ai-cli/config.yaml写入api_url、auth_token、current_user,并覆盖环境变量/全局文件中的同名配置。推荐首次使用先执行login。
mkdir -p ~/.ai-cli
cat > ~/.ai-cli/config.yaml << 'EOF'
task_api_url: https://task.insightst.com
api_url: https://ai-dev.insightst.com
auth_token: your-token-here
data_api_url: https://data-platform-service.insightst.com/data_platform_api
data_token: your-data-token-here
eda_api_url: https://feature-platform-service.insightst.com
eda_token: your-eda-token-here
EOF在实验根目录创建 .ai-cli/<name>.yaml(按实验名命名,收纳在 .ai-cli/ 目录下,采用分组结构):
common:
api_url: https://ai-dev.insightst.com
current_user: insightst_test
auto_confirm: false
exp:
notebook:
resource_id: 2
runtime_framework_id: 227项目配置文件分两组:
common放共用字段(api_url/current_user/auto_confirm),exp放 exp 专用字段(repo/notebook/git等子分组)。凭据类字段(auth_token/data_token/git_password等)仍只存全局~/.ai-cli/config.yaml,不写入项目配置。
| 命令 | 说明 |
|---|---|
ai-cli login |
交互式登录 AI 平台 |
ai-cli login --api-url URL --token TOKEN |
非交互式登录 |
| 命令 | 说明 |
|---|---|
ai-cli task create |
创建新任务(成功后句柄自动落盘本地) |
ai-cli task get [TASK_ID] |
查看任务详情(省略 id 取本地最近 task) |
ai-cli task stop [TASK_ID] |
停止任务(不可逆;默认确认,--yes 跳过;成功后清除本地句柄) |
ai-cli task instances [TASK_ID] |
查看任务实例列表(省略 id 取本地最近 task) |
ai-cli task logs [TASK_ID INSTANCE_ID] |
查看任务实例日志(instance id 缺省取最近 exec 实例) |
ai-cli task exec [TASK_ID INSTANCE_ID] --command CMD |
在实例中执行命令(异步) |
ai-cli task exec-result [TASK_ID INSTANCE_ID SESSION_ID] |
查看命令执行结果(三个 id 均可省略回退) |
ai-cli task list-local |
列出本地跟踪的 task(区别于平台的 task list) |
ai-cli task forget [TASK_ID] |
仅从本地移除 task 跟踪(不影响平台资源) |
省略 id 语义:task 命令的位置参数均可省略,回退到本地 taskstore(
~/.ai-cli/tasks.json)。本地仅有一个 task 时自动选用;多个 task 时报错并提示task list-local,不自动猜测。显式传 id 时行为与现状一致。本地状态仅为便利,非权威,关键操作仍以平台 API 为准。
task exec --wait加固:默认 30 分钟总超时(--timeout-total,0表示不限),超时只退出 CLI 不停远端命令;等待时每轮打印 RUNNING 心跳(--quiet关闭)。
| 命令 | 说明 |
|---|---|
ai-cli repo list |
列出代码仓库 |
ai-cli repo get <codePath> |
查看代码仓库详情 |
ai-cli repo create --namespace NS --name NAME |
创建代码仓库 |
ai-cli repo update <codePath> |
更新代码仓库 |
ai-cli repo delete <codePath> |
删除代码仓库 |
ai-cli repo branches <codePath> |
查看分支 |
ai-cli repo commits <codePath> |
查看提交历史 |
ai-cli repo tags <codePath> |
查看标签 |
ai-cli repo relations <codePath> |
查看关联资源 |
ai-cli repo mirror <codePath> |
创建模型/代码镜像导入任务 |
ai-cli repo mirror-sync <codePath> |
手动触发镜像同步 |
ai-cli repo mirror-progress <codePath> |
查看镜像导入进度 |
| 命令 | 说明 |
|---|---|
ai-cli exp list |
列出 Notebook 部署 |
ai-cli exp get <id> |
查看 Notebook 详情 |
ai-cli exp create --name NAME --resource-id ID --runtime-framework-id ID |
创建 Notebook |
ai-cli exp create --name NAME --resource-id ID --image IMAGE |
使用自定义镜像创建 Notebook |
ai-cli exp stop <id> |
停止 Notebook |
ai-cli exp delete [id] |
删除 Notebook(省略 id 取本地最近 notebook) |
ai-cli exp container-logs <id> |
查看 Notebook 日志 |
ai-cli exp exec [id] -- COMMAND |
在 Notebook 中执行命令 |
Notebook
delete支持--force跳过确认;exec、delete均可省略 id,回退到本地最近跟踪的 notebook。
| 命令 | 说明 |
|---|---|
ai-cli exp run [name] |
一键端到端运行(创建/复用代码仓库与 Notebook、推送代码、远程执行命令) |
ai-cli exp run --list |
列出可选资源/框架候选(JSON),不执行创建 |
ai-cli exp logs [RUN_ID] |
重新挂回某次 exp/exec 远程命令的 SSE 日志流(按 PID 过滤、识别结束哨兵);--list 列出当前运行记录,--log-file 写文件 |
ai-cli exp config list |
列出已保存的 exp 实验 |
ai-cli exp config show <name> |
查看实验配置 |
ai-cli exp config delete <name> |
删除实验配置 |
ai-cli exp metric --experiment NAME |
查询 MLflow 训练指标(不带 --run 列实验下所有 run 的最新 metrics;带 --run 列指定 metric 历史序列) |
ai-cli exp artifact --experiment NAME --run RUN_ID |
查看 MLflow 训练产物清单,并给出 MLflow Web UI 深链 |
--third-party-git keep/migrate/error |
检测到本地实验目录是第三方 Git 仓库时的处理策略:keep 保留并使用原仓库/分支、直接推回 origin;migrate 迁移到平台仓库;error 直接报错退出 |
指定实验名后,配置会保存到
~/.ai-cli/profiles/<name>.yaml与实验内.ai-cli/<name>.yaml;省略实验名时从.ai-cli/目录读取实验配置(唯一配置自动选用,多个时需显式指定)。命令行 flag 优先级最高,覆盖配置文件。登录提示:
exp run执行前会检查api_url与auth_token。缺省时交互模式会自动提示登录(类似ai-cli login),非交互模式(-n)会直接报错并提示使用login --api-url --token或环境变量AI_CLI_API_URL/AI_CLI_AUTH_TOKEN。
| 命令 | 说明 |
|---|---|
ai-cli runtime-framework list |
列出运行时框架 |
ai-cli runtime-framework list --deploy-type 5 |
列出 Notebook 运行时框架(1=推理,2=微调,5=notebook) |
ai-cli runtime-framework create |
创建运行时框架 |
ai-cli runtime-framework update <id> |
更新运行时框架 |
ai-cli runtime-framework delete <id> |
删除运行时框架 |
| 命令 | 说明 |
|---|---|
ai-cli model list |
列出模型 |
ai-cli model get <modelPath> |
查看模型详情 |
ai-cli model create |
创建模型 |
ai-cli model delete <modelPath> |
删除模型(不可逆;默认确认,--yes 跳过) |
ai-cli model branches <modelPath> |
查看模型分支 |
ai-cli model commits <modelPath> |
查看模型提交历史 |
ai-cli model framework <modelPath> |
查看运行时框架 |
ai-cli model relations <modelPath> |
查看模型关联资源 |
ai-cli model mirror <modelPath> |
创建模型导入任务 |
ai-cli model mirror-sync <modelPath> |
手动触发模型同步 |
ai-cli model mirror-progress <modelPath> |
查看导入进度 |
| 命令 | 说明 |
|---|---|
ai-cli serve deploy <modelPath> |
部署模型推理服务 |
ai-cli serve status <deployId> |
查看部署状态 |
ai-cli serve delete <deployId> |
删除部署实例(不可逆;默认确认,--yes 跳过) |
| 命令 | 说明 |
|---|---|
ai-cli tune finetune <modelPath> |
提交微调任务 |
| 命令 | 说明 |
|---|---|
ai-cli dataset list |
列出所有数据集(records.id 即数据集 id) |
ai-cli dataset get <datasetId> |
查看数据集详情(STAC Collection) |
ai-cli dataset metadata <datasetId> |
查看数据集元数据 |
数据洞察平台与 AI 平台用户体系未打通,使用独立 token(
AI_CLI_DATA_TOKEN,X-Auth-Token)。
| 命令 | 说明 |
|---|---|
ai-cli dataset explore tables [<service>] |
列出 OM 表资产(fqn 即表完全限定名) |
ai-cli dataset explore details <tableFQN> |
查看表详情(字段 schema + edaTaskId,写缓存) |
ai-cli dataset explore tasks [<datasetID>] |
查询数据集关联任务(复用 details 缓存) |
ai-cli dataset explore eda [<datasetID>] |
查看 EDA 结果(复用缓存的 dataset_id + task_codes) |
ai-cli dataset explore variables [<datasetID>] |
查询变量 EDA 结果(复用缓存,--variable 可多次指定,不传返回全量) |
ai-cli dataset explore preview <datasetPath> |
数据头预览(前 N 行,--engine --limit) |
ai-cli dataset explore plot <hdfsPath> |
下载 EDA 分析图片(-o 输出文件) |
EDA 探索链路把
details回吐的table_fqn/dataset_id/edaTaskId缓存到~/.ai-cli/eda.json,后续tasks/eda/variables命令自动续接,无需手记内部 id。服务根AI_CLI_EDA_API_URL(feature-platform-service,路径前缀/api/v1),认证X-Auth-Token裸 token(AI_CLI_EDA_TOKEN)。接口契约见docs/EDA.md与docs/datasets_eda.md。Workflow 编排接口(operator/task/run)暂未接入,留待后续单独设计。
| 命令 | 说明 |
|---|---|
ai-cli skills list |
列出技能 |
ai-cli skills list --only-mine |
仅显示我的技能 |
ai-cli skills get <id> |
查看技能详情(含文件列表) |
ai-cli skills create --name NAME --path PATH |
上传技能到平台 |
ai-cli skills install <id> |
下载并安装技能到本地(默认 .skills/<slug>/) |
ai-cli skills install <id> --dir DIR |
安装到指定目录 |
ai-cli skills delete <id> |
删除技能(不可逆;默认确认,--yes 跳过) |
| 命令 | 说明 |
|---|---|
ai-cli cluster list |
列出集群及资源状态 |
ai-cli resource list |
列出部署/微调可用的 GPU/CPU 资源规格 |
ai-cli resource list --deploy-type 2 |
查询微调可用资源(1=部署,2=微调,5=notebook) |
ai-cli resource list --cluster-id <ID> |
指定集群(不指定则自动选第一个) |
| 命令 | 说明 |
|---|---|
ai-cli log |
列出有历史记录的资源类型及条数 |
ai-cli log task |
查看 task 操作历史(create/stop/exec) |
ai-cli log task -n 50 |
最近 50 条 |
ai-cli log serve --action deploy |
按 action 过滤 |
ai-cli log task -o json |
JSON 输出 |
本地操作历史落盘于
~/.ai-cli/history/<resource>.jsonl,仅记录操作元信息(资源 id / 动作 / 结果),不记录敏感字段(token、--config明文等)。覆盖 task/serve/skill/model/tune 的写操作。
| 命令 | 说明 |
|---|---|
ai-cli version |
查看版本信息 |
ai-cli upgrade |
升级到最新版本 |
ai-cli upgrade --check |
仅检查是否有新版本 |
ai-cli upgrade --list |
列出所有可发布的版本 |
ai-cli upgrade --version v0.0.9 |
安装指定版本(可降级) |
| 命令 | 说明 |
|---|---|
ai-cli train |
训练管理(待实现) |
ai-cli eval |
评估管理(待实现) |
ai-cli config |
CLI 配置管理(待实现) |
ai-cli completion |
Shell 补全生成(待实现) |
# 简略版本(--version)
ai-cli --version
# 详细版本信息
ai-cli versionai-cli version 输出:
ai-cli v0.1.0
Commit: abc1234
BuildDate: 2026-05-19T10:00:00Z
GoVersion: go1.24.0
Platform: darwin/arm64
# 检查并升级到最新版本
ai-cli upgrade
# 仅检查是否有新版本
ai-cli upgrade --check
# 列出所有可发布的版本
ai-cli upgrade --list
# 安装指定版本(可降级回退到旧版本)
ai-cli upgrade --version v0.0.9
# 也可省略 v 前缀
ai-cli upgrade --version 0.0.9升级流程:从 GitLab Releases 获取目标版本 → 下载对应平台的二进制 → 验证 → 替换当前可执行文件。
--version 可指定任意已发布版本,包括比当前更旧的版本(降级)。降级时会提示确认
(可能丢失新版本功能),用 --yes 跳过确认以适配脚本场景。降级后内置 skill 会用
新(即旧版)二进制同步重装,保持 skill 与二进制版本一致。
Makefile 中版本号自动从 git tag 获取:
# 默认:git describe --tags --always --dirty
make build
# 手动指定版本号
make build VERSION=v0.2.0# 交互式登录
ai-cli login
# 非交互式登录(CI / Agent 推荐)
ai-cli login --api-url https://ai.insightst.com --token <your-token># 1. 准备本地项目
cd my-ai-project
# 2. 设置 git 凭证(可用 AI_CLI_GIT_PASSWORD 环境变量或 --git-password)
export AI_CLI_GIT_PASSWORD=<your-token>
# 3. 首次运行:交互式选择资源/框架
ai-cli exp run my-project \
--root-dir . \
--file main.py
# 4. 后续运行:复用已保存配置
ai-cli exp run --file main.py -n
# 非交互式 / CI 一次到位
ai-cli exp run my-project --non-interactive \
--root-dir . \
--resource-id 2 \
--runtime-framework-id 227 \
--file main.py \
--log-stream-timeout 30s
# 使用自定义镜像(与 --runtime-framework-id 互斥)
ai-cli exp run my-project --non-interactive \
--root-dir . \
--resource-id 2 \
--image harbor-prod.insightst.com/ai/hub-notebook:ubuntu-22.04-py311-torch2.3.1-ist1.1.0 \
--file main.py
# 实验目录已是第三方 Git 仓库时,保留并使用原仓库/分支,直接推回 origin
ai-cli exp run my-project --non-interactive \
--root-dir . \
--resource-id 2 \
--runtime-framework-id 227 \
--file main.py \
--third-party-git keep
# 实验目录已是第三方 Git 仓库时,迁移到平台仓库
ai-cli exp run my-project --non-interactive \
--root-dir . \
--resource-id 2 \
--runtime-framework-id 227 \
--file main.py \
--third-party-git migrate
# 列出可选资源/框架候选
ai-cli exp run my-project --list \
--root-dir . \
--file main.py# 创建任务(最简示例)
ai-cli task create \
--name my-first-task \
--queue-id b804e130-a56b-4af8-a4db-24192f4a75db \
--image busybox:latest
# 创建任务(完整配置)
ai-cli task create \
--name train-job \
--queue-id b804e130-a56b-4af8-a4db-24192f4a75db \
--image harbor-dev.insightst.com/ai/pytorch:2.1.0-cuda12.1 \
--framework-type CUSTOM \
--gpu 4 --cpu 8 --memory 32 \
--command "python" --args "train.py" \
--env DB_HOST=mysql.local \
--namespace ai \
--pod-retention ON_FAILURE \
--timeout 3600
# 查看任务详情
ai-cli task get task-abc123
# 查看任务实例
ai-cli task instances task-abc123
# 查看实例日志
ai-cli task logs task-abc123 inst-001
ai-cli task logs task-abc123 inst-001 --tail 50
ai-cli task logs task-abc123 inst-001 --filter ERROR
# 在实例中执行命令(异步)
ai-cli task exec task-abc123 inst-001 --command "nvidia-smi"
ai-cli task exec task-abc123 inst-001 --command "ls -la /output" --timeout 60
# 在实例中执行命令并等待结果(默认 30 分钟总超时)
ai-cli task exec task-abc123 inst-001 --command "python eval.py" --wait
ai-cli task exec task-abc123 inst-001 --command "python eval.py" --wait --timeout-total 1h
ai-cli task exec task-abc123 inst-001 --command "python eval.py" --wait --quiet # 关闭心跳
# 查看命令执行结果
ai-cli task exec-result task-abc123 inst-001 exec-session-abc123
# 停止任务
ai-cli task stop task-abc123
# 省略 id:取本地最近跟踪的 task(create 后自动落盘句柄)
ai-cli task get # 等价于取最近 task
ai-cli task logs # task id 与 instance id 均回退到本地最近
ai-cli task exec-result # 三个 id 全部回退到本地最近 exec 句柄
# 本地句柄管理
ai-cli task list-local # 列出本地跟踪的 task
ai-cli task forget task-abc123 # 仅从本地移除跟踪(不影响平台资源)# 列出所有模型
ai-cli model list
# 搜索模型
ai-cli model list --search Qwen
# 按标签筛选
ai-cli model list --tag-category framework --tag-name pytorch
# JSON 格式输出
ai-cli model list -o json
# 仅输出模型路径(适合管道)
ai-cli model list -o name
# 查看模型详情
ai-cli model get insightst_test/XingQue
# 创建模型
ai-cli model create \
--namespace insightst_test \
--name my-model \
--nickname "我的模型" \
--model-type llm \
--license apache-2.0
# 删除模型
ai-cli model delete insightst_test/my-model
# 查看模型分支
ai-cli model branches insightst_test/XingQue
# 查看提交历史(支持分页)
ai-cli model commits insightst_test/XingQue
ai-cli model commits insightst_test/XingQue --limit 10
# 查看运行时框架
ai-cli model framework insightst_test/XingQue
ai-cli model framework insightst_test/XingQue --deploy-type 1
# 查看关联资源
ai-cli model relations insightst_test/XingQue
# 导入外部模型
ai-cli model mirror insightst_test/my-model \
--mirror-source-id 1 \
--source-url https://modelscope.cn/xxx
# 同步模型
ai-cli model mirror-sync insightst_test/my-model
# 查看导入进度
ai-cli model mirror-progress insightst_test/my-model# 列出仓库
ai-cli repo list
# 搜索仓库
ai-cli repo list --search my-project
# 查看详情
ai-cli repo get insightst_test/my-repo
# 创建仓库
ai-cli repo create \
--namespace insightst_test \
--name my-repo \
--nickname "我的仓库" \
--default-branch main
# 删除仓库
ai-cli repo delete insightst_test/my-repo
# 查看分支、提交、标签
ai-cli repo branches insightst_test/my-repo
ai-cli repo commits insightst_test/my-repo
ai-cli repo tags insightst_test/my-repo# 查询 Notebook 资源
ai-cli resource list --deploy-type 5
ai-cli runtime-framework list --deploy-type 5
# 创建 Notebook(通过运行时框架)
ai-cli exp create \
--name my-notebook \
--resource-id 2 \
--runtime-framework-id 227 \
--save-defaults
# 创建 Notebook(自定义镜像;CLI Server 始终启动,无需指定)
ai-cli exp create \
--name my-notebook \
--resource-id 2 \
--image harbor-prod.insightst.com/ai/hub-notebook:ubuntu-22.04-py311-torch2.3.1-ist1.1.0
# 列出、查看、停止、删除
ai-cli exp list
ai-cli exp get 582
ai-cli exp stop 582
ai-cli exp delete 582 --force
# 在 Notebook 中执行命令
ai-cli exp exec 582 -- python /workspace/my-repo/hello.py
# 查看日志
ai-cli exp container-logs 582
# 重新挂回某次 exp/exec 远程命令的 SSE 日志(流式跟踪中断后继续看同一条命令)
ai-cli exp logs # 最近一条运行记录
ai-cli exp logs --list # 列出当前 .running/ 下的运行记录# 部署模型(从命令行传入 JSON 配置)
ai-cli serve deploy insightst_test/XingQue \
--config '{"framework":"pytorch","gpu":1}'
# 部署模型(从文件读取配置)
ai-cli serve deploy insightst_test/XingQue \
--config @deploy-config.json
# 查看部署状态
ai-cli serve status <deploy-id>
# 删除部署
ai-cli serve delete <deploy-id># 提交微调任务
ai-cli tune finetune insightst_test/XingQue \
--config '{"framework":"pytorch","dataset":"my-data"}'
# 从文件读取微调配置
ai-cli tune finetune insightst_test/XingQue \
--config @finetune-config.json
# 指定当前用户
ai-cli tune finetune insightst_test/XingQue \
--config @finetune-config.json \
--current-user myname# 列出所有数据集(表格:ID / NAME / TYPE / PATH)
ai-cli dataset list
# JSON 格式输出
ai-cli dataset list -o json
# 查看数据集详情(STAC Collection,默认 JSON)
ai-cli dataset get ASTGTM_003
# 查看数据集元数据(collectionId 即数据集 id)
ai-cli dataset metadata ASTGTM_003
# YAML 输出
ai-cli dataset get ASTGTM_003 -o yaml
# 提取 JSON 子集(如仅取存储路径)
ai-cli dataset get ASTGTM_003 -o raw --transform "detail.path"数据流向:
dataset list获取数据集列表 →records[].id即数据集 id →dataset get/dataset metadata用该 id 查询详情。
# 列出 OM 表资产(fqn 即表完全限定名)
ai-cli dataset explore tables
ai-cli dataset explore tables odsstacstorageservice # 按数据源服务过滤
# 查看表详情(字段 schema + edaTaskId),成功后写入本地缓存
ai-cli dataset explore details StacStorageService.StacCatalog.DefaultCatalog.ASTGTM_003
# 关联任务:自动复用 details 缓存的 dataset_id
ai-cli dataset explore tasks
# EDA 结果:自动复用缓存的 dataset_id + task_codes
ai-cli dataset explore eda
ai-cli dataset explore eda --task-code task_abc --task-code task_def # 或手动指定
# 变量 EDA:自动复用缓存的 dataset_id,默认返回全量变量
ai-cli dataset explore variables
ai-cli dataset explore variables --variable t2m --variable time # 或指定变量
# 数据头预览(前 100 行)
ai-cli dataset explore preview /data/era5/t2m
ai-cli dataset explore preview /data/era5/t2m --engine dask --limit 50
# 下载 EDA 分析图片
ai-cli dataset explore plot /eda/plots/dist.png -o dist.png数据流向:
tables→details <tableFQN>(写入本地 id 缓存)→tasks(读缓存续接,回写 task_codes)→eda/variables(读缓存续接)。接口契约见docs/EDA.md与docs/datasets_eda.md。
# 列出所有技能
ai-cli skills list
# 仅显示我的技能
ai-cli skills list --only-mine
# 分页查询
ai-cli skills list --page 2 --per 20
# JSON 格式输出
ai-cli skills list -o json
# 查看技能详情(含文件列表)
ai-cli skills get 4
# 上传技能(目录自动压缩为 ZIP)
ai-cli skills create --name "my-skill" --path ./my-skill/
# 上传技能(指定 ZIP 文件)
ai-cli skills create --name "my-skill" --path ./skill.zip
# 上传为公开技能
ai-cli skills create --name "my-skill" --path ./my-skill/ --visibility PUBLIC
# 安装技能到默认目录(.skills/<slug>/)
ai-cli skills install 4
# 安装技能到指定目录
ai-cli skills install 4 --dir ~/.claude/skills/omc-learned/slack/
# 安装到 Claude Code 全局 skills 目录
ai-cli skills install 4 --agent claude --scope global
# 安装到当前项目的 Codex skills 目录
ai-cli skills install 4 --agent codex --scope project
# 安装到指定项目目录的 Agent skills 目录
ai-cli skills install 4 --agent claude --scope /path/to/project
ai-cli skills install built-in:ai-cli --agent claude --scope D:\test\ai-cli-skills-test
# 安装二进制内置 skill(无需平台连接)
ai-cli skills install built-in:ai-cli --agent claude --scope global
ai-cli skills install built-in:ai-cli --agent codex --scope project
# 删除技能
ai-cli skills delete 4# 列出集群及资源状态
ai-cli cluster list
# 列出部署可用的资源规格(deploy-type=1,默认)
ai-cli resource list
# 列出微调可用的资源规格(deploy-type=2)
ai-cli resource list --deploy-type 2
# 列出 Notebook 可用资源规格(deploy-type=5)
ai-cli resource list --deploy-type 5
# 指定集群(不指定则自动选第一个可用集群)
ai-cli resource list --cluster-id 8bf035bf-ebbf-45fb-99a5-66214d91f405
# JSON 输出
ai-cli resource list -o json# 列出有历史记录的资源类型及条数
ai-cli log
# 查看 task 操作历史(create/stop/exec)
ai-cli log task
# 最近 50 条
ai-cli log task -n 50
# 按 action 过滤
ai-cli log serve --action deploy
# JSON 输出(适合管道处理)
ai-cli log task -o json历史落盘于
~/.ai-cli/history/<resource>.jsonl,仅记操作元信息,不记--config明文等敏感字段。
# JSON 格式输出
ai-cli task get task-abc123 -o json
# 仅输出名称(管道友好)
ai-cli task instances task-abc123 -o name
# YAML 输出(适合导出配置)
ai-cli task get task-abc123 -o yaml
# 交互式 JSON 浏览器
ai-cli model get insightst_test/XingQue -o explore
# 提取 JSON 子集
ai-cli model list -o json --transform "data.0.name"
# 紧凑 JSON(适合管道处理)
ai-cli model list -o raw | jq .| 参数 | 说明 |
|---|---|
-o, --output |
输出格式:table / json / yaml / wide / name / explore / raw |
--transform |
gjson 路径,提取 JSON 子集后再输出 |
-w, --workspace |
指定工作空间 |
-v, --version |
版本信息 |
不可逆命令(task stop / model delete / serve delete / skills delete)默认在执行前先拉取目标资源摘要并二次确认,避免误删:
$ ai-cli task stop task-abc123
About to stop task "task-abc123":
Name: train-job
Status: RUNNING
Image: pytorch:2.1.0-cuda12.1
Stop? [y/N]
- 回答
y/yes执行;其余(含直接回车、Ctrl-D)中止,退出码非零,远端资源不受影响。 -y, --yes跳过本次确认;或在配置里设auto_confirm: true(环境变量AI_CLI_AUTO_CONFIRM=true)全局跳过。- 预览拉取失败时降级为无预览确认(打印 warning),不阻断。
| 用途 | 依赖 | 版本 |
|---|---|---|
| CLI 框架 | spf13/cobra | v1.8 |
| 配置管理 | spf13/viper | v1.18 |
| TUI 框架 | charmbracelet/bubbletea | v0.25 |
| TUI 组件 | charmbracelet/bubbles | v0.18 |
| 终端样式 | charmbracelet/lipgloss | v0.10 |
| 表格输出 | olekukonko/tablewriter | v0.0.5 |
| JSON 路径 | tidwall/gjson | v1.17 |
| YAML | gopkg.in/yaml.v3 | v3.0 |
| 测试 | stretchr/testify | v1.9 |
- Factory 模式 —
cmdutil.Factory统一注入依赖(Config / Platform / IOStreams / Printer / TaskStore / History) - 接口抽象 —
platform.Platform接口隔离底层实现,方便切换 AI 平台 - 多 API 客户端 — 任务编排平台(task_api_url)、模型平台(api_url)、数据洞察平台(data_api_url)、EDA/特征平台(eda_api_url)使用独立客户端,各平台可配置不同认证方式
- 本地状态层 —
internal/taskstore持久化 task / notebook 句柄(省略 id 复用),internal/edastate缓存 EDA 探索的 table_fqn/dataset_id/task_codes(details→tasks/eda 续接),internal/history记录操作审计日志;internal/exp缓存 profile 配置;均为单机缓存视图,平台 API 为权威 - 分层结构 —
cmd→cmdutil→pkg/platform→pkg/api,职责清晰 - 预留扩展 — Train / Eval / Config / Completion 为预留 stub
ai-cli/
├── main.go # 程序入口
│
├── cmd/ # CLI 命令层(Cobra)
│ ├── root.go # 根命令 + Factory 注入 + 全局 flag
│ ├── task.go # task 子命令注册
│ ├── task_create.go # task create(成功后句柄落盘 taskstore)
│ ├── task_get.go # task get(支持省略 id)
│ ├── task_stop.go # task stop(支持省略 id,成功后清本地句柄)
│ ├── task_instances.go # task instances(支持省略 id)
│ ├── task_logs.go # task logs(支持省略 id,instance 回退 LastExec)
│ ├── task_exec.go # task exec(异步执行 + --wait 超时加固 + 心跳)
│ ├── task_exec_result.go # task exec-result(支持省略 id)
│ ├── task_local.go # task list-local / task forget(本地句柄管理)
│ ├── taskstore_helpers.go # 省略 id 兜底 + 历史记录辅助
│ ├── log.go # log 子命令(查看本地操作历史)
│ ├── login.go # login 子命令
│ ├── model.go # model 子命令
│ ├── repo.go # repo 子命令(代码仓库 CRUD / 分支 / 提交 / 镜像)
│ ├── exp.go # exp 子命令注册
│ ├── exp_create.go # exp create(支持 --save-defaults)
│ ├── exp_list.go # exp list
│ ├── exp_get.go # exp get
│ ├── exp_stop.go # exp stop
│ ├── exp_delete.go # exp delete(支持 --force)
│ ├── exp_container_logs.go # exp container-logs
│ ├── exp_exec.go # exp exec(在 Notebook 中执行命令)
│ ├── exp_exec_stop.go # exp exec-stop(停止远程命令)
│ ├── exp_metric.go # exp metric(查询 MLflow 训练指标)
│ ├── exp_artifact.go # exp artifact(查看 MLflow 训练产物清单 + Web UI 深链)
│ ├── exp_mlflow_common.go # exp metric/artifact 共用:tracking URI 解析
│ ├── exp_run.go # exp run(端到端一键流程)
│ ├── exp_logs.go # exp logs(重挂某次远程命令的 SSE 日志)
│ ├── exp_config.go # exp config 管理
│ ├── runtime_framework.go # runtime-framework 子命令
│ ├── serve.go # serve 子命令
│ ├── skill.go # skills 子命令(list/get/install/create/delete)
│ ├── tune.go # tune 子命令
│ ├── dataset.go # dataset 子命令(list/get/metadata,数据洞察平台)
│ ├── dataset_explore.go # dataset explore 子命令(tables/details/tasks/eda/preview/plot,EDA 探索)
│ ├── cluster.go # cluster 子命令(集群查询)
│ ├── resource.go # resource 子命令(资源规格查询)
│ ├── stub.go # 预留子命令(train/eval/config/completion)
│ ├── version.go # version 子命令
│ └── upgrade.go # upgrade 子命令
│
├── cmdutil/ # 依赖注入 & 输出格式化
│ ├── factory.go # Factory 接口 + 默认实现(含 TaskStore/History 懒初始化)
│ ├── printer.go # Printer 接口 + 7 种输出格式实现
│ ├── flagmeta.go # FlagResolver:CLI flag → HTTP 请求映射
│ ├── pager.go # AutoPager:自动分页(less -R)
│ └── test_helpers.go # MockFactory / MockPlatform / 内存版 Store/Logger
│
├── internal/ # 内部工具包(不可外部引用)
│ ├── config/
│ │ └── config.go # 配置加载(Viper 四级优先级)+ 持久化 + notebook 默认值
│ ├── taskstore/
│ │ └── store.go # 本地 task/notebook 句柄存储(~/.ai-cli/tasks.json,原子写)
│ ├── edastate/
│ │ └── edastate.go # EDA 探索 id 缓存(~/.ai-cli/eda.json,details→tasks/eda 续接)
│ ├── history/
│ │ └── history.go # 本地操作历史(~/.ai-cli/history/*.jsonl)
│ ├── exp/
│ │ └── profile.go # exp 项目 profile 存储(~/.ai-cli/profiles/*.yaml)
│ ├── stream/
│ │ ├── stream.go # StreamIterator 统一流式接口
│ │ ├── sse.go # SSE 事件解析器
│ │ ├── raw.go # 原始行解析器
│ │ └── detect.go # 按 Content-Type 自动选择解析器
│ ├── fileembed/
│ │ └── fileembed.go # @file 语法(读文件/stdin/base64)
│ └── jsonview/
│ └── model.go # bubbletea TUI 交互式 JSON 浏览器
│
├── pkg/ # 对外可复用包
│ ├── api/ # HTTP 客户端层
│ │ ├── client.go # Client 封装(认证/JSON/限流/错误解析/APIResponse解包/multipart上传,支持自定义 auth header)
│ │ ├── task.go # Task API + Queue API
│ │ ├── model.go # Model API(/hub/api/v1/models/...)
│ │ ├── code.go # Code API(代码仓库)
│ │ ├── notebook.go # Notebook API
│ │ ├── runtime_framework.go # RuntimeFramework API
│ │ ├── serve.go # Serve API(deployments)
│ │ ├── skill.go # Skill API(list/get/create/delete/download)
│ │ ├── train.go # Train API(finetune)
│ │ └── data.go # Data API(数据洞察:datasets/metadata,独立解包)
│ │ └── eda.go # EDA API(数据探索:tables/details/tasks/overview/preview/plot,字符串体容错解码)
│ │
│ └── platform/ # 领域接口 & 适配器
│ ├── interface.go # Platform/TaskClient/ModelClient/... 接口 + 领域模型
│ └── adapter/
│ └── openapi/ # OpenAPI 适配器实现
│ ├── platform.go # Platform 接口实现(多客户端:task + model + code + notebook + data)
│ ├── task_client.go # TaskClient 适配器
│ ├── queue_client.go # QueueClient 适配器(内部使用,无 CLI 命令)
│ ├── model_client.go # ModelClient 适配器
│ ├── code_client.go # CodeClient 适配器
│ ├── notebook_client.go # NotebookClient 适配器
│ ├── runtime_framework_client.go # RuntimeFrameworkClient 适配器
│ ├── serve_client.go # ServeClient 适配器
│ ├── skill_client.go # SkillClient 适配器
│ ├── train_client.go # TrainClient 适配器
│ └── data_client.go # DataClient 适配器(数据洞察平台)
│ └── eda_client.go # EDAClient 适配器(数据探索 6 端点转发)
│
├── docs/
│ ├── ai_platform.json # AI 模型平台 OpenAPI 规范
│ ├── task-platform-api.json # 任务编排平台 API 规范
│ ├── ai-cli-exp-manual.md # exp 详细使用手册
│ └── cli.md # CLI 使用说明
│
├── scripts/
│ ├── build-release.sh # 本地复刻 CI 构建:6 平台交叉编译 + sha256 + BUILD_INFO
│ ├── publish-public-release.sh # 发布到 public 仓库 ai-public/ai-cli-release(含同步 install 脚本)
│ ├── install-public.sh # public 仓库匿名安装脚本(同步到仓库根 install.sh)
│ └── install-public.ps1 # public 仓库 Windows 安装脚本(同步到仓库根 install.ps1)
│
├── Makefile # 构建 / 测试 / 交叉编译 / Shell 补全
└── go.mod # Go 模块定义
make dev # 开发模式运行
make test # 运行测试
make test-coverage # 测试覆盖率报告
make fmt # 格式化代码
make vet # 静态分析
make lint # 运行 golangci-lint
make mock-server # 启动模拟 API 服务
make completions # 生成 Shell 补全脚本- Go 1.24