一款基于 .NET 开源、跨平台应用程序自动升级组件

开发个什么Skill呢?

通过 Skill,我们可以将某些能力进行模块化封装,从而实现特定的工作流编排、专家领域知识沉淀以及各类工具的集成。

这里我打算来一次"套娃式"的实践:创建一个用于自动生成 Skill 的 Skill,一是用来展示如何创建Skill,二是通过这种方式再深入理解下Skill的设计理念。在实际使用时,用户只需要输入该 Skill 的功能描述、使用场景以及示例用法,系统便可以自动生成对应的 Skill 说明文档、描述信息等配套内容。把这个自动生成Skill的Skill命名成:skill-creator。

下面,我们按照步骤向skill-creator的SKILL.md文件中写入以下内容:

一、定义skill-creator的描述信息


name: skill-creator

description: 生成有效技能的指南。当用户想要创建新技能(或更新现有技能)时,应该使用此技能,该技能可以通过专业知识、工作流或工具集成来扩展Claude的能力。


二、解释下Skill和关于Skill

技能是模块化的、自包含的软件包,通过提供专业知识、工作流程和工具来扩展 Claude 的能力。可以把它们想象成特定领域或任务的"入职指南"------它们将 Claude 从通用型智能体转变为专业型智能体,使其具备任何模型都无法完全拥有的程序性知识。

Skills能提供什么?

专业工作流 - 特定领域的多步骤操作流程

工具集成 - 使用特定文件格式或 API 的指导说明

领域专长 - 企业特有知识、数据架构、业务规则

资源包 - 处理复杂和重复任务所需的脚本、参考文档和相关资源

核心理念

简洁至上

上下文窗口是一种公共资源。技能与 Claude 所需的其他所有内容共享上下文窗口:系统提示词、对话历史、其他技能的元数据以及实际的用户请求。

基本前提:Claude 本身已经很聪明。 只需添加 Claude 还不知道的内容。对每条信息都要提出质疑:"Claude 真的需要这个说明吗?" 和 "这段内容的 token 成本值得吗?"

优先使用简洁的示例而非冗长的解释。

给予恰当的自由度

根据任务的脆弱性和可变性来匹配具体程度:

高自由度(基于文本的指令):当存在多种有效方法、决策取决于上下文,或通过启发式方法指导时使用。

中等自由度(带参数的伪代码或脚本):当存在首选模式、可接受一定程度的变化,或配置会影响行为时使用。

低自由度(特定脚本、少量参数):当操作容易出错且脆弱、一致性至关重要,或必须遵循特定顺序时使用。

可以把 Claude 想象成在探索一条路径:悬崖边的狭窄桥梁需要具体的护栏(低自由度),而开阔的田野则允许多条路线(高自由度)。

三、生成的Skill有哪些组成部分

每个技能都包含一个必需的 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

每个SKILL.md包含:

头部元数据(YAML 格式):包含 name(名称)和 description(描述)字段。这些是 Claude 判断何时使用技能的唯一依据,因此清晰、全面地描述技能的功能和使用场景非常重要。

主体内容(Markdown 格式):关于如何使用该技能的说明和指引。只有在技能被触发后才会加载(如果被触发的话)。

可选的捆绑资源

脚本 (scripts/)

可执行代码(Python/Bash 等),适用于需要确保可靠性或经常重复编写的任务。

何时使用:当同一段代码需要反复编写,或需要确定性的可靠执行时

举例:scripts/rotate_pdf.py 用于 PDF 旋转操作

优点:节省 token、结果确定、可能直接执行而无需加载到上下文

说明:Claude 仍可能需要读取脚本以进行修改或适配特定环境

参考资料 (references/)

文档和参考材料,按需加载到上下文中,用于指导 Claude 的工作流程和思考方式。

何时使用:当 Claude 工作时需要查阅的文档资料

举例:财务架构文档 references/finance.md、公司保密协议模板 references/mnda.md、公司制度 references/policies.md、API 规范 references/api_docs.md

适用场景:数据库模式、API 文档、专业领域知识、企业政策、详细操作指南

优点:让 SKILL.md 保持简洁,只在 Claude 需要时才加载

最佳实践:如果文件很大(超过 1 万字),在 SKILL.md 中添加 grep 搜索模式

避免重复:信息应该只放在 SKILL.md 或参考文件的其中一处,不要两边都有。详细信息优先放在参考文件中,除非真的是技能核心------这样既能保持 SKILL.md 简洁,又能让信息易于查找而不会占满上下文窗口。SKILL.md 只保留关键的操作说明和流程指引;详细的参考资料、架构图和示例都移到参考文件里。

资源文件 (assets/)

无需加载到上下文的文件,主要用于 Claude 产生的最终输出内容中。

何时使用:技能需要在最终成果中用到的文件

举例:品牌素材 assets/logo.png、PowerPoint 模板 assets/slides.pptx、HTML/React 脚手架 assets/frontend-template/、字体文件 assets/font.ttf

适用场景:模板文件、图像、图标、样板代码、字体、需要复制或修改的样例文档

优点:把输出用的资源和说明文档分开,让 Claude 可以使用这些文件而不占用上下文空间

技能中不应包含的内容

技能应仅包含直接支持其功能的核心文件。不要创建无关的文档或辅助文件,例如:

README.md

INSTALLATION_GUIDE.md(安装指南)

QUICK_REFERENCE.md(快速参考)

CHANGELOG.md(变更日志)

等等

技能只应包含 AI 智能体执行任务所需的信息。不应包含创建过程的附加说明、安装测试步骤、用户使用文档等辅助内容。添加额外的文档文件只会造成混乱和干扰。

四、渐进式展开设计原则

技能使用三级加载系统来高效管理上下文:

元数据(名称 + 描述) - 始终在上下文中(约100字)

SKILL.md 正文 - 当技能触发时(<五千字)

捆绑资源 - 根据 Claude 需要(无限制,因为脚本可以在不读入上下文窗口的情况下执行)

渐进式展示模式

保持 SKILL.md 主体内容精简,控制在 500 行以内,避免上下文过度膨胀。接近这个限制时,应将内容拆分成独立文件。拆分内容时,务必在 SKILL.md 中引用这些文件,并明确说明何时查阅,确保技能使用者知道这些文件的存在及其使用时机。

核心原则: 当技能支持多种变体、框架或选项时,SKILL.md 中只保留核心工作流和选择指引。将各变体的具体细节(模式、示例、配置)移至独立的参考文件。

五、Skill创建流程

技能创建包括以下步骤:

通过具体示例理解技能

规划可重用的技能内容(脚本、参考资料、资源文件)

初始化技能(运行 init_skill.py)

