跳转至

Skill 设计模式

Ch07.002 Skill 设计模式

📊 Level ⭐⭐ | 25.5KB | entities/skill-design-patterns.md

Overview

从 7 个顶级 Skill 仓库(OpenAI/anthropic/Google Labs/Dean Peters/Trail of Bits)中提炼出的 5 种核心设计模式 + 1 种特殊模式。为 Agent Skill 开发提供系统性框架选择指南,告别"怎么写都行"的随意性。 核心价值: Skill 本质是"知识注入"——不生成新工具,而是把指令文本注入 LLM 上下文,让 LLM 用已有工具执行指令。模式选择决定了知识如何组织、触发条件如何声明、执行流程如何控制。

5 种核心设计模式

模式 1:线性流程(Linear)

适用: 有明确步骤的操作(部署、安装、迁移) 结构: Prerequisites → Quick Start(Step 1→2→3)→ Fallback → Troubleshooting 代表案例: vercel-deploy(77 行) 关键技巧:

  • 安全默认值:"Always deploy as preview, not production"
  • 具体命令:每步给出可直接执行的 bash 命令
  • 超时提示:"Use a 10 minute (600000ms) timeout"
  • 降级方案:CLI 失败有 Fallback 脚本
  • 负面指令:"Do not curl the deployed URL to verify"

模式 2:决策树 + 按需加载(Decision Tree)

适用: 大型平台选型、产品导航、问题诊断 结构: Authentication → Quick Decision Trees(按用户意图分类)→ Product Index 代表案例: cloudflare-deploy(224 行)、cloudflare(211 行,导航型) 关键技巧:

  • 用户意图分类:"I need to run code" 而非 "Compute products"
  • 树形导航:├─ 边缘无服务器函数 → workers/
  • 渐进式披露:主文件 7KB,references/ 按需展开到几十万字
  • 产品索引表:Product → Reference 映射表 进阶: 导航型(只做选型)和操作型(包含认证+命令+故障排除)可拆分为两个 Skill。

模式 3:循环迭代(Iterative Loop)

适用: TDD、代码审查、设计评审等反复执行"做→验证→改进"的流程 结构: Red-Green-Refactor 循环 + 借口反驳表 + 验证清单 代表案例: test-driven-development(371 行,obra/superpowers) 关键技巧:

  • 强硬语气:"Delete it. Start over." 提高 LLM 遵从率
  • Good/Bad 对比:用 <Good><Bad> 标签包裹代码示例
  • 借口反驳表:预判 LLM 的 12 种偷懒借口并逐一反驳
  • 验证清单:8 项 checklist 作为循环退出条件
  • 人类兜底:"ask your human partner"

模式 4:接力棒循环(Baton / Cross-Session Persistence)

适用: 跨多个 session 持续推进的长期项目(天~周级别) 结构: 6 步执行协议(读接力棒→查阅上下文→执行→集成→更新文档→写下一个接力棒) 代表案例: stitch-loop(203 行,google-labs-code) 关键技巧:

  • 文件即状态:next-prompt.md 作为接力棒,LLM 不需记住"上次做到哪"
  • 续命机制:Step 6 标记为 Critical + MUST,忘了写接力棒循环就断了
  • 编排无关:CI/CD、人在回路、Agent 链都能驱动 与模式 3 的核心区别: 状态存储在外部文件系统而非 LLM 对话上下文,支持跨 session。 | 维度 | 循环迭代(TDD) | 接力棒循环 | |------|----------------|-----------| | 状态存储 | LLM 对话上下文 | 外部文件系统 | | 跨 session | ❌ | ✅ | | 循环退出 | Checklist 全部打勾 | 路线图清空 | | 适用时长 | 分钟~小时 | 天~周 |

模式 5:多阶段 + 检查点 + Skill 编排(Multi-Phase)

