本文为 Skill 设计与开发的一站式最佳实践指南,可助力你:
一个 Skill 是一份清晰、严谨、可执行的指令文档,用于明确告诉模型——在什么条件下(When),按照哪些步骤(How),产出什么结果(What)。
在编写 Skill 之前,建议先了解以下几个常见误区。这些问题往往会直接导致 Skill 难以被正确触发,或在执行过程中表现不稳定。
SKILL.md 文件的内容应使用模型可解析的结构化语言,明确约束其行为边界,并精确描述何时使用(When)、如何执行(How)、输出结果(What)。提示
模型的上下文窗口是有限且宝贵的公共资源。每一个被加载的 Skill 都在竞争有限的上下文资源。因此,Skill 文档应以最小必要信息为目标,避免冗余解释与不必要的背景铺垫。
以下标准是构建高命中率、高稳定性 Skill 的基础。可将其作为设计与评审 Skill 时的检查清单。
Skill 的元数据(name 和 description)是模型发现和识别 Skill 的入口,其设计直接影响触发准确率。
|
元数据字段 |
规范 |
示例 |
|---|---|---|
|
name |
用于识别 Skill。应遵循以下规范:
|
✅ 好的例子:
❌ 坏的例子:
|
|
description |
用于描述 Skill 的能力及适用场景。应遵循以下规范:
|
✅ 好的例子: ❌ 坏的例子:
|
根据任务复杂度与容错要求,合理控制对模型的约束强度。
|
自由度等级 |
适用场景 |
指导方式 |
示例 |
|---|---|---|---|
|
高 |
|
提供启发式策略(给原则) |
代码审查:先看安全性,再看可读性
|
|
中 |
|
提供模板/伪代码(给框架) |
报告生成:按"摘要-分析-建议"结构
|
|
低 |
|
提供可执行的脚本(给代码) |
数据库迁移:按固定顺序执行脚本
|
|
标准 |
描述 |
示例 |
|---|---|---|
|
边界明确 |
模型最容易犯的错误不是“不知道怎么做”,而是“不知道什么时候该做”。Skill 的触发必须有明确的正向条件和负向条件,否则命中率会很低。 |
✅ 边界清晰:
❌ 边界不清晰:
|
|
输入输出结构化 |
与模型沟通时,需要定义双方都能理解的“共同语言”,避免模糊描述。推荐用类似函数签名的方式明确 Input 和 Output,保证可解析性。 |
✅ 结构化定义:
❌ 模糊描述: |
|
步骤明确、可执行 |
Skill 的核心是“步骤”,必须是指令式、具体动作,而不是概括性描述,确保模型可以按步骤执行。 |
✅ 指令式步骤:
❌ 描述性语言: |
|
失败策略完备 |
模型在失败时容易自由发挥,可能产生不可预期的行为。必须明确定义“失败路径”,告诉模型在不同失败情况下如何处理。 |
失败策略示例:
|
|
职责绝对单一 |
每个 Skill 只做一件事,对应一个核心动作动词。避免把多个功能捆绑在一个 Skill 中,否则复杂性和不确定性会增加,模型难以准确理解。 |
✅ 单一职责:
❌ 功能捆绑: |
为了确保 Skill 在长期运行中保持稳定、易用且可持续拓展,需要从信息结构、工作流设计和脚本可靠性三个维度进行规划。
SKILL.md 应当作为 Skill 的入口和导航,而不是一个包罗万象的大文件。详细的参考资料、示例、脚本或文档应拆分成独立文件,从而减轻模型初次加载的负担,让信息按需流动。
SKILL.md 链接,保持一层引用深度,避免链式引用(A → B → C),防止模型只读取部分内容。SKILL.md 示例:
# SKILL.md
## 基础用法
描述如何触发 CI/CD 流水线:
- 检查 PR 状态
- 执行单元测试
- 更新 PR 测试状态
## 高级功能
详细说明请参见 `ci-advanced-features.md`:
- 并行执行多分支测试
- 条件触发不同类型的测试
- 自定义失败处理策略
## API 参考
所有方法与参数说明请参见 `ci-api-reference.md`:
- startPipeline(prId: string, branch: string)
- getPipelineStatus(pipelineId: string)
- cancelPipeline(pipelineId: string)
对于包含多个步骤、且中间结果会影响最终质量的复杂任务,仅提供最终目标是不够的。必须显式定义工作流和检查清单,引导模型按步骤执行,并在关键节点建立 “验证 → 修正 → 再验证” 的反馈闭环。
工作流负责约束任务执行顺序,检查清单负责追踪任务的执行状态和质量。两者结合可以显著降低遗漏和跑偏的风险。
分析类任务的工作流
即使不涉及代码,分析类任务同样适合使用工作流。 检查清单可以帮助模型明确以下信息:当前做到哪一步、是否可以进入下一步。例如:
## 技术方案评估工作流
在开始执行前复制以下清单,并在每一步完成后显式标记状态。
- Step 1:明确业务目标与技术约束(性能、成本、时限)
- Step 2:列出所有可行的技术方案
- Step 3:从复杂度、可维护性、风险角度逐一评估
- Step 4:对关键差异点进行对比分析;(反馈闭环) 若发现关键信息不足,应返回 Step 2 或 Step 3 补充分析
- Step 5:给出结论性建议,并说明取舍理由;(反馈闭环) 若结论无法支撑目标约束,应重新审视 Step 1 的前提条件
代码类任务的工作流
代码类任务往往伴随不可逆或影响范围较大的操作,例如重构、依赖升级或配置变更。通过 “计划 → 验证 → 执行” 模式,可以有效降低误操作风险。例如:
## 依赖版本升级工作流
- Step 1(Plan):
- 识别需要升级的依赖及当前版本
- 阅读目标版本的 Release Notes 与 Breaking Changes
- Step 2(Plan):
- 更新依赖配置文件(如 package.json / go.mod)
- 标注可能受影响的模块
- Step 3(Validate):
- 执行依赖冲突检查与静态构建(运行 dependency_check.sh)
- 确认无版本冲突或构建失败
- (反馈闭环) 若校验失败,必须回退到 Step 2 调整依赖配置
- Step 4(Execute):
- 安装新版本依赖
- 运行完整测试集
- Step 5(Validate):
- 检查核心功能是否受影响
- 对比升级前后的构建与运行结果
- (反馈闭环) 若出现回归问题,应回滚升级并记录风险点
当 Skill 依赖可执行脚本时,脚本的健壮性应始终优先于代码的巧妙性。
Skill 本身不会理解或阅读你的代码逻辑,它只感知输入与输出。一旦脚本行为不可预测,模型就只能猜测,最终导致不稳定或错误的调用结果。因此,脚本必须做到:失败可预期、输出可理解、参数可解释。
显式处理错误,而不是让模型猜
不要将异常直接抛给模型处理。脚本应覆盖常见错误场景,并将技术异常转化为可理解、可决策的输出。
实践要点:
ERROR: Config file not found: ./deploy.yaml
HINT: Please check whether the file path is correct or run init-config.sh to generate a default config.
输出自解释的日志与验证结果
脚本的输出本身就是模型的上下文。一个好的脚本不仅说明发生了什么,还说明为什么会这样,以及接下来可以怎么做。
实践要点:
CHECK FAILED: Node.js version mismatch
- Required: >= 18.0.0
- Detected: 16.14.0
VALID OPTIONS:
1. Upgrade Node.js to a supported version
2. Switch to a compatible build image
避免魔法数字,让参数有来由
脚本中的常量(如 TIMEOUT = 30)如果缺乏解释,模型和人都无法判断它是否合理。任何影响行为的数值,都应该是可解释、可调整的。
实践要点:
TIMEOUT_SECONDS = 30 # Wait up to 30s because service startup usually completes within 10–20s
或在输出中体现:
INFO: Waiting for service to become healthy (timeout: 30s)
Skill 的开发是一个以失败为起点、评测为牵引,持续迭代优化的工程化过程。
评测并非事后的验证环节,而是 Skill 设计的前提;Skill 也非基于假设的规则集合,而是针对已暴露问题的最小化解决方案。
遵循 “评测驱动、失败优先” 的原则,能确保 Skill 在实际使用场景中拥有清晰的能力边界、稳定的运行表现,以及可回归的质量保障体系。
在编写任何 Skill 之前,应先不使用 Skill,直接让模型执行目标任务,作为基线对照。
重点观察并记录以下问题:
这些失败点和不确定行为,本质上就是 Skill 需要解决的真实能力缺口,也是后续评测用例的来源。
明确核心问题后,需优先编写评测用例,而非直接开发 Skill。评测是约束,Skill 是落地实现。脱离评测约束的 Skill,本质上是在放大模型的行为不确定性。
评测的核心作用是约束 Skill 的行为边界,明确以下信息:
推荐做法:
在评测已经存在的前提下,开始编写 Skill。
此阶段不追求覆盖所有情况,而是只编写刚好能够通过当前评测的最小规则集合,重点关注三个要素:
这一阶段的 Skill,是评测结果的直接产物,而非凭经验预判的方案。
当最短成功路径能稳定通过评测后,再逐步扩展 Skill 的适用范围。
完成以下三项核心工作:
核心原则:所有新增规则,均需对应新增或已有评测用例,避免在无评测支撑的情况下将 Skill 复杂化。
Skill 的迭代,需始终与评测结果强绑定,遵循以下规则:
通过持续对比模型在 “无 Skill 基线” 与 “当前 Skill + 评测” 中的表现,可验证该 Skill 是否真正提升了模型执行目标任务的成功率与稳定性。
评测仅能覆盖已知问题,在真实场景中使用 Skill 时,可能会暴露更多新的问题。
在 Skill 实际使用过程中,需持续观察以下情况:
上述这些信号,均需作为新的评测输入,重新进入 Step 2,形成 Skill 迭代的闭环。
在创建和迭代 Skill 的过程中,可以多用 AI。你负责定义问题和验收结果,AI 负责反复试错、总结规律并封装成可复用的 Skill。
让 AI 从真实任务中抽象出创建 Skill 所需的信息,然后创建初版 Skill。
SKILL.md,明确:触发条件(When)、如何执行(How)、输出结果(What)、预设失败策略。skills-creator 正式创建该 Skill 并添加至你的项目。当 Skill 在使用中暴露新问题时,对其进行优化。
SKILL.md,并同时验证:
除了通过 AI 对话创建 Skill 外,你还以手动创建或导入外部 Skill。详细说明参考创建技能。
本表列出了在 Skill 开发中常见的反模式(Anti-Patterns),以及相应的原因、正确示例和错误示例。通过遵循这些规范,可以提升 Skill 的稳定性、可维护性和跨平台兼容性,避免模型误用或运行失败。
该检查清单可作为开发、评审和迭代 Skill 时的快速参考。
|
反模式 |
原因 |
示例 |
|---|---|---|
|
使用 Windows 风格路径 |
跨平台兼容性差,Unix/Linux 系统会报错。 |
✅ 正确: ❌ 错误: |
|
提供过多选择 |
过多选项会令模型困惑,增加决策成本与不确定性。 |
✅ 正确: ❌ 错误: |
|
包含时效性信息 |
信息容易过期,导致 Skill 不可用。 |
✅ 正确: ❌ 错误: |
|
术语不一致 |
增加模型的理解成本,降低 Skill 可用性。 |
✅ 正确: ❌ 错误: |