大家好,我是煎鱼。

在去年 10 月中 A 社推出了 Skills 是什么。在 26 年 1 月正式火爆,开始在非编程领域全面开花,从而也有更多的人开始关注 skills。

图片

从目前来看,skills 由于使用门槛低,广泛性强,更亲民。有了更大的使用群体。

以下概念是由 Claude 先发起,后续其他平台也进行了跟进。今天我们一起来学习他。

Skills 是什么

Skills 是由指令(Instructions)、可执行代码(Code)和资源(Resources) 打包而成的程序包/指令集。可以用于指导 LLM 去处理的特定任务,或是工作流。

![图片](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg' xmlns:xlink=‘http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

实体上,每一个 Skill 需包含以下内容:

![图片](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg' xmlns:xlink=‘http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

  • SKILL.md(必填):带有 YAML 前置元数据的 Markdown 指令文件。

  • scripts(可选):可执行代码(Python、Bash 等)。

  • references(可选):按需加载的参考文档。

  • assets(可选):用于输出内容的模板、字体、图标等资源。

主要优势&特性

渐进式披露

Skills 能这么火,肯定是有原因的。其有多个主要优势,最核心之一是:渐进式披露。可以省挺多钱(tokens)。

其在 SKILL.md 中使用三层的加载模型去逐步读取:

  • 元数据(名称:64 字符,描述:1024 字符):Claude 可查看技能名称与描述。

  • 完整指令(< 5000 tokens):在技能匹配相关场景时加载。

  • 关联文件:仅在需要时才加载的额外资源。

第一、第二层:元数据和完整指令

在启动时,第一层会预先加载每个 skill 的名称和描述作为系统预设信息中。

![来自官方资料](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg' xmlns:xlink=‘http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

来自官方资料

这些元数据是渐进披露的第一层,也就是他仅提供基本信息,让 LLM 知道应该什么时候调用 skill,而无需全部加载。

第二层是其对应的正文内容,如果 LLM 认为当前会话的任务与该 skill 相关,则会通过读取完整上下文加载该 skill。

第三层:关联文件

如果本身复杂度较高,上下文信息过多。我们可以在 SKILL.md 中引用额外的链接文件。这是第三层。

![来自官方资料](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg' xmlns:xlink=‘http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

来自官方资料

对此 LLM 将会根据描述和需要时进行阅读和处理相关信息。

可组合/可复用

多个 Skill 可以在同一个会话中协同工作,也可以在不同会话中进行处理。

更甚至可以把多个 Skill 组件成有实操价值的工作流才达成自己的诉求。

![图片](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg' xmlns:xlink=‘http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

标准化&规范

目前 Skills 也已经在 A 社和大家的使用下,各大 CLI 工具和平台均已支持。

名副其实的达到了全工具的标准化和规划,你写的 Skill 可以在不同的工具中复用。

分发打个包发过去就可以用了,很方便。

基本结构

前面有提到一个 SKILL 的基本结构是:

<span data-cacheurl="" data-remoteid="" data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_png/yFlllLR1oUICYDHdjpNX8D4XrkXpAMcNKZHrt4MIqmoV7HQzL0AtAbmnI0MzFvV3gJzK34sy6qheBby6tgqu7k2TXtlqIank5UtNLKiajVibc/640?wx_fmt=png&amp;from=appmsg"></span><code><span leaf="">your-skill-name/</span><span leaf=""><br></span><span leaf="">├── SKILL.md &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span><span><span leaf=""># Required - main skill file</span></span><span leaf=""><br></span><span leaf="">├── scripts/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span><span><span leaf=""># Optional - executable code</span></span><span leaf=""><br></span><span leaf="">├── references/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span><span leaf=""># Optional - documentation</span></span><span leaf=""><br></span><span leaf="">└── assets/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span><span leaf=""># Optional - templates, et</span></span><span leaf=""><br></span></code>

SKILL.md 是必须要有的,其文件内容如下:

<span data-cacheurl="" data-remoteid="" data-lazy-bgimg="https://mmbiz.qpic.cn/sz_mmbiz_png/yFlllLR1oUKLSQX8yQOLNBicP89lX7IgicE1H5wFFIxJSRiaiasYLzjgHEsLnSyWd8iaSHnYicFORLXZgpXt0z1TjnuZdU7dDc0FHQXJRmsZdBeag/640?wx_fmt=png&amp;from=appmsg"></span><code><span leaf="">---</span><span leaf=""><br></span><span leaf="">name: your-skill-name</span><span leaf=""><br></span><span leaf="">description: 详细介绍该 SKILL 能做什么,以及何时应该被使用。</span><span leaf=""><br></span><span leaf="">---</span><span leaf=""><br></span><span leaf=""><br></span><span leaf="">SKILL 的正文内容,进一步描述 SKILL 应该如何做,怎么做。</span><span leaf=""><br></span></code>

该文件内容分为两个部分:

  • 分别是 YAML 前置内容(--- 标记之间),描述该 SKILL 的名称和描述,便于 LLM 进行预加载和识别。

  • 其后,是 LLM 识别到要该使用该 SKILL 后会读取的正文描述内容。再基于此进行延伸渐进式读取。

官方例子

这里将直接引用 Claude 官方的 SKILL 例子,并补充一些说明。

该示例将创建一个 SKILL,教会 LLM 借助可视化图表 + 类比的方式讲解代码。

创建 SKILL

第一步,我们创建该 SKILL 的目录:

<span data-cacheurl="" data-remoteid="" data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_png/yFlllLR1oUJeWYu9FeTzOLpxc2PeOd3J7TdGtqZ1OzlM3puN15cUficDYIgRAPB9ibIKnGpFlCZoDoG4icGF8dUqqRgdcNibPf72UBKc1VUibQro/640?wx_fmt=png&amp;from=appmsg"></span><code><span leaf="">mkdir -p ~/.claude/skills/explain-code</span><span leaf=""><br></span></code>

创建后你可以在 ~/.claude/skills 下看到名为 explain-code 的 SKILL。

如果你有安装过别的 SKILL,也会在此一同查看到。

描述 SKILL.md

第二步,在 ~/.claude/skills/explain-code/SKILL.md 下创建核心文件:SKILL.md:

<span data-cacheurl="" data-remoteid="" data-lazy-bgimg="https://mmbiz.qpic.cn/sz_mmbiz_png/yFlllLR1oUJiaU5CJx0oy79msGnQUtrewOBLVohdheKVg06zvXROmurFKSx9iaopJQAnicm1YeMwiaVk2ek38pen6oQiakVtZ0aQNQoLpEicCrewo/640?wx_fmt=png&amp;from=appmsg"></span><code><span leaf="">---</span><span leaf=""><br></span><span leaf="">name: explain-code</span><span leaf=""><br></span><span leaf="">description: 通过视觉图表和类比来解释代码。适用于解释代码运行原理、教授代码库知识或当用户询问“这段代码是怎么工作的?”时。</span><span leaf=""><br></span><span leaf="">---</span><span leaf=""><br></span><span leaf=""><br></span><span leaf="">在解释代码时,请务必包含以下内容:</span><span leaf=""><br></span><span leaf=""><br></span><span leaf="">1. **以类比开头**:将代码比作日常生活中的事物。</span><span leaf=""><br></span><span leaf="">2. **绘制图表**:使用 ASCII 艺术图来展示流程、结构或相互关系。</span><span leaf=""><br></span><span leaf="">3. **逐步引导**:按步骤详细说明代码执行过程中发生了什么。</span><span leaf=""><br></span><span leaf="">4. **强调易错点**:指出常见的错误或误区是什么?</span><span leaf=""><br></span><span leaf=""><br></span><span leaf="">保持解释过程具有对话感。对于复杂的概念,可以运用多个类比。</span><span leaf=""><br></span></code>

调用 SKILL

调用 SKILL 有 两种方式。一种是隐式的,由 LLM 根据预先加载的 SKILLS 内容,进行判别。

例如你可以直接在 Claude 中询问:“这段代码是怎么工作的?”,并指定相关的项目/代码。

![图片](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg' xmlns:xlink=‘http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

第二种是显式指定,直接执行:

<span data-cacheurl="" data-remoteid="" data-lazy-bgimg="https://mmbiz.qpic.cn/sz_mmbiz_png/yFlllLR1oULViaPzFqDxIFbGtsxh7xiaT4qX74aL5heiaPiak3wOOoyJWMTB0ZYWPw0hcKdzaAP2BxY8LicTZ5CEFJy9tEv6b1W7UvICa6Pzy5zA/640?wx_fmt=png&amp;from=appmsg"></span><code><span leaf="">/explain-code 相关要分析的项目或代码</span><span leaf=""><br></span></code>

![图片](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg' xmlns:xlink=‘http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

![图片](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg' xmlns:xlink=‘http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

就可以完成 SKILL 的调用和联动分析。

如果要查看本地 Claude 加载了什么 SKILLS,只需执行 /skills 查看即可。

总结

目前在使用建议上,如果存在可复用的场景。例如你一天要执行 2 次及以上,就可以让 Claude Code 给你写成 skills 去使用。

本文只包含了最简的 SKILL 创建和使用流程,如果大家还有需要,可以查看 skill-creator 这个 SKILL(建议让 LLM 学习他就行了)。

![图片](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg' xmlns:xlink=‘http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

更多 SKILLS 案例仓库,可以查看:anthropics/skills,对于复杂案例学习是有帮助的。

关注和加煎鱼微信,

一手消息和知识,拉你进技术交流群👇

![图片](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg' xmlns:xlink=‘http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

![图片](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg' xmlns:xlink=‘http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

你好,我是煎鱼,出版过 Go 畅销书《Go 语言编程之旅》,再到获得 GOP(Go 领域最有观点专家)荣誉,点击蓝字查看我的出书之路

日常分享高质量文章,输出 Go 面试、工作经验、架构设计,加微信拉读者交流群,和大家交流!

原创不易 点赞支持