适用: 复杂的多周流程,有明确阶段划分和 Go/No-Go 决策点 结构: Phase(Activities → Outputs → Decision Point)× N 阶段 + Complete Workflow + Common Pitfalls 代表案例: discovery-process(502 行,deanpeters/Product-Manager-Skills) 关键技巧:

  • 统一阶段模板:每个 Phase 都有 Activities → Outputs → Decision Point
  • 决策检查点:"达到饱和了吗?YES → 下一阶段,NO → +1 周"
  • Skill 编排:调度 10+ 个子 Skill 完成各阶段(编排器模式)
  • 时间影响:每个 NO 路径标注 "+2-3 days""+1 week"

特殊模式:思维框架(Thinking Framework)

适用: 安全审计、代码审查、架构分析等需要深度思考而非快速执行的场景 代表案例: audit-context-building(302 行,trailofbits/skills) 核心定位: 控制 LLM"怎么想"而非"做什么"——不生成工具调用,而是建立分析框架。 关键技巧:

  • 思维工具:第一性原理、5 Why、5 How 等分析框架
  • 量化阈值:"每个函数最少 3 个不变量、5 个假设" 强制达到足够分析深度
  • 非目标约束:"不要识别漏洞、不要提出修复" 先理解再判断
  • 反幻觉规则:"Never reshape evidence to fit earlier assumptions"

Anthropic 14 种实现模式(5 大类)

详细解读参见 Anthropic 官方 14 种设计模式

发现与选择(2 模式)

模式 核心问题 关键做法
激活元数据模式 Skill 怎么被选中 description 包含:做什么 + 何时触发 + 关键词
排除条款模式 何时不触发 说明不适用场景,避免与其他 Skill 冲突

上下文经济(2 模式)

模式 核心问题 关键做法
上下文预算模式 如何节省 token 每段话都要配得上占用的 token,删掉不影响理解就不写
渐进式披露模式 主文件太长怎么办 主文件 ≤500 行,详细内容拆分到 references/ 按需加载

指令校准(4 模式)

模式 核心问题 关键做法
控制调优模式 指令该写多细 根据任务脆弱程度决定:开放任务用「用你的判断」,高风险用精确脚本
解释原因模式 为何要遵守规则 先说规则,再说原因,让 LLM 能自主判断边界情况
模板脚手架模式 输出格式不稳定 给带占位符的模板(严格/灵活),模板定结构,示例定风格
已知陷阱模式 边缘情况处理 列出常见失败情况和已知的坑,来自踩过的实际经验

工作流控制(3 模式)

模式 核心问题 关键做法
执行清单模式 流程步骤被跳过 可勾选的 checklist,未完成项始终可见
自纠正循环模式 生成结果无人检查 生成 → 验证 → 失败则修复 → 再验证,直到通过
计划-验证-执行模式 批量/高风险操作失控 计划 → 验证 → 通过后才执行,所有验证在副作用之前

可执行代码(2 模式)

模式 核心问题 关键做法
实用工具包模式 确定性逻辑重复消耗推理资源 scripts/ 里的脚本自己处理常见错误,不把问题抛回给 LLM
自主校准模式 Skill 权限过度 allowed-tools 只声明必需的最少工具

Anthropic 14 模式与 5+1 框架的对应关系

Anthropic 分类 对应模式 核心贡献
发现与选择 模式 1 前置 description 决定 Skill 是否被加载
上下文经济 模式 2 按需加载 渐进式披露、主文件<500行
指令校准 全部模式 控制调优、解释原因、模板脚手架
工作流控制 模式 3/5 执行清单、自纠正循环、计划-验证-执行
可执行代码 全部模式 scripts/ 工具包、allowed-tools 权限控制
说明: Anthropic 的 14 种模式是更细粒度的实现技巧,而 5+1 框架是更高层次的结构选择。两者不是替代关系,而是不同抽象级别的工具。

通用写作技巧

防止 LLM 偷懒的 4 种武器

武器 原理 示例
强硬语气 命令式语气遵从率更高 TDD:"Delete it. Start over."
借口反驳表 预判自我合理化路径并堵死 TDD:12 种借口 + 反驳
量化阈值 硬性最低标准 审计:"最少 3 个不变量、5 个假设"
负面指令 明确禁止"不要做 X" vercel-deploy:"Do not curl the URL"

