🐳 第四章 从Skill、Tool到Hook
📄 一句话概括

Skill 是三层扩展里最轻的一层:一份技能文件就是一个扩展;而技能目录不是写死的——它从插件包自己的位置推出来,包装到哪儿它就跟到哪儿。

📝 本节和前面几节的关系

第三章讲完了机制(作用域、预设、内核),第四章开始动手。第一层就是最轻的:加一份技能文件,不用写代码。

一、Skill 这一层有 4 件包

真实配置树里,跟 Skill 有关的一共 4 个包:

一件能力拆成四个包:本体、来源、呈现、入口。这个拆法在 4.2.2 还会再遇到一次。

二、技能目录是从包位置推出来的

技能从哪儿读?配置里写着 customSkillDirs,值是一串 node:path 的推算代码:

路径不是写死的,是从插件包自己的位置推出来的。好处很实在:插件装到哪儿,技能目录就跟到哪儿——换安装位置、换包管理器,都不用改配置。

三、默认启用方式: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 秒实验

  1. 在配置树里搜 customSkillDirs,看那一串路径推算代码,读一遍它的思路。
  2. 数一数配置里跟 skill 有关的行有几处,其中几处是停用状态。
  3. 想一个你日常重复的动作,把它写成一份技能文件(不写代码的那种)。

常见误区

  1. 错误:加技能要写代码、改配置。——纠正:放一份技能文件就行——这是三层扩展里最轻的一层。
  2. 错误:技能目录是写死在配置里的绝对路径。——纠正:从插件包位置推出来,包装到哪儿目录跟到哪儿。
  3. 错误:界面上有技能面板,说明技能能力已启用。——纠正: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 层停用。

相关笔记