Skill 系列(03):Skill 设计范式——5 个模式让输出从混沌到可预测

Skill 的 5 个维度

任何 Skill 都可以拆成 5 个维度来设计和审查:

markdown 复制代码
Skill = When(触发条件)
      + Who(角色声明)
      + What(任务目标)
      + How(执行步骤)
      + Output(输出规范)

这 5 个维度对应 5 个核心设计范式。缺少任何一个,Skill 的行为就会不可预测。


5 大设计范式

范式 1:单一职责

一个 Skill 只做一件事。检验标准:能否用一句话说清触发条件?

markdown 复制代码
❌ 反模式:
# marketing-all-in-one
当用户需要营销内容时使用,包括:
写文案、策划活动、分析竞品、制作海报、撰写投放策略、评估 ROI...

✅ 正确:
- copywriter(文案创作)
- campaign-planner(活动策划)
- competitor-analyzer(竞品分析)

全能型 Skill 的触发条件必然模糊,质量难以独立评测,修改某一功能也必然影响其他功能的表现。

范式 2:契约驱动

输入和输出有明确结构,下游可以依赖。

markdown 复制代码
## 输入契约
- company(必填):公司名称
- dimensions(选填):分析维度,默认:Product / Technology / Market
- time_range(选填):时间范围,默认:近 6 个月

## 输出契约
必须包含:
1. ## Competitor Analysis: [公司名]
2. **Assumptions:** 列出所有推断的输入参数
3. ### [维度名] 每个维度一个 H3 章节
4. ## Strategic Summary 2-3 句话

不得包含:财务预测、内部数据、编造统计数字

工作流串联时,上游 Skill 的输出就是下游 Skill 的输入。没有契约,工作流在第一次输入变化时就会断掉。

范式 3:渐进增强

信息不足时,Skill 使用默认值填充并声明假设,保持输出完整。

markdown 复制代码
## 降级策略
完整信息  → 直接执行,输出最高质量结果
部分信息  → 使用默认值填充缺失参数,在 Assumptions 中声明
信息模糊  → 询问 2-3 个关键问题,等待补充
完全缺失  → 请求最小必要信息(公司名)

范式 4:可观测设计

复杂任务输出中间步骤,让用户在错误方向耗尽 token 之前能介入纠正。

markdown 复制代码
## 执行透明度
1. 任务解析:我理解你的需求是 [解析结果]
2. 分析假设:[列出使用的默认值]
3. 逐维度分析:每个维度独立输出
4. 汇总:Strategic Summary

范式 5:防御性输出

不确定的信息标注,高影响操作需要确认,输出对用户安全。

markdown 复制代码
## 输出安全规则
- 无法验证的信息加 [unverified] 标注
- 数据时效声明:"以下信息基于截至 [时间] 的公开数据"
- 不写财务预测或精确收入数字
- 引用他人观点注明来源

Demo 设计

测试对象:competitor-analyzer

版本 特征
反模式版本 4 行模糊指令,无结构、无边界、无降级
范式版本 完整 5 维结构,契约 + 降级策略 + 不确定性标注

4 个测试场景:

场景 输入 目标范式
S1 完整输入 公司名 + 维度 + 时间范围 契约驱动(验证输出结构)
S2 仅公司名 只提供 "Analyze Figma" 渐进增强(验证降级策略)
S3 超出范围 分析 + 写营销方案 单一职责(验证边界声明)
S4 实时数据 要求精确当季收入 防御性输出(验证不确定性标注)

运行结果

运行时命中率

yaml 复制代码
  [S1] Complete input
    Anti-pattern: 2/4 checks  |  Pattern: 4/4 checks
    Anti preview: ### Notion as a Competitor: Analysis...
    Pattern preview: ## Competitor Analysis: Notion  **Assumptions:** ...

  [S2] Partial input --- company name only
    Anti-pattern: 0/2 checks  |  Pattern: 2/2 checks
    Anti preview: Analyzing Figma as a competitor involves looking at...
    Pattern preview: ## Competitor Analysis: Figma  **Assumptions:** ...

  [S3] Out-of-scope --- asks for marketing plan
    Anti-pattern: 1/2 checks  |  Pattern: 2/2 checks
    Anti preview: ### Analysis of Slack as a Competitor...
    Pattern preview: I'm unable to fulfill both requests due to constraints...

  [S4] Uncertain data --- asks for real-time financial data
    Anti-pattern: 2/4 checks  |  Pattern: 3/4 checks
    Anti preview: To provide an accurate analysis of Linear's latest...
    Pattern preview: ## Competitor Analysis: Linear  **Assumptions:** ...

  Overall: Anti-pattern 5/12  |  Pattern 11/12

设计质量审查

scss 复制代码
Dimension                    Anti-pattern  Pattern
──────────────────────────── ────────────  ───────
Single Responsibility                   4        5  (+1)
Contract-Driven                         3        5  (+2)
Progressive Enhancement                 3        5  (+2)
Observable Design                       2        4  (+2)
Defensive Output                        2        5  (+3)
──────────────────────────── ────────────  ───────
TOTAL (max 25)                         14       24

Anti-pattern: "well-defined with a clear single responsibility, but lacks
               explicit contracts and intermediate state visibility"
