SSkilltecabyclaudinhocode
Enviar skill
← Voltar para o catálogo

cli-trainer

Outros

引导用户在 AI Studio 无代码训练平台完成大模型微调,支持 ERNIE 和开源模型(Qwen/LLaMA)。当用户提到微调、训练模型、SFT、fine-tune、问答对、让模型学会、定制领域助手、专属领域 AI、行业术语、调教模型、业务知识注入、领域适配、医疗问答、客服问答、无代码训练、AiStudio 训练、ERNIE 微调、模型训练、finetune 时,优先触发。

1estrelas
Ver no GitHub ↗Autor: liuyunlin

CLI Trainer Skill

帮助用户在 AI Studio 云端完成大模型微调,不需要 GPU、不需要搭环境、不需要写训练代码。

scripts/train.py 执行所有平台交互,脚本路径通过 $SKILL_PATH 引用:

python3 "$SKILL_PATH/scripts/train.py" --check-data my_data.jsonl

!! 绝对禁止事项(最高优先级)

  1. 禁止自己猜测或硬写超参数然后提交。 必须先运行 --suggest-params,把推荐值展示给用户,等用户确认再提交。
  2. 禁止在用户明确确认前调用 --submit 展示参数时逐行解释含义,问”需要调整哪些?没问题就提交”,等用户回复。
  3. 禁止把推荐参数当作默认训练配置直接提交。 训练方式默认 SFT/Full;除非用户明确要求 SFT/LoRA,否则不要传 --train-type,也不要提交 lora_ranklora_alphalora_dropout 等 LoRA 专属参数。--suggest-params --model-type llama 的输出可能包含 LoRA 字段,展示给用户前必须按实际 train_type 过滤并说明。
  4. 训练方式变化时必须同步调整超参数。SFT/LoRA 改为 SFT/Full 时,必须删除 LoRA 专属参数,并把学习率降到 Full 微调适用范围(通常 5e-5 起步,必要时更低);从 SFT/Full 改为 SFT/LoRA 时,才可恢复 LoRA 字段和较高学习率。用户提出”学更完整长解释/长回答/保留更多上下文”时,提醒可把 cutoff_len/max_seq_len 提到 512 或更高,同时说明训练会更慢、更吃显存,OOM 时先降 per_device_train_batch_size

执行顺序

  1. 环境自检 — 首次使用时先跑一次,自动检测 Python 版本、依赖包、网络连通性,requests 缺失会自动安装
  2. 鉴权 — 确认有 Access Token,没有就引导去 https://aistudio.baidu.com/account/accessToken 获取
  3. 选模型 — 运行 --list-models 展示白名单,让用户选,不要让用户自己猜名称
  4. 验数据 — 运行 --check-data 检查格式,提前发现错误
  5. 准备/上传数据集 — 只能访问 AiStudio 新版 Git 仓库型数据集,不支持外部 URL。创建仓库时先确认真实 gitlogin;用 Playwright MCP 或 web-access skill 创建仓库并拿到真实 repo_id;上传前优先删除 .gitattributes 中的 JSON/JSONL LFS 规则,上传后记录 is_lfs 状态并确认文件大小。
  6. 推荐超参 — 运行 --suggest-params,展示结果,等用户确认后才提交
  7. 提交训练 — 运行 --submit,拿到 jobId
  8. 监控训练 — 提交后运行 --poll JOB_ID;任务进入 running 且接口返回 tensorboardUrl 后自动打开 Tensorboard
  9. 取结果 — 训练完成后给出模型仓库地址和训练摘要

各步骤关键细节

环境自检

python3 "$SKILL_PATH/scripts/train.py" --env-check

检查内容:Python 版本(需 3.8+)、requests 包(缺失时自动 pip install)、网络连通性。 如果 python3 命令本身不存在,告知用户安装 Python 3.8+:macOS 用 brew install python3,其他平台参考 https://www.python.org/downloads/

通用 web-access / Codex 推荐安装 Playwright MCP

自建数据集、网页端创建数据集仓库、必要时初始化 Gitea 或操作登录后网页时,不要只固定使用一种浏览器方案。这里按"通用 web-access / Codex 推荐安装 Playwright MCP"处理:Codex 环境优先安装/启用 Playwright MCP;需要复用用户日常 Chrome 登录态时,再使用 web-access。目标是拿到页面详情页真实 repo_id 并完成必要的 .gitattributes 编辑;优先选择当前可用、已登录、最少阻塞的浏览器自动化能力。

推荐顺序:

  1. Playwright MCP 可用且页面已登录时优先使用。 适合打开 AI Studio 页面、创建数据集、填写表单、选择协议、编辑 .gitattributes、读取 repo_id。常用能力:browser_navigatebrowser_snapshotbrowser_clickbrowser_fill_formbrowser_evaluate。它不依赖用户 Chrome 的 remote debugging 授权,CDP 授权卡住时尤其适合。
  2. 需要用户日常 Chrome 登录态时使用 web-access 如果 Playwright 未登录、页面需要真实 Chrome cookie/扩展/特殊会话,加载 web-access skill 并启动 CDP Proxy。
  3. 两者都不可用时再让用户手动创建仓库。 此时给出最短步骤,并要求用户回传详情页真实 repo_id,不要猜。