教学的 3 种有效方式

方式 原理 示例
Good/Bad 对比 对比学习效果最好 TDD:<Good> vs <Bad> 代码示例
具体命令 LLM 擅长执行具体指令 vercel-deploy:每步都有 bash 命令
完整示例 展示期望的输出格式 审计:引用 FUNCTION_MICRO_ANALYSIS_EXAMPLE.md

知识组织的 3 层架构

层级 Token 预算 内容
Frontmatter ~100 tokens name + description
主文件 2K-5K tokens 核心指令、决策树、流程步骤
references/ 1K-3K tokens/个 按需加载的详细文档
总上下文占用 <10K tokens 主文件 + 1-2 个参考文档

模式选择决策树

你的 Skill 需要做什么?
├─ 执行一个有明确步骤的操作
│  └─ → 模式 1:线性流程
├─ 在大量选项中帮用户选择正确的方向
│  └─ → 模式 2:决策树 + 按需加载
├─ 在单次会话中反复执行"做→验证→改进"
│  └─ → 模式 3:循环迭代
├─ 跨多个 session 持续推进一个长期项目
│  └─ → 模式 4:接力棒循环
├─ 跨越多天/多周,有阶段划分和 Go/No-Go 决策
│  └─ → 模式 5:多阶段 + 检查点
└─ 需要 LLM 进行深度分析而非快速执行
   └─ → 特殊模式:思维框架

参考 Skill 仓库

仓库 地址 特点
anthropics/skills github.com/anthropics/skills 官方模板和规范
openai/skills github.com/openai/skills Codex 官方 Skill 目录
obra/superpowers github.com/obra/superpowers 14 个工作流型 Skill
google-labs-code/stitch-skills github.com/google-labs-code/stitch-skills 设计到代码的 Skill
deanpeters/Product-Manager-Skills github.com/deanpeters/Product-Manager-Skills 40+ 产品管理 Skill
trailofbits/skills github.com/trailofbits/skills 安全审计 Skill
openclaw/clawhub github.com/openclaw/clawhub Skill 注册中心
VoltAgent/awesome-agent-skills github.com/VoltAgent/awesome-agent-skills 500+ Skill 索引

子页面

  • — 5 大类 14 种模式详解与写作技巧

深度分析

模式演进的内在逻辑

从 7 个顶级仓库提炼出的 5+1 种模式,并非随机排列,而是沿着控制粒度时间跨度两个维度呈阶梯式分布。 控制粒度从「告诉 LLM 做什么」到「告诉 LLM 怎么想」:

  • 模式 1-5 都在描述行为(做什么、选哪个、走哪步)
  • 特殊模式(思维框架)描述的是思维方式(怎么分析、怎么验证) 时间跨度从瞬时到持久:

  • 线性流程:秒~分钟级别

  • 循环迭代:分钟~小时级别(单 session)
  • 接力棒循环:天~周级别(跨 session)
  • 多阶段检查点:周~月级别 这意味着:模式选择的核心依据不是「任务难度」,而是「需要在多长时间跨度内维持一致性」。

为何「线性流程」是入门首选

5 种模式里,线性流程是被引用最广的起点(vercel-deploy 仅 77 行),原因有三: 1. 失败成本低:每步有显式输出,错了容易定位 2. 上下文占用低:不需要预设循环退出条件或状态文件 3. 调试友好:TDD、审查等循环模式出问题时,往往先简化为线性步骤来隔离 bug 但线性流程的局限也最明显:它无法处理「需要根据结果调整下一步」的场景——那是循环迭代的领地。

循环迭代与接力棒的本质区别

两者都涉及重复,但核心差异不在「重复」本身,而在状态存储位置: | | 循环迭代(模式 3) | 接力棒循环(模式 4) | |--|---|---| | 状态存储 | LLM 对话上下文 | 外部文件系统 | | 适用场景 | 单次会话内的收敛 | 跨 session 的持久推进 | | 退出条件 | checklist 全部打勾 | 路线图清空 | | 本质 | 让 LLM 记住「这次做到哪」 | 让 LLM 继承「上次做到哪」 | 一个关键推论:如果任务本身在单次对话内就能完成,用接力棒就是过度设计;但如果任务会被人为中断(用户关闭窗口、换设备),接力棒就是唯一可靠的选择。