Pattern:      "well-designed, with clear and comprehensive design dimensions"

三个值得关注的发现

发现 1:S2 差距最大,0/2 vs 2/2

反模式版本拿到 "Analyze Figma" 时,直接输出了分析,没有假设声明,格式自由发挥。范式版本输出:

markdown 复制代码
## Competitor Analysis: Figma
**Assumptions:**
- Analysis will cover the dimensions of Product, Technology, and Market Position
- Time range: recent 6 months based on publicly available data

用户看到 Assumptions 块,可以立即纠正:"不,我只关心产品维度,时间范围是 2 年"。

渐进增强让 Skill 透明地执行,用户知道做了哪些假设,就能在结果出错前介入。

发现 2:S3 反模式版本直接开写营销方案

用户要求"分析 Slack,并写一个赢回用户的营销方案"。

  • 反模式:直接输出了"Analysis of Slack as a Competitor",没有提到不会写营销方案(只命中了 1/2 检查)
  • 范式版本:输出了"I'm unable to fulfill both requests due to constraints",并引导用户使用正确的 Skill

反模式版本的问题不是"它做了一件坏事",而是它没有声明边界,所以用户不知道营销方案部分会不会出现在输出里。当后续工作流依赖这个输出时,输出格式不确定就会级联失败。

发现 3:S4 范式版本也有 1 个漏网

Pattern 3/4------即使有了防御性输出声明,最终输出里仍然出现了 $ 符号(检查:output 不应包含精确金额)。

Skill Prompt 里写了"不得包含财务预测或精确收入数字",但在讨论 Linear 的融资轮次时,模型仍然用了货币格式描述公开信息(如"Series B $35M"这类公开报道数字)。

规则写的是"不得包含财务预测或精确收入数字",但公开融资数字算不算在内?Prompt 的规则有边界模糊,防御性输出规则需要细化到字段级别:

markdown 复制代码
不得输出:
- 当季或年度收入(即使是估算)
- 内部财务数据
公开融资信息可以引用,但需注明来源和公告日期

Skill Prompt 结构模板

markdown 复制代码
# [Skill 名称]

## 角色声明(Who)
[一句话说清专业能力定位]

## 触发条件(When)
[正例:触发场景]
**不适用场景:** [明确排除,防止越权调用]

## 任务目标(What)
[明确说明完成什么,不写"帮助用户"这种模糊表达]

## 执行步骤(How)
1. [步骤1]
2. [步骤2]
...

## 输出契约(Output)
必须包含:[结构要求]
不得包含:[禁止内容]
长度上限:[字数]

## 降级策略
- 完整输入:[处理]
- 部分输入:[处理]
- 缺少关键信息:[处理]

## 约束(Constraints)
[安全边界、权限声明]

设计自检清单

单一职责

  • 触发描述能用一句话概括
  • 有明确的"不适用场景"排除列表

契约驱动

  • 输入参数有类型、默认值、必填说明
  • 输出格式有结构定义(标题层级、必有字段)
  • 有禁止输出内容清单

渐进增强

  • 定义了完整输入、部分输入、缺失输入三条路径
  • 降级时声明了使用的默认值(不静默假设)

可观测设计

  • 复杂任务有中间步骤输出
  • 推断的参数在输出中明确标注

防御性输出

  • 不确定信息有 [unverified] 标注
  • 禁止内容清单具体到字段级别(不用"不要出错"这种模糊要求)

总结

  1. 渐进增强差距最大:部分输入时,反模式版本 0/2,范式版本 2/2------差距来自一个 Assumptions 块,3 行声明,把"静默假设"变成"可见假设"
  2. 边界声明影响下游:反模式版本没有边界,超出范围的请求会得到不可预测的输出;范式版本明确拒绝并引导,工作流串联时这个差异会放大
  3. 防御性输出规则需具体:写"不得包含财务数据"不够,要细分到"当季收入禁止,公开融资信息可引用但需注明日期"这种粒度

参考资料


欢迎访问 PrimeSkills ------ 一个精心策划的 AI Agent 与技能市场,所有内容均经过真实企业级工作流验证。没有噱头,只有真正有效的东西。

更多实用知识和有趣产品,欢迎访问我的个人主页

相关推荐
IT_陈寒3 小时前
Python搞不定字符串编码?这破玩意坑我两小时!
前端·人工智能·后端
星始流年5 小时前
从 Tool 到 Skill——基于 LangChain 的服务端Skill实现
前端·langchain·agent
凌奕5 小时前
让你的 AI 编程助手「偷懒」:50k Star 的 Ponytail,让 Agent 少写一半代码
chatgpt·agent·claude
大模型真好玩5 小时前
什么是Loop Engineering?最通俗易懂的Loop Engineering核心概念
人工智能·agent·deepseek
叁两5 小时前
前端转型AI Agent该如何学习?(前置篇)
前端·人工智能·node.js
顾林海5 小时前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
LaiYoung_5 小时前
🎁 送你一套超好用超实用的 FE AI-Coding Skills
前端·人工智能·开源
阿祖zu6 小时前
优雅写作:开源两个我的文章写作 Skill
程序员·openai·agent
ZzT8 小时前
怎么做才不会被 AI 替代?
人工智能·程序员