




















最近 Skill 可谓热度颇高,无论是微信公众号还是博客园,都能看到大量围绕 Skill 的开发实践、落地方式以及发展趋势的文章。既然如此,我也打算凑个热闹,从实战的角度写一篇关于 Skill 的实践分享。
在展开之前,先简要说明一下什么是 Skill。Skills 的概念由 Anthropic 提出,本质上是一种更高层次的模块化能力封装,用于扩展智能体的功能边界。每一个 Skill 都封装了指令、元数据以及可选的资源(如脚本、模板等),智能体在执行任务时,会根据上下文相关性自动选择并调用合适的 Skill。
对Skill不了解的同学可以看下我之前的一篇文章 Claude Skills是什么?为什么要引入Skills?
通过 Skill,我们可以将某些能力进行模块化封装,从而实现特定的工作流编排、专家领域知识沉淀以及各类工具的集成。
这里我打算来一次“套娃式”的实践:创建一个用于自动生成 Skill 的 Skill,一是用来展示如何创建Skill,二是通过这种方式再深入理解下Skill的设计理念。在实际使用时,用户只需要输入该 Skill 的功能描述、使用场景以及示例用法,系统便可以自动生成对应的 Skill 说明文档、描述信息等配套内容。把这个自动生成Skill的Skill命名成:skill-creator。
下面,我们按照步骤向skill-creator的SKILL.md文件中写入以下内容:
skill-creator的描述信息---
name: skill-creator
description: 生成有效技能的指南。当用户想要创建新技能(或更新现有技能)时,应该使用此技能,该技能可以通过专业知识、工作流或工具集成来扩展Claude的能力。
---
技能是模块化的、自包含的软件包,通过提供专业知识、工作流程和工具来扩展 Claude 的能力。可以把它们想象成特定领域或任务的"入职指南"——它们将 Claude 从通用型智能体转变为专业型智能体,使其具备任何模型都无法完全拥有的程序性知识。
上下文窗口是一种公共资源。技能与 Claude 所需的其他所有内容共享上下文窗口:系统提示词、对话历史、其他技能的元数据以及实际的用户请求。
基本前提:Claude 本身已经很聪明。 只需添加 Claude 还不知道的内容。对每条信息都要提出质疑:"Claude 真的需要这个说明吗?" 和 "这段内容的 token 成本值得吗?"
优先使用简洁的示例而非冗长的解释。
根据任务的脆弱性和可变性来匹配具体程度:
高自由度(基于文本的指令):当存在多种有效方法、决策取决于上下文,或通过启发式方法指导时使用。
中等自由度(带参数的伪代码或脚本):当存在首选模式、可接受一定程度的变化,或配置会影响行为时使用。
低自由度(特定脚本、少量参数):当操作容易出错且脆弱、一致性至关重要,或必须遵循特定顺序时使用。
可以把 Claude 想象成在探索一条路径:悬崖边的狭窄桥梁需要具体的护栏(低自由度),而开阔的田野则允许多条路线(高自由度)。
每个技能都包含一个必需的 SKILL.md 文件和可选的捆绑资源:
skill-name/
├── SKILL.md (required)
│ ├── YAML frontmatter metadata (required)
│ │ ├── name: (required)
│ │ └── description: (required)
│ └── Markdown instructions (required)
└── Bundled Resources (optional)
├── scripts/ - Executable code (Python/Bash/etc.)
├── references/ - Documentation intended to be loaded into context as needed
└── assets/ - Files used in output (templates, icons, fonts, etc.)
每个SKILL.md包含:
name(名称)和 description(描述)字段。这些是 Claude 判断何时使用技能的唯一依据,因此清晰、全面地描述技能的功能和使用场景非常重要。scripts/)可执行代码(Python/Bash 等),适用于需要确保可靠性或经常重复编写的任务。
scripts/rotate_pdf.py 用于 PDF 旋转操作references/)文档和参考材料,按需加载到上下文中,用于指导 Claude 的工作流程和思考方式。
references/finance.md、公司保密协议模板 references/mnda.md、公司制度 references/policies.md、API 规范 references/api_docs.mdassets/)无需加载到上下文的文件,主要用于 Claude 产生的最终输出内容中。
assets/logo.png、PowerPoint 模板 assets/slides.pptx、HTML/React 脚手架 assets/frontend-template/、字体文件 assets/font.ttf技能应仅包含直接支持其功能的核心文件。不要创建无关的文档或辅助文件,例如:
技能只应包含 AI 智能体执行任务所需的信息。不应包含创建过程的附加说明、安装测试步骤、用户使用文档等辅助内容。添加额外的文档文件只会造成混乱和干扰。
技能使用三级加载系统来高效管理上下文:
保持 SKILL.md 主体内容精简,控制在 500 行以内,避免上下文过度膨胀。接近这个限制时,应将内容拆分成独立文件。拆分内容时,务必在 SKILL.md 中引用这些文件,并明确说明何时查阅,确保技能使用者知道这些文件的存在及其使用时机。
核心原则: 当技能支持多种变体、框架或选项时,SKILL.md 中只保留核心工作流和选择指引。将各变体的具体细节(模式、示例、配置)移至独立的参考文件。
技能创建包括以下步骤:
按顺序遵循这些步骤,除非有明确理由说明某步骤不适用才可跳过。
仅当技能的使用模式已经非常清楚时才跳过此步骤。即使在处理现有技能时,这一步骤仍然很有价值。
要创建有效的技能,需要清楚理解该技能将如何被使用的具体示例。这种理解可以来自用户直接提供的示例,或经过用户反馈验证的生成示例。
例如,在构建图像编辑器技能时,相关问题包括:
为避免让用户不知所措,避免在单条消息中提出太多问题。从最重要的问题开始,根据需要跟进以提高效率。
当对技能应支持的功能有了清晰认识时,即可结束此步骤。
要将具体示例转化为有效的技能,需要通过以下方式分析每个示例:
示例:在构建 pdf-editor 技能来处理"帮我旋转这个 PDF"之类的查询时,分析显示:
scripts/rotate_pdf.py 脚本存储在技能中会很有帮助示例:在设计 frontend-webapp-builder 技能来处理"给我做个待办事项应用"或"做个仪表板追踪我的步数"之类的查询时,分析显示:
assets/hello-world/ 模板存储在技能中会很有帮助示例:在构建 big-query 技能来处理"今天有多少用户登录了?"之类的查询时,分析显示:
references/schema.md 文件存储在技能中会很有帮助要确定技能的内容,需要分析每个具体示例,创建要包含的可重用资源清单:脚本、参考资料和资源文件。
到这一步,就该真正创建技能了。
仅当正在开发的技能已经存在,需要进行迭代或打包时才跳过此步骤。在这种情况下,继续下一步。
从零开始创建新技能时,始终运行 init_skill.py 脚本。该脚本会方便地生成一个新的技能目录模板,自动包含技能所需的一切,使技能创建过程更加高效和可靠。
用法:
scripts/init_skill.py <技能名称> --path <输出目录>
该脚本会:
scripts/、references/ 和 assets/初始化后,根据需要自定义或删除生成的 SKILL.md 和示例文件。
在编辑(新生成或现有的)技能时,请记住该技能是为另一个Claude实例使用而创建的。包含对Claude有益且不明显的信息。考虑哪些程序性知识、领域特定细节或可重用资源能帮助另一个Claude实例更有效地执行这些任务。
根据技能需求,查阅以下有用的指南:
这些文件包含了有效技能设计的成熟最佳实践。
要开始实现,从上面识别的可重用资源开始:scripts/、references/ 和 assets/ 文件。请注意,此步骤可能需要用户输入。例如,在实现 brand-guidelines 技能时,用户可能需要提供品牌资源或模板存储在 assets/ 中,或提供文档存储在 references/ 中。
添加的脚本必须通过实际运行来测试,以确保没有错误且输出符合预期。如果有许多类似的脚本,只需测试代表性样本即可确保它们都能工作,同时平衡完成时间。
不需要用于该技能的任何示例文件和目录都应删除。初始化脚本会在 scripts/、references/ 和 assets/ 中创建示例文件来演示结构,但大多数技能不需要所有这些文件。
编写准则: 始终使用祈使句/不定式形式。
编写包含 name 和 description 的 YAML 前言:
name:技能名称description:这是技能的主要触发机制,帮助 Claude 理解何时使用该技能。
docx 技能的描述示例:"全面的文档创建、编辑和分析功能,支持修订追踪、评论、格式保留和文本提取。当 Claude 需要处理专业文档(.docx 文件)时使用,包括:(1) 创建新文档,(2) 修改或编辑内容,(3) 处理修订追踪,(4) 添加评论,或任何其他文档任务"。不要在 YAML 前言中包含任何其他字段。
编写使用该技能及其捆绑资源的说明。
在cursor和claude code对应的skills目录下新建 skill-creator 文件夹并将上述SKILL.md放在该文件夹下,在cursor和claude code中通过 /skill-creator唤起,例如在cursor中的效果是:
我想要生成一个为我拟定文章题目的Skill

使用效果:

生成后在skills目录下可以看到:

在cursor中可以使用:

如果你已经使用过Skill,看到这里其实已经能明白:我实现的这个 skill-creator,本质上就是 开源的Skill Creator,只不过在这里对其做了一次翻译和封装。
通过这种方式,一方面可以更直观地理解Skill的设计思路,另一方面也能在实践中加深对其使用方式和边界的认识。
下面是一些我觉得很好用的开源Skill是,分享给大家。
从本质上看,Skills 仍然属于上下文工程的一部分,其核心目标在于缓解上下文长度受限和Token消耗过快的问题。同时,它也继承了优秀系统提示词所具备的设计原则——清晰、简洁、结构化,只不过是以文件系统目录结构的形式。
希望本文的分享,能够对大家理解 Skills 的设计理念,以及在实际场景中的应用方式,提供一些参考与帮助。
点击下载本文中的SKILL.md
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。