Skill 是三层扩展里最轻的一层:一份技能文件就是一个扩展;而技能目录不是写死的——它从插件包自己的位置推出来,包装到哪儿它就跟到哪儿。
第三章讲完了机制(作用域、预设、内核),第四章开始动手。第一层就是最轻的:加一份技能文件,不用写代码。
一、Skill 这一层有 4 件包
真实配置树里,跟 Skill 有关的一共 4 个包:
dsh-skill——能力本体,技能系统的核心。dsh-skill-filesystem——从文件系统里读技能文件。dsh-skill-badge——技能徽标,负责呈现。dsh-tool-skill——给模型用的入口工具。
一件能力拆成四个包:本体、来源、呈现、入口。这个拆法在 4.2.2 还会再遇到一次。
二、技能目录是从包位置推出来的
技能从哪儿读?配置里写着 customSkillDirs,值是一串 node:path 的推算代码:
- 先解析
@deepseek-ai/dsh-agent-preset/package.json的位置; - 取它所在目录;
- 拼上
skills。
路径不是写死的,是从插件包自己的位置推出来的。好处很实在:插件装到哪儿,技能目录就跟到哪儿——换安装位置、换包管理器,都不用改配置。
三、默认启用方式:web 形态只留本体
实测 web profile:这 4 件里已经有 3 件被 web-app 层停用(filesystem/badge/tool-skill),只剩 dsh-skill 本体在跑。
界面上的 ui-skill 是另一回事——它是 48 个客户端渲染件之一,负责把技能面板画出来。面板归面板,能力归能力。
也就是说,【默认启用】不是打开所有插件,而是按产品形态挑一套。
四、所以【加一个技能】要动什么
答案:放一份技能文件进技能目录——不用改配置、不用写代码、不用动内核。
这就是【最轻量】三个字的含义:不需要碰任何一行配置,能力就多了一条。
代价也要说清:技能能改的是【模型怎么做事】,改不了【模型能做什么】——要加真正的能力,得往上一层走(4.2)。
五、动手 Demo:Skill 这一层,配置里长什么样
把 Skill 的四件包和技能目录的来源摆出来:
packs = [
("skill", "能力本体(技能系统的核心)"),
("skill-filesystem", "从文件系统里读技能文件"),
("skill-badge", "技能徽标(呈现用)"),
("tool-skill", "给模型用的入口工具"),
]
for a, b in packs:
print(" dsh-%-18s %s" % (a, b))
print()
print(" 技能目录:customSkillDirs -> <包位置>/skills")
print(" 路径由包位置推出,不是写死的")
实跑输出:
--------------------------------------------------------------------
Skill 这一层,配置里长什么样
--------------------------------------------------------------------
真实配置树里,跟 Skill 有关的包一共 4 个:
包(省略 @deepseek-ai/dsh- 前缀) 角色
-----------------------------------------------------------------
skill 能力本体(技能系统的核心)
skill-filesystem 从文件系统里读技能文件
skill-badge 技能徽标(呈现用)
tool-skill 给模型用的入口工具
-----------------------------------------------------------------
技能从哪儿读?skill-filesystem 的配置里写着:
customSkillDirs:
- <包位置>/skills
注意这个路径不是写死的,而是【从这个插件包自己的位置推出来的】:
先找到 @deepseek-ai/dsh-agent-preset 这个包,再取它旁边的 skills 目录。
好处很实在:插件装到哪儿,技能目录就跟到哪儿——
换个安装位置、换个包管理器,都不用改配置。
四条里最该记住的是目录随包走这条——它是【插件化】落到细节上的样子。 4 件包的拆分也说明一件事:一件能力往往要在好几个位置各挂一件(下一节 4.2.2 展开)。 web 形态只留本体,说明【默认启用】是按产品形态挑的,不是全开。
30 秒实验
- 在配置树里搜
customSkillDirs,看那一串路径推算代码,读一遍它的思路。 - 数一数配置里跟 skill 有关的行有几处,其中几处是停用状态。
- 想一个你日常重复的动作,把它写成一份技能文件(不写代码的那种)。
常见误区
- 错误:加技能要写代码、改配置。——纠正:放一份技能文件就行——这是三层扩展里最轻的一层。
- 错误:技能目录是写死在配置里的绝对路径。——纠正:从插件包位置推出来,包装到哪儿目录跟到哪儿。
- 错误:界面上有技能面板,说明技能能力已启用。——纠正:ui-skill 是渲染件,面板在不在和能力在不在是两件事。
自测三问(点开对答案)
1. 跟 Skill 有关的一共几个包?分别是什么角色? —— 4 个:skill(本体)、skill-filesystem(来源)、skill-badge(呈现)、tool-skill(入口)。 2. 技能目录的路径怎么来的? —— 从 `@deepseek-ai/dsh-agent-preset` 包的位置推出来,再拼上 `skills`——**随包走**。 3. web profile 里默认启用了几件? —— 只剩 `dsh-skill` 本体;另外 3 件被 web-app 层停用。- ☐ 下一节(4.1.2 动手实验:删除 Skill,观察能力是否还在)
相关笔记
- 4 套 Preset 如何体现【一切皆插件】 —— 组合是配置的事,技能更轻
- Standard:能力基线 —— 打开清单能看到 skill 三件
- 命名空间、模块、软件包-将相关的类集中在一起 —— 【一个包一个入口】的老规矩在这里被打破了
- 🐳 DeepSeek Harness · 索引