进入上传/建仓步骤前,若选择 web-access,按下面流程检查并准备它。

准备顺序:

  1. 如果当前会话可用 web-access skill,先加载它并遵循其 SKILL.md
  2. 如果 skill 元数据没触发,但 $HOME/.codex/skills/web-access/SKILL.md 存在,直接把 WEB_ACCESS_SKILL_PATH 指向该目录并运行 scripts/check-deps.sh
  3. 如果目录不存在,先使用 skill-installer 安装 web-access。安装完成后可立即用安装目录下的 scripts/check-deps.sh;同时告诉用户重启 AI IDE / 刷新 Agent 会话后才能自动识别新 skill
  4. 如果安装失败或 Chrome 远程调试授权不可用,才退回让用户手动在网页创建数据集仓库

检查命令:

WEB_ACCESS_SKILL_PATH="${WEB_ACCESS_SKILL_PATH:-$HOME/.codex/skills/web-access}"
bash "$WEB_ACCESS_SKILL_PATH/scripts/check-deps.sh"

Token

需要 token 时,直接告诉用户:「请把 https://aistudio.baidu.com/account/accessToken 页面的 token 粘贴给我,我来运行。」用户粘贴后,Agent 用以下方式在当前 shell 设置并使用,不要让用户自己执行任何 shell 命令:

export AISTUDIO_ACCESS_TOKEN="用户粘贴的token"
python3 "$SKILL_PATH/scripts/train.py" --verify-token

验证:python3 "$SKILL_PATH/scripts/train.py" --verify-token

如果用户已在本机手工用 aistudio config/login 配过 token,脚本无环境变量时自动读取 SDK 缓存;环境变量里的过期 token 会覆盖缓存,遇到 401 先检查环境变量。

如果用户已在本机手工用 aistudio config/login 配过 token,脚本无环境变量时自动读取 SDK 缓存;环境变量里的过期 token 会覆盖缓存,遇到 401 先检查环境变量。

选模型

python3 "$SKILL_PATH/scripts/train.py" --list-models
  • 必须用白名单里的模型
  • 单卡最大 32B 以下,超过会 OOM
  • 训练方式默认 SFT/Full;只有明确需要 LoRA 时才传 --train-type
  • ERNIE → 框架 PaddleFormers,trainType 只能 SFT/Full,数据格式 src/tgt
  • 开源模型 → 框架 LlamaFactory,trainType 推荐 SFT/FullSFT/LoRA,数据格式支持 Alpaca 和 ShareGPT
  • 具体模型的风险提示以 --list-models 输出为准

数据格式

ERNIE 格式(src/tgt 值必须是列表):

{"src": ["问题"], "tgt": ["回答"]}

最常见错误:用了 Alpaca 格式,任务会跑起来但 poller 阶段报"非 ERNIE 格式"。

LlamaFactory 格式 1:Alpaca(支持 JSONL 或 JSON 数组):

{"instruction": "问题", "input": "", "output": "回答"}

JSON 数组文件也可检查,常见文件名是 alpaca_data.json

[{"instruction": "问题", "input": "", "output": "回答"}]

LlamaFactory 格式 2:ShareGPT(支持 JSONL 或 JSON 数组):

{"conversations": [{"from": "human", "value": "问题"}, {"from": "gpt", "value": "回答"}]}

OpenAI messages 也属于 ShareGPT 特例,但平台兼容性不确定时,优先转成 conversations/from/value

python3 "$SKILL_PATH/scripts/train.py" --check-data 数据文件.jsonl
python3 "$SKILL_PATH/scripts/train.py" --check-data alpaca_data.json
python3 "$SKILL_PATH/scripts/train.py" --check-data sharegpt_data.jsonl

数据规模参考:50-500 条(验证流程)/ 1k-10k(场景微调)/ 10k+(全面提升)

上传数据