模式 2 的两个陷阱

决策树 + 按需加载(模式 2)是,看起来简单但实际上最容易踩坑的模式: 陷阱一:用户意图分类不准确 cloudflare 的导航型 Skill 把「用户意图」作为顶级分类键(「I need to run code」),这要求对用户语言有高度敏感——同一需求可能有十几种表达方式。如果分类颗粒度不够,LLM 会选错分支。 陷阱二:渐进式披露过头 主文件 7KB、references/ 按需展开到几十万字的设计,依赖 LLM 能准确判断「该加载哪个文件」。一旦判断错误,LLM 会在错误的上下文中工作,输出质量不可预测。 解决方式在 Anthropic 的渐进式披露模式里:主文件尽量控制在 500 行以内,给长参考文件加 TOC,这样即使读取被截断,LLM 也能知道整体结构。

Anthropic 14 模式的降维映射

Anthropic 的 14 种模式可以映射到本文的 5+1 框架: | Anthropic 分类 | 对应模式 | 核心贡献 | |---|---|---| | 发现与选择 | 模式 1 前置 | description 决定 Skill 是否被加载 | | 上下文经济 | 模式 2 按需加载 | 渐进式披露、主文件<500行 | | 指令校准 | 全部模式 | 控制调优、解释原因、模板脚手架 | | 工作流控制 | 模式 3/5 | 执行清单、自纠正循环、计划-验证-执行 | | 可执行代码 | 全部模式 | scripts/ 工具包、allowed-tools 权限控制 | 这说明:Anthropic 的 14 种模式是更细粒度的实现技巧,而 5+1 框架是更高层次的结构选择。两者不是替代关系,而是不同抽象级别的工具。

模式与上下文字节数的关系

知识组织的 3 层架构(Frontmatter ~100、主文件 2K-5K、references/ 每个 1K-3K、总上下文 <10K)背后有一个隐含约束: 当主文件超过 300 行时,就应该考虑拆分了(Anthropic 的渐进式披露模式建议)。这与「主文件 2K-5K tokens」的预算并不矛盾——300 行 Markdown 约等于 3K-4K tokens,正好在上限附近。 实际编写中,一个 Skill 好不好,从上下文占用就能大致判断:超过 15K tokens 的 Skill,LLM 的遵从率会显著下降。

控制粒度与 Skill 类型的关系

Skill 通常分为两类: 1. 任务型技能:对应整套步骤化流程,用户通过 /skill-name 直接触发,通常设置 disable-model-invocation: true 2. 参考型技能:更像背景知识,用户不可直接调用,Claude 在相关场景下自动应用 | 类型 | 典型模式 | description 要求 | |------|---------|-----------------| | 任务型 | 模式 1/3/4/5 | 清晰的动作 + 触发时机 + 关键词 | | 参考型 | 模式 2/特殊模式 | 领域边界 + 适用场景 + 排除条款 | 参考型技能对 description 的要求反而更高——因为它不能被直接调用,全靠 description 里的触发词来决定何时加载。

实践启示

写 Skill 前的第一问

在动笔之前,先问自己一个问题:这个 Skill 解决的是「不知道怎么做」,还是「容易做错」?

  • 如果是「不知道怎么做」→ 优先用模式 1 或 2(线性流程或决策树)
  • 如果是「容易做错」→ 优先用模式 3 或特殊模式(循环迭代或思维框架) 这个判断决定了 Skill 的整体基调:前者偏向指引,后者偏向约束。

从最小可用开始

