前言¶
在 DeepSeek Harness(DSH)里做技能管理时,会碰到一个反复出现的问题:技能进化页每次攒下一批待处理建议,逐条点开看本身就是负担;而由模型自动提出的建议,往往是「某次任务的流水」,如果直接采纳,技能库会很快膨胀成几百个互不相干的窄技能。
dsh-skill-autopilot 就是把「审」和「发」这两步交给你配置的大模型,但把「什么样的技能才配进库」写成确定性的准入规则。模型只能在这个框里做判断,代码再判一遍,最后通过的技能打包成 SKILL.md 走技能数据源落盘,带版本记录、可回滚。
这是什么¶
- 插件名:
dsh-skill-autopilot - 维护者:BrainZombie
- 分类:工作流
- 来源:SkillHub 目录页、GitHub
- 版本与许可证:
0.1.0,MIT
它解决的问题很明确:把进化链路里积累的 pending 建议,经模型审查和反碎片化闸门后,变成真正进入技能库的技能,而不是把每次建议都变成新文件。
它做什么(一次运行)¶
一次运行的流程如下:
pending 建议 ──► 审查模型(你选的) ──► 确定性闸门 ──► 打包 SKILL.md ──► 落盘 + 版本记录
(mnemon) (语义判断) (不可绕过) (蒸馏/清洗) (adopt)
- 读:从 mnemon 的 Skills Source 取
pending建议、证据轨迹、评测用例,以及全量技能目录。 - 审:一次批量调用审查模型,对每条建议给出
create / merge / dismiss / defer,并附理由和归并目标。 - 闸:模型说完不算数,代码再判一遍。这一层是插件的核心,后面专门讲。
- 打包:为通过的条目单独再调一次模型产出正文,同时剔除会随时间腐化的内容,如日期、会话 id、uuid、机器绝对路径、「N 小时前」。
- 落盘:
recordDraft→adoptDraft,走技能数据源自己的写入口。建议置为adopted,生成版本记录,必要时可从「技能管理 → 版本/回收站」回滚。插件不直接写SKILL.md。
默认情况下 autoApply: false,review 只输出决策和将要落盘的正文,一个字节都不写;确认后 apply 才真正落盘。
反碎片策略¶
这是插件的核心。它把「库是类级知识,不是流水」这条原则拆成了可执行的规则。
| 规则 | 判据 |
|---|---|
| 库是「类级知识」,不是流水 | 一个技能带 N 个带标签小节,胜过 N 个窄兄弟技能 |
| 归并优先于新建 | 同 xxx-* 前缀簇且内容相关,或 description 相似,就归并;只共用产品名不算 |
| 不重复造插件已有的能力 | 对照 ctx.skills.list()(宿主实际广告的技能,含插件技能),命中即 dismiss |
| 小打小闹不单独建 | 必须同时满足强信号、置信度门槛、正文长度下限 |
| 不写 hub/router 技能 | 正文超过 60% 的行是「指向别的技能」,直接拒绝 |
| description 一句话 | 超长会被系统技能索引截断,触发词等于失效 |
| 归档不删除 | 归并时被吸收的技能进回收站,可恢复 |
闸门里几个硬条件值得单独列出来:
- 建议置信度低于
minConfidence→ 不建(这一条不进模型审)。 - 模型对「新建」的把握低于
minModelConfidence→ 留待下轮,不硬发。 - 没有强信号(
procedure / correction / directive / skill-gap / skill-misleading / approach-change)→ 不建。 - 插件已提供该能力 → 不建。
- 与已有技能相似度 ≥
mergeSimilarity,或同属xxx-*前缀簇且内容相关 → 强制归并,不许新增兄弟技能。 - 本轮
create超过maxNewPerRun→ 留到下一轮。 - 打包后的
SKILL.md必须过 lint。
consolidate 是配套的存量体检,对已有技能按前缀/同域聚簇,让模型判断哪些该收敛成一个 umbrella。应用时把合并后的正文写到 keeper,把被吸收的移入回收站。
打包校验¶
打包校验在 lib/policy.js: lintSkillDoc 实现。硬拦项包括:名字非 kebab-case 或重名;缺 description 或超长;正文为空、过短、超长;正文里又带 frontmatter;缺「何时使用」或「步骤」;是 router 技能。软提示包括缺验收小节、正文没有可执行命令、description 开头是套话。
安装与启用¶
安装命令来自仓库自带的 install.ps1,共有两种模式。标准模式写 profile 的 package.json(link: 依赖 + dsh.profile.bundles)并执行 pnpm install:
# 先看计划
powershell -ExecutionPolicy Bypass -File .\install.ps1 -DryRun
# 执行标准安装
powershell -ExecutionPolicy Bypass -File .\install.ps1
免 pnpm 模式只建软链,并往 profile 的 cordis.patch.yml 追加 insert 条目:
powershell -ExecutionPolicy Bypass -File .\install.ps1 -Link
回滚两种模式都认,会还原 package.json / cordis.patch.yml 的备份:
powershell -ExecutionPolicy Bypass -File .\install.ps1 -Rollback
装完不启动、不重启的情况下可以先做预检:
dsh --profile web --dump-config | Select-String skill-autopilot
生效需要重启 DSH,这一步由使用者自己执行。
典型用法¶
装好并重启后,在任意会话里可以直接用斜杠命令:
/skill-autopilot status # 看队列、计数、审查模型、策略、日志目录
/skill-autopilot review # 只审不写(默认 dry-run)
/skill-autopilot apply # 审完直接落盘
/skill-autopilot consolidate # 存量归并审查(只出方案)
/skill-autopilot history # 最近决策
也可以直接让 agent 调工具:
{"action": "review", "maxItems": 3}
{"action": "apply", "ids": ["<suggestionId>"]}
{"action": "apply", "provider": "deepseek-official", "model": "deepseek-reasoner"}
{"action": "consolidate", "confirm": true}
决策日志是 append-only 的 JSONL,另有最近一次完整结果,位于 $DSH_HOME/storages/skill-autopilot/:decisions.jsonl 每条建议一行,含最终动作、理由、是否落盘和错误;last-run.json 是最近一次运行的完整内容,含将要落盘或已落盘的 SKILL.md 正文。review 默认 dry-run 的意义就在这里,可以先读再发。
相关配置¶
插件 patch 里的 config 都可省略。常用键如下,默认值取自 README:
| 键 | 默认值 | 说明 |
|---|---|---|
enabled |
true |
关掉后工具仍在,任何运行直接返回 disabled |
mnemonDataDir |
~/.mnemon |
其下应有 skills/ledger.json,自动探测 |
targetRoot |
user-dsh |
新技能写到 ~/.dsh/skills(也可设 user-agents) |
reviewer.provider/model |
空 = 宿主默认模型 | 留空时用设置页里选的那个模型 |
reviewer.maxTokens |
4096 |
审查/打包单次上限 |
policy.minConfidence |
0.8 |
建议置信度低于此值不建 |
policy.minModelConfidence |
0.5 |
模型对「新建」把握低于此值留待下轮 |
policy.maxNewPerRun |
2 |
每轮最多新建几个 |
policy.mergeSimilarity |
0.45 |
相似度阈值,超过即强制归并 |
policy.descriptionMaxChars |
240 |
description 上限 |
policy.maxBodyChars / maxMergedBodyChars |
16000 / 24000 |
正文字符上限 |
policy.requireStrongSignal |
true |
必须有强信号 |
autoApply |
false |
定时任务是否直接落盘 |
intervalMinutes |
0 |
大于 0 时后台定时跑,默认只 review |
logDir |
空 = $DSH_HOME/storages/skill-autopilot |
日志目录 |
想让判断更严格,可以把 reviewer.model 指向更强的模型、把 mergeSimilarity 调到 0.55、maxNewPerRun 调到 1。需要注意,deepseek-flash 对「新建」的自评通常在 0.65–0.8 之间,这是校准值不是裁决值,所以 minModelConfidence 默认只设 0.5。真正决定「配不配进库」的是建议置信度、强信号、去重和文档 lint。
验证¶
node test/selftest.mjs # 单元闸门/去重/打包/落盘(临时 ledger + 临时技能根,不动真实数据)
node test/selftest.mjs --live # 追加:只读真实 ledger,确认能读到 pending 与目录
node test/host-contract.mjs # 用真实 dsh-tools/dsh-llm 走一遍注册与一次 llm 组装调用
dsh-plugin verify . # 真打包、真安装、挂载检查
selftest 从不碰 ~/.mnemon/skills 与 ~/.dsh/skills:它在 %TEMP% 下复制一份 ledger、建一个空的临时技能根,跑完即删。需要「本机已装 DSH / 已装 mnemon 数据源」的两段测试在没有安装的机器上会自动 skip 而不是失败,所以 CI 只跑 npm test;host-contract 与 verify 需要真实宿主,请在装好 DSH 的机器上跑。
适用场景与注意¶
适合这个插件的人,是已经在 DSH 里用 mnemon 管理技能、并且被进化建议的人工审查和技能库碎片化困扰的开发者。
需要注意几点:
- 插件以当前 DSH 进程的权限运行,安装前应先检查源码与许可证(
MIT)。本插件通过dsh-mnemon-source-skills的manage()读写同一份 ledger,属于信赖 mnemon 内部契约的实现。 apply会真的新增或修改~/.dsh/skills下的技能,但只经数据源写入口,因此有版本记录和回收站两条退路。模型判断不会 100% 合意,所以默认 dry-run。- 不要把
autoApply和短intervalMinutes一起开,那等于让模型无限自增长技能库。建议apply手动触发,或autoApply只配合maxNewPerRun: 1。 - 项目级技能(
project-dsh/project-agents)默认只读不建,consolidate只处理user-dsh/user-agents。 - 运行时要求:DeepSeek Harness
>= 0.2.0,Node.js>= 20;dsh-mnemon-source-skills >= 0.4.0为可选 peer,缺失时插件仍可加载,但读不到pending建议。
结尾¶
dsh-skill-autopilot 的价值不在于让模型说了算,而在于把「什么样的技能才配进库」固化成确定性的规则,让审查和归并可以自动跑,同时保住版本记录和回滚能力。如果恰好在 DSH 技能进化这条链路上,可以从 dry-run 的 review 开始试。