dsh-skill-triage:用触发词把 DSH 里的 skill 选择做成硬门禁

前言

在 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:总开关,默认 true
  • triggerMode / triggerWords:触发策略与词表
  • minScore、requiredScore、maxCandidates:候选门槛与数量上限
  • maxDenials:连续拒绝次数后 fail-open
  • allowTools:门禁期间仍放行的工具,默认含 skill、ask_user_question、todo_write
  • diagnostics / 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye