Skill 构建完整最佳实践
基于《The Complete Guide to Building Skills for Claude》及 Skill Authoring Best Practices 整理。本文面向手动编写 Skill 的开发者——你直接写 SKILL.md、手动测试、手动迭代,涵盖 YAML frontmatter、正文写作、目录结构、分发共享等完整知识。
1. 一句话理解 Skill
Skill 是一组以文件夹形式打包的指令、流程与附加资源,用来教 Agent 在特定任务上稳定地采取正确步骤、调用正确工具、输出符合预期结果。
-
适合可重复、可标准化的任务
-
不是一次性 prompt,而是可复用工作方式
-
可独立使用,也可与 MCP 配合
2. 标准结构
1 | your-skill-name/ |
关键规则:
-
SKILL.md文件名必须完全一致 -
文件夹名使用 kebab-case
-
skill 文件夹内部不要放
README.md
分层装载(Progressive Disclosure):
-
YAML frontmatter(name + description) — 总是进入上下文,负责触发判断
-
SKILL.md 正文 — Skill 触发后加载,负责主流程
-
references/scripts/assets — 按需读取,负责细节支撑
SKILL.md 保持精炼(理想 < 500 行),超长说明拆到 references/,并在正文中明确告诉模型何时读取哪个 reference。
3. 三个核心原则
3.1 渐进式披露
同上,三层模型。
3.2 可组合性
你的 skill 应能与其他 skills 共存,不应假设自己是唯一能力来源。
3.3 可移植性
尽量让 skill 可跨 Claude.ai、Claude Code、API 复用;环境要求写进 compatibility。
4. MCP 与 Skill
-
MCP:提供连接与工具访问
-
Skill:提供工作流与最佳实践
-
MCP 解决"能做什么"
-
Skill 解决"应该怎么做"
5. 规划方法
从用例出发,不要一上来就写 SKILL.md。先定义 2–3 个具体用例,每个用例写清:
-
目标结果
-
触发方式
-
执行步骤
-
所需工具
-
嵌入的领域知识
常见三类:文档与资产生成、工作流自动化、MCP 增强。
6. 成功标准
定量
-
触发准确率
-
工具调用数 / token 消耗
-
API 失败率
定性
-
用户无需频繁提示下一步
-
多次执行结果一致
-
新用户低指导即可完成
7. YAML frontmatter 最小模板
必填字段
1 |
|
完整模板(含官方所有可选字段)
1 |
|
关键规则:
-
name必填,kebab-case,最长 64 字符,须与文件夹名一致 -
description必填,最长 1024 字符,必须写清做什么 + 什么时候用,带真实触发短语 -
禁止 XML 尖括号
< >(安全限制,frontmatter 出现在系统提示中,恶意内容可能注入指令) -
名称中禁止使用
claude或anthropic(保留字) -
描述应使用第三人称
8. 写好 description
推荐公式:
1 | [做什么] + [什么时候触发] + [关键能力] |
关键原则
-
description 不是普通简介,是 Skill 触发的主要依据
-
必须同时写清两类信息:这个 Skill 做什么,以及什么时候该调用它
-
当前模型存在 undertrigger 倾向,因此 description 要写得更主动、更明确,不能过于保守
写法对比(官方示例)
模糊(反例):
帮助项目。
只描述功能但不写触发(反例):
创建复杂的多页文档系统。
正确(正例):
分析 Figma 设计文件并生成开发者交接文档。当用户上传 .fig 文件、要求"设计规范"、"组件文档"或"设计到代码交接"时使用。
管理 Linear 项目工作流,包括冲刺规划、任务创建和状态跟踪。当用户提到"sprint"、"Linear 任务"、"项目规划"或要求"创建 tickets"时使用。
PayFlow 端到端客户入职工作流。处理账户创建、支付设置和订阅管理。当用户说"入职新客户"、"设置订阅"或"创建 PayFlow 账户"时使用。
三个正例的共同特点:具体提到产品名和文件类型、包含用户会说的真实短语、明确说明使用场景。
好描述特征
-
具体
-
带用户真实说法
-
写清适用对象/文件类型/场景
-
强调结果价值
-
覆盖不同表述风格(正式、口语、缩写、带错别字等)
9. 写好 SKILL.md 正文
推荐结构
-
标题与目的(说明要解决的问题和适用边界)
-
核心步骤
-
示例
-
错误处理
-
references 链接
写作原则
设定适当的自由度(来自 Skill Authoring Best Practices)
Skill 不是越严格越好,需要根据任务特性设定合适的自由度级别:
| 自由度 | 形式 | 适用场景 |
|---|---|---|
| 高自由度 | 纯文本指令 | 多种方法均可行、依上下文决策(如代码审查流程) |
| 中自由度 | 伪代码或带参数的脚本 | 有首选模式但可接受变化 |
| 低自由度 | 无参或极少参数的特定脚本 | 脆弱、易出错的操作,需精确步骤(如数据库迁移) |
原文用类比说明:窄桥靠近悬崖处需要护栏和精确指示,开阔地带只需大方向。
解释为什么,比堆 MUST 更有效(来自 skill-creator)
如果你发现自己不断写 ALWAYS、NEVER,这通常是黄色信号。更好的方式是说明:
-
为什么这一步重要
-
错过会造成什么后果
-
在什么场景下它最关键
模型能理解意图与因果,不只是机械照做。
用示例约束输出
对于格式要求、命名规则、报告结构,给示例比纯抽象规则更稳定。适合的场景:
-
commit message 格式
-
报告结构
-
文件命名
-
表格格式
-
输出 JSON / Markdown 模板
保持通用性,避免过拟合
Skill 写作阶段很容易被几个测试样例"绑架"。如果 Skill 只对反复测试的几个案例有效,那它几乎没有价值。
-
不要为了通过某一条 eval 加入过窄规则
-
观察失败背后的共性,而不是给单一问题打补丁
-
优先抽象成可迁移的原则、脚本或模式
最佳实践
-
指令要具体、可执行
-
关键校验前置
-
常见报错给出明确解决方案
-
长说明放
references/ -
确定性验证优先脚本化
-
用祈使句,步骤明确
多域技能按变体组织
如果一个 Skill 覆盖多个云、多种框架或多个场景,不要把所有细节揉在一个长文里。更好的方式:
-
主
SKILL.md中做选择逻辑 -
再指向具体变体文档,如
aws.md、gcp.md、azure.md
需要避免的反模式(来自 Skill Authoring Best Practices)
-
使用 Windows 风格路径:始终用正斜杠,
scripts/helper.py而非scripts\helper.py -
引用嵌套过深:所有 reference 文件应从 SKILL.md 直接链接(一级引用),避免链式引用
-
包含时效信息:不要在 Skill 中写入日期或随时间变化的信息;遗留模式用
<details>折叠标记 -
术语不一致:选定一个术语(如统一用"API endpoint")贯穿全文,不要混用同义词
-
提供过多选项:除非必要,给出默认方案和一个逃生舱口,而非多个并列选择
10. 脚本化重复工作
如果多个测试用例里模型都在重复写类似的辅助代码,说明这些动作应该被 skill 内置到 scripts/ 里。脚本化沉淀的三层收益:
-
减少重复劳动
-
提高稳定性
-
降低 token 与执行波动
11. 测试与迭代
11.1 三种测试层级
-
Claude.ai 手工测试
-
Claude Code 脚本测试
-
API 程序化测试
官方建议: 先在单个具有挑战性的任务上反复迭代直到 Claude 成功,再将成功方案提炼成 Skill,然后扩展到多个测试用例。
跨模型测试(来自 Skill Authoring Best Practices): 分别用 Haiku(检查指令是否足够详细)、Sonnet(检查是否清晰高效)、Opus(检查是否过度解释)测试同一个 Skill。
11.2 测试提示词设计
好的 eval prompt 应该具体、有上下文、有细节、接近真实输入。包含文件名、路径、业务背景、字段名、语气差异、口语缩写等。
坏例子:"Format this data"、"Create a chart"
好例子:包含具体文件、格式要求、业务上下文的完整描述。
11.3 三类测试覆盖
-
触发测试 — description 是否能准确触发
-
功能测试 — skill 是否按预期执行
-
性能对比测试 — with-skill 比 baseline 好在哪
11.4 迭代信号
-
欠触发:补关键词和场景说明
-
过触发:缩小范围,增加排除条件
-
执行不稳:补校验、补错误处理、优化步骤说明
-
只看最终输出还不够,要读 transcript — 中间路径的低效、冗余、不稳定会掩盖真正问题
12. 分发与共享
推荐做法:
-
GitHub 公开仓库托管
-
面向人类写 README
-
在 MCP 文档中解释为何要和 skill 搭配
-
提供快速安装指南
对外表达重点:
-
讲结果,不讲内部实现
-
讲"连接能力 + 工作流能力"的组合价值
-
强调节省时间、降低学习成本、提高一致性
13. 五种常见模式
-
顺序式工作流编排
-
多 MCP 协同
-
迭代式精修
-
上下文感知式工具选择
-
领域智能增强
14. 故障排查
上传失败
-
检查
SKILL.md -
检查 YAML 分隔符和缩进
-
检查 skill name 是否合规
不触发 / 过触发
-
优先改
description -
让 Claude 复述触发范围做调试
-
欠触发补真实术语,过触发加限定词
加载了但执行不对
-
压缩说明,突出关键规则
-
把模糊要求改成明确校验条件
-
关键验证脚本化
MCP 调用失败
-
先验证 MCP 本身是否可用
-
检查认证、权限、工具名
-
尝试让 Claude 直接调用 MCP
上下文过大
-
控制
SKILL.md大小 -
把细节移到
references/ -
不要同时开太多 skills
15. 上线前检查清单(来自 Complete Guide)
开始之前
-
已确定 2–3 个具体使用场景
-
已确定所需工具(内置或 MCP)
-
已规划文件夹结构
开发过程中(来自 Complete Guide)
-
文件夹以 kebab-case 命名
-
SKILL.md文件存在(拼写准确,区分大小写) -
YAML frontmatter 有
---分隔符 -
name字段:kebab-case,无空格,无大写字母 -
description包含功能(WHAT)和使用时机(WHEN) -
无 XML 标签(
< >) -
指令清晰且可执行
-
包含错误处理
-
提供了示例
-
引用已清晰链接
上传之前(来自 Complete Guide)
-
已测试在明显任务上的触发
-
已测试在换句话请求上的触发
-
已验证不会在无关话题上触发
-
功能测试通过
-
工具集成正常(如适用)
-
已压缩为 .zip 文件
上传之后
-
在真实对话中测试
-
监控触发不足/过度触发情况
-
收集用户反馈
-
迭代 description 和指令
-
在 metadata 中更新版本号
16. 可复用模板
1 |
|
17. 常见误区
误区 1:为少量例子过拟合
后果:当前几个样例看起来更顺,但泛化能力更差。抽象共性,而不是打局部补丁。
误区 2:把 description 写得太保守
后果:Skill 明明该触发,却始终没有被 consult。当前模型倾向 undertrigger,description 应适度主动。
误区 3:把重复劳动留给模型临场发挥
后果:每次都重新造轮子,成本高且不稳定。应沉淀到 scripts/。
误区 4:指令模糊,期待模型自行补全
后果:输出不稳定、不可预期。用具体示例和校验条件替代模糊描述。
18. 延伸阅读
-
The Complete Guide to Building Skills for Claude — Anthropic 官方 Skill 构建完整指南(结构规范、YAML 规范、分发与故障排查)
-
Skill Authoring Best Practices — Anthropic 官方 Skill 写作最佳实践(自由度设定、反模式识别、跨模型测试)
-
anthropics/skills— GitHub 开源仓库,包含 skill-creator 等官方 Skill 示例



