关于 skill-optimizer
skill-optimizer 通过迭代提出补丁、验证和门控接纳,离线改进现有 SKILL.md。它适用于已有学习数据积累的技能,并支持预算上限。
主要功能
- 01迭代提出并筛选补丁
- 02通过验证门控接纳候选版本
- 03预算上限与可配置运行限制
- 04为失败补丁保留拒绝记录
- 05将运行数据持久化到 SQLite
适用场景
- 01改进积累了 learn-rule 数据的技能
- 02精简重复或臃肿的技能规则
- 03在固定预算内运行技能改进
MCP 相关
在插件会话中,可通过 `providers` MCP 服务的 `run_provider_task` 工具,以 `task: "optimizer"` 运行。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ rohitg00/ pro-workflow --skill skill-optimizer安装后在 Claude Code 中输入/skill-optimizer确认已加载。
详细介绍
技能优化器
像深度学习优化器训练权重那样训练现有的 SKILL.md:通过 rollout、类似梯度的反思,以及由验证门控的采纳。不重新训练模型;只更改技能 Markdown。
适用场景
在以下情况使用此技能:
- 专业工作流技能已积累 8 条或更多学习规则
- 用户反映技能“越来越臃肿”或“规则一直在重复”
- 用户希望在多个会话中进行离线、预算封顶的改进
以下情况不要使用:
- 技能的轨迹少于 8 条(无可学习内容)
- 用户希望实时编辑(这是离线、单次操作)
- 尚未为所选提供方明确配置密钥
架构(与 SkillOpt 的六阶段循环相对应)
rollout pull recent learnings from SQLite (existing learn-rule rows)
reflect optimizer LLM analyzes a minibatch, proposes add/delete/replace patches
aggregate vote-merge patches across minibatches
select clip by LR budget (default: 3 adds, 2 deletes, 3 replaces per step)
update apply selected patches to a candidate skill content
evaluate evaluator LLM scores candidate against held-out validation items
gate accept candidate only if weighted score >= current + acceptThreshold
slow update at epoch boundary, consolidate accepted edits into a coherent rewrite
失败的候选方案会存入拒绝缓冲区,并反馈给下一步反思,以免优化器重复提出相同的补丁。
运行
在插件会话中,使用 providers MCP 服务的 run_provider_task 工具,并设置 task: "optimizer" 和 args: ["--slug", "<slug>", "--budget-usd", "0.50"]。密钥来自插件配置对话框。独立 CLI 安装使用显式的 PRO_WORKFLOW_*_API_KEY 变量。请参阅提供方配置;切勿在聊天中索要密钥或检索现有的机器凭据。
/skill-optimize <slug> [options]
选项(均为可选;括号中显示合理的默认值):
| 标志 | 默认值 | 说明 |
|---|---|---|
--epochs N | 3 | 外层循环次数 |
--batch-size N | 8 | 每个小批次的轨迹数 |
--minibatches N | 2 | 每个 epoch 的小批次数 |
--holdout N | 6 | 保留的验证项(最多约占轨迹的 25%) |
--budget-usd X | 0.50 | 硬性上限;达到后循环中止 |
--optimizer-model M | claude-sonnet-5 | 反思 + 慢速更新所用模型 |
--evaluator-model M | claude-haiku-4-5 | 门控模型(成本更低) |
--max-adds N | 3 | 每步学习规则预算 |
--max-deletes N | 2 | |
--max-replaces N | 3 | |
--accept-threshold X | 0.0 | 接受候选方案所需的最低分数增量 |
--max-skill-tokens N | 2000 | 候选内容的硬性长度上限 |
--slow-every N | 2 | 两次整合过程之间的 epoch 数 |
--json | 关闭 | 机器可读输出 |
停止开关:执行 touch ~/.pro-workflow/STOP,可在步骤之间中止循环。
输出
- 候选方案被接受 → 覆写 SKILL.md,并在 HTML 注释中追加哈希戳
- 运行详情保存在
optimization_runs、optimization_candidates、optimization_patches、optimization_rejections中 - 验证集保存在
optimization_validation中,可在后续运行中复用
运行后检查:
sqlite3 ~/.pro-workflow/data.db "SELECT id, skill_slug, initial_score, best_score, accepted_steps, rejected_steps, spent_usd FROM optimization_runs ORDER BY id DESC LIMIT 5"
规则
- 验证集在运行开始时冻结。运行期间切勿根据新的纠正内容重新生成验证集。
- 每步只生成一个候选方案。不得创建并行分支。
- 慢速更新的输出本身就是候选方案;必须通过门控才能取代当前最佳方案。
- 优化器 LLM 和评估器 LLM 可以使用不同模型。SkillOpt 推荐的配置是将强大的优化器与成本较低的评估器搭配使用。
- 如果在任一步骤边界满足
spent_usd >= budget_usd,循环将以stopped_reason="budget exhausted"结束。 - 如果补丁的锚点已不再存在于技能中(因为同一步骤中先前的补丁已将其移除),则会记录为拒绝,原因是
anchor_missing。
来源
灵感来自 Microsoft SkillOpt(arXiv:2605.23904)。六阶段的 rollout/reflect/aggregate/select/update/evaluate 流程、学习规则预算、拒绝缓冲区以及慢速 / 元更新机制,均基于 pro-workflow 现有的 SQLite + learn-rule 数据平面进行调整。未复用任何 SkillOpt 代码。“ReflACT”并非 SkillOpt 术语,本项目也不使用此术语;该循环仅以阶段名称指代。