编辑技能(实现资源并编写 SKILL.md

打包技能(运行 package_skill.py)

基于实际使用进行迭代

按顺序遵循这些步骤,除非有明确理由说明某步骤不适用才可跳过。

步骤 1:通过具体示例理解技能

仅当技能的使用模式已经非常清楚时才跳过此步骤。即使在处理现有技能时,这一步骤仍然很有价值。

要创建有效的技能,需要清楚理解该技能将如何被使用的具体示例。这种理解可以来自用户直接提供的示例,或经过用户反馈验证的生成示例。

例如,在构建图像编辑器技能时,相关问题包括:

"图像编辑器技能应该支持什么功能?编辑、旋转,还有其他吗?"

"你能给出一些这个技能如何使用的示例吗?"

"我可以想象用户会提出'去除这张图片的红眼'或'旋转这张图片'之类的请求。你还能想到这个技能的其他使用方式吗?"

"用户会说什么来触发这个技能?"

为避免让用户不知所措,避免在单条消息中提出太多问题。从最重要的问题开始,根据需要跟进以提高效率。

当对技能应支持的功能有了清晰认识时,即可结束此步骤。

步骤 2:规划可重用的技能内容

要将具体示例转化为有效的技能,需要通过以下方式分析每个示例:

考虑如何从零开始执行该示例

识别在重复执行这些工作流程时哪些脚本、参考资料和资源文件会有帮助

示例:在构建 pdf-editor 技能来处理"帮我旋转这个 PDF"之类的查询时,分析显示:

旋转 PDF 每次都需要重写相同的代码

将 scripts/rotate_pdf.py 脚本存储在技能中会很有帮助

示例:在设计 frontend-webapp-builder 技能来处理"给我做个待办事项应用"或"做个仪表板追踪我的步数"之类的查询时,分析显示:

编写前端网页应用每次都需要相同的样板 HTML/React 代码

将包含样板 HTML/React 项目文件的 assets/hello-world/ 模板存储在技能中会很有帮助

示例:在构建 big-query 技能来处理"今天有多少用户登录了?"之类的查询时,分析显示:

查询 BigQuery 每次都需要重新发现表结构和关系

将记录表结构的 references/schema.md 文件存储在技能中会很有帮助

要确定技能的内容,需要分析每个具体示例,创建要包含的可重用资源清单:脚本、参考资料和资源文件。

步骤 3:初始化技能

到这一步,就该真正创建技能了。

仅当正在开发的技能已经存在,需要进行迭代或打包时才跳过此步骤。在这种情况下,继续下一步。

从零开始创建新技能时,始终运行 init_skill.py 脚本。该脚本会方便地生成一个新的技能目录模板,自动包含技能所需的一切,使技能创建过程更加高效和可靠。

用法:

scripts/init_skill.py <技能名称> --path <输出目录>

该脚本会:

在指定路径创建技能目录

生成带有正确前言信息和待办事项占位符的 SKILL.md 模板

创建示例资源目录:scripts/、references/ 和 assets/

在每个目录中添加可以自定义或删除的示例文件

初始化后,根据需要自定义或删除生成的 SKILL.md 和示例文件。

步骤 4:编辑技能

在编辑(新生成或现有的)技能时,请记住该技能是为另一个Claude实例使用而创建的。包含对Claude有益且不明显的信息。考虑哪些程序性知识、领域特定细节或可重用资源能帮助另一个Claude实例更有效地执行这些任务。

4.1 学习经过验证的设计模式

根据技能需求,查阅以下有用的指南:

多步骤流程:参见 references/workflows.md 了解顺序工作流程和条件逻辑

特定输出格式或质量标准:参见 references/output-patterns.md 了解模板和示例模式

这些文件包含了有效技能设计的成熟最佳实践。

4.2 从可重用的技能内容开始

要开始实现,从上面识别的可重用资源开始:scripts/、references/ 和 assets/ 文件。请注意,此步骤可能需要用户输入。例如,在实现 brand-guidelines 技能时,用户可能需要提供品牌资源或模板存储在 assets/ 中,或提供文档存储在 references/ 中。

添加的脚本必须通过实际运行来测试,以确保没有错误且输出符合预期。如果有许多类似的脚本,只需测试代表性样本即可确保它们都能工作,同时平衡完成时间。

不需要用于该技能的任何示例文件和目录都应删除。初始化脚本会在 scripts/、references/ 和 assets/ 中创建示例文件来演示结构,但大多数技能不需要所有这些文件。

4.3 生成 SKILL.md文件

编写准则: 始终使用祈使句/不定式形式。

前言信息

编写包含 name 和 description 的 YAML 前言:

name:技能名称

description:这是技能的主要触发机制,帮助 Claude 理解何时使用该技能。

包含技能的功能和使用时机的具体触发条件/上下文。

将所有"何时使用"的信息都包含在这里 - 不要放在正文中。正文只在触发后才加载,因此正文中的"何时使用此技能"部分对 Claude 没有帮助。

docx 技能的描述示例:"全面的文档创建、编辑和分析功能,支持修订追踪、评论、格式保留和文本提取。当 Claude 需要处理专业文档(.docx 文件)时使用,包括:(1) 创建新文档,(2) 修改或编辑内容,(3) 处理修订追踪,(4) 添加评论,或任何其他文档任务"。

不要在 YAML 前言中包含任何其他字段。

正文吞孜谒酱

相关推荐
JjcPoD3H412 小时前
PDE (Processing D Editor) 三维场景编辑器 · 软件白皮书 · 基于 v..
分享
aF058JN5H12 小时前
Serilog 日志库简单实践(五)数据库 Sinks(.net)
分享
oAA4RW56t12 小时前
.NET 打造 OpenClaw Windows Node
分享
dtICUA6su12 小时前
一款基于 .NET 开源、跨平台应用程序自动升级组件
分享
风趣的小刺猬12 小时前
.NET 新特性概览与相关文章索引
分享
Nx14g3Hu412 小时前
一款基于 .NET 开源、跨平台应用程序自动升级组件
分享
nd1o6XEn312 小时前
MiniMax M. 发布!Redis 故障排查 + 跨语言重构场景实测,表现如何?
分享
Qbpad9TeD12 小时前
AutoGod:一款拥有AI视觉的安卓自动化框架
分享
qp83X6D4712 小时前
再次革新 .NET 的构建和发布方式(一)
分享