前言¶
在 DeepSeek Harness(DSH)里,智能体可以调用本机 skill 目录里的能力包。常见问题是:模型往往凭印象直接调工具,没有先对照已安装的 skill 清单;多候选时也可能只加载一个就往下做。社区插件 dsh-skill-triage(维护者 douchu004,分类:工作流)把「先检索、逐个表态、全部加载完再干活」写进会话流程,并在门禁阶段拦截其他工具,直到分诊完成。
下面按定位、能力、安装、用法和注意事项说明。
这是什么¶
dsh-skill-triage 是 DSH 的 host 插件,英文简介为:Trigger-word skill triage gate for DeepSeek Harness。一句话:会话开题(或按配置每轮)时的 skill 分诊硬门禁。
它针对三条需求,用插件机制落地:
| 需求 | 插件做法 |
|---|---|
| 先查本机已下载的 skill,而不是凭印象动手 | 检索 ctx.skills(含 ~/.dsh/skills、内置 office skill、插件注册的 runtime skill),把候选注入本步上下文 |
| 判断 skill 是否适合本轮需求 | 每个候选必须进入 use 或 skip,且 skip 须写清不符合的原因(理由过短会被拒绝) |
| 多选时不能只挑一个 | 候选须全部表态;use 里登记 N 个则须用 skill 工具加载完 N 个,否则其他工具被拒 |
匹配器在 lib/matcher.js,纯本地、无网络;候选是提示清单,最终决策仍由模型落到 skill_triage 的 use/skip 上,并可通过诊断日志审计。
触发方式¶
v0.2 起默认 关键词触发,不再每轮都检索,以减轻日常对话开销。
| 模式 | 行为 |
|---|---|
keyword(默认) |
消息中出现触发词(默认 @skill 或 找技能)才检索与门禁;其余轮次零注入、零拦截 |
always |
每个用户轮次都检索(v0.1 行为) |
示例:
@skill 帮我做一个视频 ← 触发
帮我做一个视频 ← 不触发
找技能 把这张图转成 ascii ← 触发(中文触发词)
触发词为大小写不敏感的子串匹配,可在配置里修改。触发词会在打分前从需求文本中剥掉,避免 @skill 里的 skill 干扰排序。triggerWords: [] 表示永不触发(插件会 warn);若要全量开启,设 triggerMode: always。
一轮对话里发生什么¶
用户消息命中触发词后,插件在 agent/pre-step 检索并注入候选与规则;模型应调用 skill_triage 声明 use/skip,再对每个 use 项调用 skill 工具加载;全部加载完成后,门禁才放行 pwsh 等其它工具。
若模型未分诊就想收轮,插件在 agent/turn-stopping 最多 steer 一次,提示须先完成 skill_triage 或加载 skill。
异常、连续拒绝超过 maxDenials、或 skill_triage 注册失败时会 fail-open 解除门禁并记日志,避免会话锁死。
安装与启用¶
从 npm 安装(资料原文命令):
dsh plugin add dsh-skill-triage
# 装完后须完全退出并重启 DSH
需要写 ~/.dsh 时,请在普通终端执行仓库内的安装脚本(DSH 沙箱可能被拒):
node scripts/install.mjs # 安装 / 更新
node scripts/install.mjs --dry-run # 预览变更
node scripts/install.mjs --uninstall # 卸载
脚本会复制插件到 <DSH_HOME>/plugins/dsh-skill-triage、改 profile 的 package.json 与 dsh.profile.bundles、并在 node_modules 建立联接;改 package.json 前会备份。cordis loader 仅在启动时读组合,安装后必须重启 DSH。
package.json 标明 Node >=22,DSH 兼容范围 >=0.2.0-rc.2 <0.3.0;README 记录 0.2.1-rc.3 上自检与实机验证通过。升级 DSH 后可运行:
node scripts/check-core-apis.mjs
核对内核扩展点是否仍在。若报红且急需使用,可将 config.enabled 设为 false(不注入不拦截,工具仍注册)。
配置要点¶
配置写在 profile 的 cordis.patch.yml(或插件自带 patch)中,例如:
- insert:
- id: skill-triage
name: dsh-skill-triage
config:
triggerMode: keyword
triggerWords: ['@skill', '找技能']
maxCandidates: 6
requiredScore: 3
常用字段(默认值以 README 为准):
enabled:总开关,默认truetriggerMode/triggerWords:触发策略与词表minScore、requiredScore、maxCandidates:候选门槛与数量上限maxDenials:连续拒绝次数后 fail-openallowTools:门禁期间仍放行的工具,默认含skill、ask_user_question、todo_writediagnostics/diagnosticsPath:诊断 JSON 日志,默认约~/.dsh/logs/skill-triage.log
完整字段表见 GitHub README。
典型用法¶
日常任务不需要 skill 时,正常聊天即可,插件默认不介入。需要强制走分诊时,在需求前加触发词,例如:
@skill 帮我用代码做一条 15 秒的动效视频
模型侧预期链路:阅读注入的候选 → 调用 skill_triage(use=[...], skip=[{name, reason}, ...]) → 对每个 use 调用 skill("...") → 再调用其它工具完成任务。
候选列表外的合法 skill 也可写入 use(README 明确候选只是提示,不是枚举)。强匹配项若 skip,理由须写实。
适用场景与注意¶
适合:希望把「先查 skill、显式取舍、多选全加载」变成可审计流程的 DSH 用户;skill 目录较大、希望关键词触发减少每轮开销的场景。
注意:
- 插件挂 DSH 内部扩展点(
agent/pre-step、tools.guard等),不在稳定 API 契约内;大版本升级后应跑兼容性自检。 - 插件以当前 DSH 进程权限运行;安装前请自行查看源码与 MIT 许可证。
- 只检索本机
ctx.skills,不会联网发现 skill。 - 有候选的轮次多一次
skill_triage工具往返,这是多选全加载的设计成本。 - 词面匹配可能被元指令词带偏;README 以实机案例说明可通过「候选外 skill 写入 use」修正,而非假装匹配器无误。
社区目录 SkillHub 插件页 与 GitHub 仓库独立维护,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-skill-triage 用触发词或全轮模式启动检索,用 skill_triage 与工具门禁把 skill 选择从「隐性习惯」变成「显式、可审计的步骤」。需要安装命令、配置与匹配细节时,以仓库 README 为准。
- 目录页:https://www.skillhub.cn/plugins/douchu004/dsh-skill-triage
- GitHub:https://github.com/douchu004/dsh-skill-triage