dsh-skill-on-demand:按需列出 Skill,避免整份目录重复进上下文

前言

在 DeepSeek Harness(DSH)里,会话通常会附带一份 Skill 目录:每个已安装 Skill 的名称和说明会进入对话上下文。Skill 装得多了,这份说明往往有几千 token,并且会在后续每一轮请求里再次带上,而当前任务往往只会用到其中少数几个。

dsh-skill-on-demand 面向这类上下文开销:不再在每条请求里注入完整目录,改为用少量工具按需列名、筛选、按名加载正文。下面介绍它的定位、机制、安装方式与使用时的注意点。

这是什么

dsh-skill-on-demand 是维护者 qqmqq 发布的 DSH 插件,在 SkillHub 目录中归类为「记忆」。官方简介概括为:把会话 Skill 目录从每次请求中拿掉——按需列出 Skill,把本任务需要的记一次,再按名称只加载被选中的那一个。

插件当前版本为 1.0.0(见仓库 package.json),许可证为 MIT,要求 DSH 引擎 >=0.2.0-0。

默认行为与插件后的对比

README 用表格概括了变化,核心如下。

未装插件时 安装本插件后
一条消息列出每个 Skill 的名称与说明,并在每次请求中重复发送 不再发布这份目录消息
模型靠阅读全部说明判断需要什么 skill_list 只返回 名称;带 query 搜索时才拉取说明
不记录任务实际用了哪些 Skill skill_pick 记录本会话保留的 Skill,其余忽略
可加载任意 Skill 正文但无明确约束 skill 按精确名称只加载 一个 完整 Skill 正文

每个会话只会注入 一条 短协议说明:先列名称、判断任务需要哪些 Skill(建议五个或更少)、用 skill_pick 记下,再继续任务。该说明不重复;子 agent 会话不注入这条协议,但仍可使用工具,从而避免多付 prompt 成本。

目录是如何被拿掉的

@deepseek-ai/dsh-tool-skill 仅在 ctx.tools.get('skill', agent) 仍解析到它自己的工具注册时才会发布目录。本插件在每个 agent 自身作用域注册同名 skill 工具(就近作用域优先),使上述检查失败,目录即停止发布。替换后的 skill 仍按精确名称加载单个 Skill 的指令。

若某个 preset 从未挂载 skill 工具,插件不会动它:没有可替换对象,刻意极简的 preset 也不会被静默加上工具。

核心工具

插件用三个小工具替代「整表进上下文」:

  1. skill_list:无参数时只返回 Skill 名称;需要检索时再带 query 获取说明。
  2. skill_pick:把本会话要保留的 Skill 记下来。
  3. skill:按名称加载一个完整 Skill 正文。

安装与启用

在资料给出的安装方式下,对 web profile 执行:

dsh plugin --profile web add dsh-skill-on-demand

安装后需要 重启 harness,插件 bundle 在启动时加载。

插件以当前 DSH 进程的权限运行。安装前建议阅读 GitHub 仓库 源码与 MIT 许可证,确认符合你的环境与安全要求。

如何验证是否生效

README 建议:新开一个会话并随便问一个问题。第一轮应看到 skill_list → skill_pick,且 没有 <available_skills> 块;无参数的 skill_list 应只返回名称。

适用场景与限制

适合谁: 已安装较多 DSH Skill、希望减少每轮重复目录 token、又仍要让模型按需选用 Skill 的开发者。

限制(摘自 README):

  • 软约束,非强制。 若模型不按协议调用工具,不会报错也不会写入选择记录;目录仍已被移除,省 token 的效果一般仍成立。
  • 旧会话保留历史。 安装插件前已发布过目录的会话,历史里仍有那条消息,并可能伴随插件附带的一条「no skills available」修正。要干净状态请 新开会话。
  • 选择按会话。 新会话会重新判断需要哪些 Skill,这是有意设计——任务不同,所需 Skill 也不同。
  • 同名工具冲突。 若 preset 已在 agent 自身层注册 skill,注册会失败,插件会降级为「仍有 picker 类工具、目录不变」,以免弄坏会话。

开发与自测

index.js 为单文件 Host 插件,无需构建。可在已安装包目录内对 mock 上下文运行自测(需能解析 harness 自带的 @deepseek-ai/*):

node <profile>/node_modules/dsh-skill-on-demand/scripts/selftest.mjs

结尾

dsh-skill-on-demand 把「整份 Skill 目录每轮重发」换成「列名 → 挑选 → 按名加载」,在 Skill 数量增多时更利于控制上下文体积。目录页:SkillHub - dsh-skill-on-demand;源码与说明:github.com/qqmqq/dsh-skill-on-demand。

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

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

小夜