前言¶
在 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 也不会被静默加上工具。
核心工具¶
插件用三个小工具替代「整表进上下文」:
skill_list:无参数时只返回 Skill 名称;需要检索时再带query获取说明。skill_pick:把本会话要保留的 Skill 记下来。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。