前言¶
DeepSeek Harness (DSH) 允许模型按需加载技能,但将大量相关技能(如工具链或分阶段工作流)作为扁平目录安装时,会带来上下文污染和提示词预算浪费的问题。每个安装的技能都会贡献名称和描述到 <available_skills> 目录,即使当前任务不需要这些技能,它们仍会占据上下文窗口。
dsh-skill-bundle 插件通过引入“Bundle Box”概念,将一组相关技能封装在一个包中。仅根技能暴露在目录中,子技能通过元数据按需加载,仅在显式请求时才进入上下文。这有助于减少无关信息干扰,提升推理效率。
核心功能¶
- Bundle Box 结构:包含一个根
SKILL.md和任意数量的子技能目录。 - 按需加载控制:通过 frontmatter 的
loadSubskills字段或模型决策来加载子技能。 - 模型工具:提供
skill_browse(列出子技能名称)和skill_load(加载指定子技能)工具。 - 架构无侵入:作为纯 Cordis 插件,无需修改框架,支持预编译
lib/目录。 - 资源隔离:子技能保持独立身份,其资源目录相对路径解析正确。
安装与配置¶
安装插件需要先确保 DeepSeek Harness (dsh) 已正确安装。
- 安装插件包:
dsh plugin --profile web add @lihuu/dsh-skill-bundle
- 检查配置是否生效:
dsh --profile web --dump-config
配置输出中应包含 `dsh-skill-bundle` 层。
- 重启配置:安装或修改配置后,必须重启对应 Profile 的进程。
自定义 Boxes 路径¶
插件默认在安装包的 boxes/ 目录下查找。若需指向自定义目录,需在配置中添加补丁行,替换原有的 boxesDir:
- insert:
- id: dsh-skill-bundle
name: '@lihuu/dsh-skill-bundle'
config:
boxesDir: /absolute/path/to/your/boxes
使用示例¶
目录结构示例¶
将相关的技能放入一个目录中,该目录即为一个 Bundle Box。例如部署流程:
boxes/deploy/
SKILL.md # 根技能
build/SKILL.md
push/SKILL.md
rollback/SKILL.md
Frontmatter 配置示例¶
在根 SKILL.md 的 frontmatter 中定义加载策略:
---
name: deploy
description: "部署相关技能集"
loadSubskills: # 仅加载指定的子技能
- build
- push
- rollback
---
加载规则:
* loadSubskills: true:加载所有子技能(按目录顺序)。
* loadSubskills: [a, b]:仅加载列表中的子技能。
* 不设置 loadSubskills:仅返回根技能内容,由模型阅读后决策。
注意事项¶
- YAML 1.2 限制:字段值包含逗号时需用双引号包裹,例如:
description: "a, b, c: 需要引号"
- 依赖关系:需安装
@deepseek-ai/dsh-skill和@deepseek-ai/dsh-tools等依赖。 - 配置生效:修改配置后必须重启配置文件才能生效。
总结¶
dsh-skill-bundle 通过将技能分组并实现按需加载,解决了多技能场景下的上下文膨胀问题。开发者可以通过配置 loadSubskills 来精确控制技能集的加载范围,从而在保持功能完整性的同时优化模型调用成本。