快速上手模板(线性模式)只需 4 个 Section:Prerequisites → Steps → Troubleshooting。不用一上来就设计循环迭代或接力棒——先用最少的结构验证需求是否真实存在。 如果同一个 Skill 被反复使用,而且每次都是「做一半、中断、继续做」,那时再引入模式 4(接力棒循环)。 如果发现每次都在重复相同的修正(比如总是漏掉某个验证步骤),那时再引入模式 3(循环迭代)的退出清单。

description 的三个必含要素

Anthropic 的 Activation Metadata 模式指出:一个好的 description 必须同时包含: 1. 做什么(功能) 2. 什么时候用(触发场景) 3. 遇到哪些词要触发(关键词) 缺任何一个,Skill 被加载的概率就会下降。尤其是在 skill 库较大的情况下,description 决定了「这个 Skill 会不会被用到」。

防止 LLM 偷懒的四种武器可以组合使用

强硬语气、借口反驳表、量化阈值、负面指令,这四种武器并非孤立,而是可以叠加:

  • 在技能开头用强硬语气(「Delete it. Start over.」)
  • 在循环体内用借口反驳表堵死逃避路径
  • 在验证清单里用量化阈值(最少 3 个不变量、5 个假设)
  • 在边界场景用负面指令(「Do not curl the URL」) 组合效果远大于单用其一——因为 LLM 的偷懒路径是多元的,单一武器无法覆盖所有情况。

渐进式披露的实施检查

如果 SKILL.md 超过 300 行,按渐进式披露原则应该拆分。检查步骤: 1. 主文件是否在 500 行以内? 2. 参考文档是否有 TOC(目录)? 3. scripts/ 里的脚本是否不会加载到上下文? 4. 拆分后主文件是否仍然可以独立提供核心价值? 如果第四点不满足(即拆开后每个文件都没法单独提供价值),说明拆分粒度有问题,需要重新设计结构。

模式选择的修正时机

模式选择不是一锤子买卖。随着 Skill 使用的深入,需要根据实际情况修正: | 信号 | 修正方向 | |------|---------| | 每次都要手动提醒 LLM 某个步骤 | 线性流程 → 加入执行清单(模式 10) | | LLM 经常跳过验证步骤 | 线性流程 → 自纠正循环(模式 11) | | 任务需要跨越多次会话 | → 引入接力棒循环(模式 4) | | 状态文件越来越复杂 | 接力棒 → 考虑多阶段检查点(模式 5) | | LLM 在边界情况总是判断错误 | → 引入思维框架(特殊模式) | 不要试图一步到位设计最复杂的模式。从最小可用开始,根据实际使用中的失败模式逐步迭代。

工具包模式的价值实现

实用工具包模式(Anthropic 模式 13)的核心价值不在「写脚本」,而在「让确定性的事情不要消耗 LLM 的推理资源」。 实施检查:

  • 脚本是否能自己处理常见错误,而不是把问题抛回给 LLM?
  • 常量是否有注释说明用途(避免魔法数字)?
  • 脚本在不同系统环境下是否能正常工作(路径、权限)? 如果一个脚本每次运行都要 LLM 盯着看日志,它就不是一个合格的工具包。

指令校准的灵活性判断

控制调优模式(Anthropic 模式 5)的核心问题是:这里能接受多大的偏差?

  • 高自由度(文本指令,如「用你的判断」):适合开放型任务,如代码审查
  • 中自由度(伪代码、参数化步骤):适合有流程但需灵活调整的任务,如部署
  • 低自由度(精确脚本、强约束,如「不要修改」):适合高风险操作,如数据库迁移 很多人会倾向于「写死一点更安全」,但其实只是把失败方式换了一种:从「做错」,变成「做不了」。

解释原因 vs 直接命令的选择

解释原因模式(Anthropic 模式 6)的核心是:先说规则,再说明原因。 比如:「使用构造器注入。字段注入会破坏可测试性,因为需要依赖 Spring 上下文来模拟字段。」就比:「必须使用构造器注入,绝不使用字段注入。」更稳一些。 但不是所有场景都适合解释原因

  • 带原因的写法更适合需要 LLM 自己做判断的地方
  • 对于真正「不能出错」的低自由度场景,直接命令式反而更合适

相关实体