前言¶
DeepSeek Harness(DSH)默认会把所有已安装插件的工具定义、技能目录、各插件的 system-prompt 段落全部塞进每次请求的上下文。这导致每次请求都要为「可能用到的东西」买单,而实际只在当前轮次用到的只是其中很小一部分。dsh-capability-composer 把这些资源按「组合(composition)」组织,只让当前组合进入模型可见范围,从而在保持插件与技能仍在运行的前提下,缩小每次请求的系统提示体积。
这是什么¶
dsh-capability-composer 是 DSH 1.5 专用的能力组合器插件,维护者为 xiamubumu。它将插件与技能按组合管理,根据会话、工作区或全局三个层级解析组合,从而控制模型在系统提示中看到的「可用插件与 MCP 工具」和「可用技能」范围。插件本身不停止运行,技能仍可手动调用,只改变可见性。
核心功能¶
1. 插件按需加载¶
默认只有 28 个官方核心工具 + 3 个元工具(search_plugins、load_plugin、invoke_tool)常驻。其余工具不会出现在工具列表中,只在系统提示的「可用插件与 MCP 工具」目录中显示名称,模型通过 invoke_tool 或 load_plugin 按需调用。
2. 技能影子化¶
不在当前技能组合中的技能会被注册一个影子条目,包含 invocation.modelInvocable: false 和 rank: 0,使其不进入模型可见的技能目录,但仍可手动通过 /skill-name 调用。
3. 组合解析三层级¶
组合按「最近优先」规则解析:
- 会话级:仅当前会话生效
- 工作区级:基于当前工作目录(
cwd)生效 - 全局级:
pinned[axis]['*']指定
空字符串、空数组、null 均视为「未指定」,继续向上继承。单个层级可选择多个条目,取并集。空列表不等于「选择全部」,而是「不过滤」。
4. 系统提示段落裁剪¶
根据当前组合裁剪各插件的 system-prompt 段落,实测可节省约 2129 tokens/请求(包括 agent-teams:usage、plugin:dsh-docker、plugin:api-client 等)。裁剪失败时采用「宁可多留」策略,避免误删。
5. UI 与即时生效¶
插件在 DSH 的「设置 → 插件」中新增两个标签页:
- Plugin compositions:控制插件组合
- Skill compositions:控制技能组合
UI 操作防抖 400ms 后调用 POST /dsh-capability-composer/state,保存采用「按组合名称逐项合并」而非整体覆盖,避免跨位置创建的组合被误删。
安装与启用¶
仅支持 DSH 1.5(>=0.1.5-rc.2 <0.2.0)。
从 npm 安装:
dsh plugin add npm:dsh-capability-composer
安装后,在「设置 → 插件」中启用该插件,即可在「Plugin compositions」与「Skill compositions」标签页中创建组合。
典型用法¶
示例:按工作区隔离插件与技能¶
- 在当前工作区创建一个「data-analysis」组合,只包含数据相关插件(如
dsh-docker、plugin:api-client)。 - 在同一工作区创建一个「web-dev」组合,只包含前端相关插件。
- 在不同会话中切换组合,模型只会看到当前组合内的插件与技能,减少无关上下文。
示例:手动调用非常驻工具¶
// 在系统提示中看到某工具名称,但不在工具列表中
invoke_tool({
tool: "mcp__vnpy__run_backtest",
args: { ... }
})
需要整组插件时使用:
load_plugin({
ids: ["mcp:vnpy"]
})
示例:关闭系统提示裁剪¶
通过环境变量关闭对插件 system-prompt 段落的裁剪:
export DSH_COMPOSER_PRUNE_PLUGIN_SECTIONS=0
适用场景与注意¶
- 适合需要管理大量插件与技能、希望按会话/项目隔离可见范围的使用者。
- 插件以当前 DSH 进程权限运行,安装前建议检查源码与许可证。
- 不支持 DSH 1.5 以下版本,也不保证未来版本的兼容性。
短结尾¶
dsh-capability-composer 通过组合与按需可见性,帮助你在保持插件与技能运行的同时,显著减少每次请求的系统提示体积。更多细节与配置项见目录页与 GitHub 仓库。