没有自己数据时,先读取 $SKILL_PATH/references/datasets.md,根据用户目标推荐合适的数据集;再用 --list-datasets 展示完整列表。有本地训练文件时,按下面门禁上传。浏览器自动化只负责建仓、读真实 repo_id、必要时编辑 .gitattributes;SDK/CLI 负责上传,--verify-upload 负责最终验收。

  1. 准备 web-access/CDP

    WEB_ACCESS_SKILL_PATH="${WEB_ACCESS_SKILL_PATH:-$HOME/.codex/skills/web-access}"
    bash "$WEB_ACCESS_SKILL_PATH/scripts/check-deps.sh"
    

    如果 web-access skill 不在默认目录,从实际 SKILL.md 路径解析目录;Chrome 出现远程调试授权时让用户允许,页面未登录时让用户在 Chrome 登录 AI Studio。

  2. 创建或确认数据集仓库

    • https://aistudio.baidu.com/my/dataset 创建或打开数据集仓库。创建时需填写:
      • 数据集英文ID(必填):用小写字母、数字、下划线,形如 yunlin/my_dataset
      • 数据集展示名称(选填):面向社区展示,建议填写,描述数据集用途,最多 50 字
      • 开源协议(必选):允许商用选 Apache 2.0;有归因要求选 CC BY 4.0;不选则创建可能静默失败
    • 创建或打开仓库后,从详情页读取完整 repo_id,形如 gitlogin/repo_name。不要用昵称、展示名、登录用户名或邮箱猜 gitlogin
    • aistudio upload / aistudio_sdk.hub.upload_file 只上传到已有数据集仓库,不会自动创建 dataset repo。如果上传时报 preupload 404,优先检查仓库是否已在网页端创建、repo_id 是否来自详情页、token 是否对该仓库有写权限、仓库类型是否为 dataset。
    • 如果传 --output-repo,斜杠前半段必须和当前账号可写的 gitlogin 匹配。
  3. 上传前处理 JSON/JSONL 的 LFS 规则

    • 预防优先:新仓库创建后、上传训练文件前,进入数据集详情页 → 文件列表 → .gitattributes → 编辑,删除训练文件扩展名对应的 LFS 规则,例如 *.jsonl filter=lfs ...*.json filter=lfs ...,然后保存。
    • ERNIE 的 src/tgt JSONL、LlamaFactory 的 Alpaca/ShareGPT JSONL/JSON 都要检查;训练用 JSON/JSONL 推荐作为普通文件上传,便于下载回验和排查。
    • 如果已经上传成 LFS:不要直接判定训练必然失败。已实测部分 is_lfs:true 文件也可能被 AI Studio 成功挂载并完成训练;但它会降低可回验性,也会让 waiting_data 排查更困难。若任务卡在 waiting_data,优先删除旧 LFS 训练文件、移除 .gitattributes 中 JSON/JSONL LFS 规则,然后按本上传小节第 5 步 SDK 方案或第 6 步 CLI 方案重新上传。
  4. 上传前检查文件大小:普通文件超过 5MB 平台会拒绝,不要改走 LFS 绕过限制。超过 5MB 时先告知用户,可选:裁剪过长样本、减少数据量、拆分批次。

  5. 用 SDK 上传数据集文件夹(推荐)

    • 上传原则见 references/aistudio_sdk_upload.md;主规则是:完整 repo_id、一仓一数据集、token 只走环境变量、JSON/JSONL 优先不走 LFS。
    • SDK 日志出现 201Commit part 1 successful! 才算提交成功;STS 分支的已知回退报错不单独视为失败。
    • 上传后必须继续执行本上传小节第 6 步;不要只看 SDK 上传日志。
  6. 用 CLI 上传单个训练文件(备选)

    AISTUDIO_CLI="${AISTUDIO_CLI:-$(python3 -m site --user-base)/bin/aistudio}"
    [ -x "$AISTUDIO_CLI" ] || AISTUDIO_CLI="$(command -v aistudio)"
    LOCAL_FILE="/path/to/train.jsonl"          # 也可以是 alpaca_data.json
    TRAIN_FILE="$(basename "$LOCAL_FILE")"     # 仓库内文件名,提交训练时 --train-file 也用它
    "$AISTUDIO_CLI" upload "$REPO_ID" "$LOCAL_FILE" "$TRAIN_FILE" --repo-type dataset
    

    只有确认当前 CLI 不会打印完整 argv 时才使用备选方案;不要附加 --token TOKEN,token 仍应走环境变量或 SDK 缓存。 REPO_ID 必须是详情页显示的完整 repo_id。如果出现 preupload 404,回到本上传小节第 2 步确认仓库已存在且路径无误。 上传命令成功返回后,必须立刻主动告诉用户:训练文件已上传到哪个 repo_id、仓库内文件名是什么、接下来会做 is_lfs 和下载回验;不要等到提交训练后才暴露上传问题。

  7. 验证上传结果

    python3 "$SKILL_PATH/scripts/train.py" \
      --verify-upload \
      --train-data "$REPO_ID" \
      --train-file "$TRAIN_FILE" \
      --local-file "$LOCAL_FILE"
    

    验证标准:文件大小接近本地文件,下载回来后 --check-data 通过;推荐 is_lfs:false。如果 is_lfs:true,不要直接隐瞒或继续静默提交,必须提示风险:本项目 smoke 实测 LFS 也可能训练成功,但若任务卡 waiting_data 应优先修复 LFS。 验证通过后必须再主动给用户一个上传完成回执,至少包含:

    • 数据集:REPO_ID
    • 训练文件:`TRAIN_

Como adicionar

/plugin marketplace add liuyunlin/cli-trainer

O comando exato pode variar conforme o repositório. Confira o README no GitHub.

Comentários · Nenhum comentário

Entre para comentar. Entrar

  • Ainda não há comentários. Seja o primeiro.