dsh-skill-tag:用标签与布尔表达式筛选 DSH 技能子集

前言

在 DeepSeek Harness(DSH)里,技能(skill)会随插件和项目不断增多。全部下发给模型会占用上下文,不同技能的路由也可能互相干扰;若每次对话都手工开关,成本会很高。社区插件 dsh-skill-tag(仓库名 dsh-skill-manager-tags,维护者 aawef)把「这次对话要让模型看到哪些技能」收敛成一条布尔表达式,并在工作区与对话两级分别生效。下面介绍它的定位、能力与安装用法。

这是什么

dsh-skill-tag 是 DSH 的工作流类插件:给技能打全局标签(无层级),用 +(OR)、*(AND)和括号写条件,在工作区或单次对话上选出实际下发给模型的技能子集。npm 包名与 bundle 名均为 dsh-skill-tag;SkillHub 目录页为 aawef/dsh-skill-manager-tags,源码在 GitHub。当前 package 版本为 0.1.2,许可证 MIT。

核心功能

资料中的能力可概括为下表。

能力 说明
全局标签 创建、改名、删除标签;标签之间无层级
标签组模板 把表达式存成可复用模板(如「前端组」),可校验与求值
布尔表达式 + 表 OR,* 表 AND,* 优先于 +,支持括号;改名会同步改写所有引用该标签的表达式
工作区级筛选 每个工作区一套条件,只把命中的技能下发给该工作区的对话
对话级筛选 每个对话可有独立快照;可一键继承工作区配置
禁用 / 手动添加 在标签命中之外额外放行某技能,或屏蔽某技能(即使命中)
双向编辑 「tag 联系 skill」与「skill 联系 tag」两个方向均可改
打开技能目录 列表处提供按钮,在文件管理器中定位技能路径
自带 skill 安装后注册 tagging-skills,供 agent 按文档为技能打标签

表达式示例(来自 README):

pdf + docx            # 只要处理文档的技能
office * plugin       # office 包带来且与插件相关
(aegis + tdd) * !wip  # 两个都要,且排除 wip

空表达式表示不筛选,即全部技能。

安装与启用

插件装进 profile 后随宿主加载;dsh plugin 只负责安装,不会自动启用,还需改 profile 的 package.json 并重启 DSH。

依赖:Node ≥ 20;DSH 0.2.0-rc.1 及以上(见 engines.dsh)。@deepseek-ai/cordis 与 @deepseek-ai/dsh-storage-domain 为 peerDependency,由 DSH 本体提供,勿在 profile 里单独安装。

一条命令安装

dsh plugin --profile <your-profile> add dsh-skill-tag

也可从 GitHub 安装:

dsh plugin --profile <your-profile> add github:aawef/dsh-skill-manager-tags

装完后在 profile 的 package.json 的 dsh.profile.bundles 中加入 bundle 名:

{
  "dsh": {
    "profile": {
      "bundles": [ "...", "dsh-skill-tag" ]
    }
  }
}

重启 DSH 后,设置页会出现「Skill 标签」。官方桌面端的 desktop profile 由应用独占,命令行无法修改;请在 Settings → Plugins 或插件市场安装。

典型用法

1. 打标签

打开 设置 → Skill 标签:

  • tag 联系 skill:选标签,勾选包含的技能
  • skill 联系 tag:选技能,勾选拥有的标签
  • 编辑标签组:编写表达式并保存为模板

也可使用安装后出现的 tagging-skills skill,按其中推导法与 API 纪律操作(文档中的 aegis、office-skills 等仅为示例,需按本机技能清单推导)。

一键脚本(默认 dry-run):

node tools/auto-tag.mjs http://127.0.0.1:<PORT>                  # 只看计划
node tools/auto-tag.mjs http://127.0.0.1:<PORT> --apply          # 落地来源轴
node tools/auto-tag.mjs ... --domain ./my-domain-map.json --apply  # 含领域轴

脚本幂等;重跑期望 tagsCreated: 0。

2. 配置工作区与对话

  • 工作区:侧栏工作区行「…」→「管理标签」
  • 对话:会话行「…」,或聊天框左下角「+」→「管理对话标签」

左列写标签条件表达式,右列显示命中结果,可手动添加、禁用或恢复。保存后,该对话下发给模型的技能列表即为右列内容。

3. 表达式语法

语法 含义
A + B OR
A * B AND
(A + B) * C 括号;* 优先于 +
"my tag" 标签名含空格或 + * ( ) 时用引号
空串 全部技能

HTTP API 挂在 /skill-tag/api 前缀下,路由同时支持 GET 与 POST,便于调试。调用 /skills/tags 写入标签时为整体覆盖,写入前应先 GET 再合并,否则会清掉已有标签。

适用场景与注意

适合已安装大量 DSH 技能、需要按项目或单次对话精确控制下发列表的开发者。工作流侧与存储、筛选逻辑在宿主进程内运行,安装前建议阅读仓库源码与 MIT 许可证,确认与当前 DSH 版本匹配。

插件以当前 DSH 进程权限运行;勿在未审阅的情况下向不可信来源安装 bundle。社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系。

本地改源码时,lib/client.js 复制到 profile 的 node_modules/dsh-skill-tag 后刷新页面即可;改 lib/index.js、src/** 或 cordis.patch.yml 需重启桌面进程。新增 HTTP 路由同样需重启,否则易出现 404。

结尾

dsh-skill-tag 把「技能太多、上下文塞满」的问题变成可维护的标签与表达式,并在工作区、对话两级落地。进一步了解可访问 SkillHub 目录页 与 GitHub 仓库 中的 README 与 docs/ 设计文档。

羽毛球分组比赛记分
小程序二维码

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

小夜