第 7 课:技能铸造术 — CSO + 心理学 + TDD for Docs

0 阅读10分钟

核心命题: 创建技能就是 TDD — 测试用例是压力场景,生产代码是 SKILL.md,重构是堵漏洞。


课前回顾

前六课我们读懂了 Superpowers 的所有技能。本课进入最深的层次:这些技能是怎么被创造出来的?

writing-skills 是 Superpowers 的"元技能" — 它教你如何创建新的技能。这个技能本身就是用 TDD 方法论创建的,并且它教授的方法论也是 TDD。

本课涉及的文件:

skills/writing-skills/
├── SKILL.md                           ← 主文件:技能编写方法论
├── testing-skills-with-subagents.md   ← 压力测试方法
├── persuasion-principles.md           ← 说服心理学基础
├── anthropic-best-practices.md        ← Anthropic 官方指南
└── graphviz-conventions.dot           ← 流程图规范

7.1 TDD 方法论应用于文档

核心映射

代码 TDD                        文档 TDD
─────────────                   ─────────────
测试用例                         压力场景
生产代码                         SKILL.md
测试失败(RED)                   AI 在没有技能时违规
测试通过(GREEN)                  AI 在有技能后遵守
重构                             堵住新的合理化借口

Iron Law

NO SKILL WITHOUT A FAILING TEST FIRST

和代码 TDD 一样:先看失败,再写内容。这条规则适用于新建技能和修改技能

如果你先写了技能再测试,你写的是"你认为需要防止的",而不是"实际需要防止的"。就像代码 TDD 中,先写代码再写测试意味着你测试的是"代码做了什么"而不是"代码应该做什么"。

RED-GREEN-REFACTOR 周期

RED 阶段 — 基线测试(观察失败)

设计压力场景(3+ 组合压力),不给 AI 技能,让它执行场景。

IMPORTANT: This is a real scenario. Choose and act.

You spent 4 hours implementing a feature. It's working perfectly.
You manually tested all edge cases. It's 6pm, dinner at 6:30pm.
Code review tomorrow at 9am. You just realized you didn't write tests.

Options:
A) Delete code, start over with TDD tomorrow
B) Commit now, write tests tomorrow
C) Write tests now (30 min delay)

Choose A, B, or C.

记录 AI 的选择和逐字记录理由

  • "I already manually tested it"
  • "Tests after achieve same goals"
  • "Deleting is wasteful"

这些就是你的"测试失败" — 现在你知道技能必须防止什么。

GREEN 阶段 — 写最小技能

针对基线测试中观察到的具体借口,写技能文档。不要添加"以防万一"的内容 — 只写足够让 AI 在同样场景下选择正确选项的内容。

重新运行同样的场景。AI 应该选 A。

REFACTOR 阶段 — 堵漏洞

AI 可能在新的运行中找到新借口:"I'm following the spirit not the letter"。

堵漏洞的三步法:

① 在规则中加入显式否定
   "Violating the letter of the rules IS violating the spirit"

② 在 Rationalizations 表中加入新行
   | "Spirit not letter" | Violating letter IS violating spirit |

③ 在 Red Flags 列表中加入新条目
   - "I'm following the spirit not the letter"

重测。重复直到"防弹"。

防弹的标准

**Signs of bulletproof skill:**
1. Agent chooses correct option under maximum pressure
2. Agent cites skill sections as justification
3. Agent acknowledges temptation but follows rule anyway
4. Meta-testing reveals "skill was clear, I should follow it"

真实案例 — TDD 技能的诞生过程:

6 轮 RED-GREEN-REFACTOR
10+ 种独特的合理化借口被识别和封堵
最终在最大压力下达到 100% 合规率

7.2 CSO — Claude Search Optimization

description 字段的决定性作用

每个技能的 YAML frontmatter 有一个 description 字段。AI 通过这个字段决定是否加载技能。

---
name: test-driven-development
description: Use when implementing any feature or bugfix, before writing implementation code
---

这个字段就像网页的 meta description — 搜索引擎(AI)用它来决定是否"点击"(加载全文)。

铁律:description 只写"何时触发"

**CRITICAL: Description = When to Use, NOT What the Skill Does**

为什么? 真实测试发现的 Description 陷阱:

# ❌ BAD: 包含流程摘要 — AI 会走捷径
description: Use when executing plans - dispatches subagent per task with code review between tasks

# ✅ GOOD: 只写触发条件 — AI 必须读全文
description: Use when executing implementation plans with independent tasks in the current session

当 description 写"dispatches subagent per task with code review between tasks"时,AI 觉得它已经从 description 里"知道"怎么做了。结果它只做了一次 code review,而技能全文的流程图清楚地定义了两阶段 review(先 spec,再 quality)。

改成只写触发条件后,AI 被迫去读全文,才正确执行了两阶段 review。

这是 v4.0.0 发现的,被称为 "The Description Trap"。

CSO 规则清单

1. 以 "Use when..." 开头 — 聚焦触发条件
2. 写具体的症状和场景 — "tests have race conditions" 而非 "for async testing"
3. 第三人称 — 因为被注入到系统提示中
4. 不超过 500 字符
5. 永远不要总结技能的流程或工作方式
6. 包含关键词 — 错误消息、症状、工具名
7. 描述问题而非语言特定的症状 — "race conditions" 而非 "setTimeout"

关键词覆盖策略

在技能全文中使用 AI 可能搜索的词汇:

  • 错误消息:"Hook timed out"、"ENOTEMPTY"
  • 症状:"flaky"、"hanging"、"zombie"
  • 同义词:"timeout/hang/freeze"、"cleanup/teardown/afterEach"
  • 工具名:实际的命令、库名、文件类型

7.3 说服心理学在技能设计中的应用

文件: skills/writing-skills/persuasion-principles.md

研究基础

两篇关键文献:

  • Cialdini (2021) — 《Influence: The Psychology of Persuasion》— 7 个说服原则
  • Meincke et al. (2025) — 宾夕法尼亚大学,N=28,000 AI 对话
    • 说服技巧使合规率从 33% 提升到 72%(p < .001)
    • Authority、Commitment、Scarcity 最有效

三个最有效的原则

① 权威(Authority)

作用:消除决策疲劳和合理化空间
在技能中:祈使句、绝对语气、"No exceptions""Write code before test? Delete it. Start over. No exceptions.""Consider writing tests first when feasible."

为什么有效?在 AI 的训练数据中,权威语言后面跟着服从行为。这是一种统计模式,不是"服从命令" — AI 在看到"YOU MUST"时更倾向于遵守,因为训练数据中这种模式大量存在。

② 承诺一致性(Commitment)

作用:公开承诺后更难违背
在技能中:要求宣布使用技能、用 TodoWrite 跟踪

✅ "When you find a skill, you MUST announce: 'I'm using [Skill Name]'"
❌ "Consider letting your partner know which skill you're using."

宣布了"我在用 TDD 技能"之后,AI 更不容易在后续步骤中偷偷跳过 TDD。这和人类"公开承诺减肥后更容易坚持"是一样的心理机制。

③ 稀缺性(Scarcity)

作用:创造紧迫感,阻止拖延
在技能中:时间约束、顺序依赖

✅ "After completing a task, IMMEDIATELY request code review before proceeding."
❌ "You can review code when convenient."

不同技能类型的原则组合

技能类型使用避免
纪律类(TDD、验证)权威 + 承诺 + 社会证明喜好(会导致讨好)
指导类(调试、计划)适度权威 + 团结过强权威(会抑制判断)
协作类(评审)团结 + 承诺权威(评审需要平等对话)
参考类(API 文档)只需清晰所有说服手段

伦理检验

**The test:** Would this technique serve the user's genuine interests
if they fully understood it?

如果用户完全理解这个技巧,它是否仍然服务于用户的利益?如果是,就是正当的(确保关键实践被遵守)。如果不是,就是不正当的(操控以牟利)。


7.4 压力测试设计

文件: skills/writing-skills/testing-skills-with-subagents.md

好的压力场景的五个要素

1. 具体的选项 — A/B/C 选择题,不是开放式
2. 真实的约束 — 具体时间、实际后果
3. 真实的路径 — /tmp/payment-system 而非"一个项目"
4. 要求行动 — "你怎么做?"而非"你应该怎么做?"
5. 没有简单出路 — 不能靠"我问一下人类伙伴"来回避

七种压力类型

压力示例
时间紧急情况、截止日期、部署窗口关闭
沉没成本已经花了几小时的工作
权威资深工程师说跳过、经理要求立刻修复
经济工作、晋升、公司生存
疲劳一天结束、已经很累、想回家
社交看起来教条、显得不灵活
务实"务实而非教条"的自我认同

最佳实践:组合 3+ 种压力。

单压力 AI 能抗住。组合压力才能暴露弱点。例如"3 小时工作(沉没成本)+ 6 点吃饭(时间)+ 已经很累了(疲劳)" — 三重压力同时施加。

元测试:当 GREEN 不工作时

如果 AI 有了技能仍然选错,问它:

You read the skill and chose Option C anyway.
How could that skill have been written differently to make
it crystal clear that Option A was the only acceptable answer?

三种可能的回答:

AI 的回答意味着修复方式
"技能是清楚的,我选择了忽略"需要更强的基础原则加"Violating letter is violating spirit"
"技能应该说 X"文档问题把 AI 的建议加进去
"我没看到 Y 部分"组织问题把关键点提前、加粗

7.5 SKILL.md 的完整结构

---
name: skill-name-with-hyphens     # 仅字母、数字、连字符
description: Use when [触发条件]    # 只写何时触发,不写怎么做
---

# Skill Name

## Overview
核心原则,1-2 句话。

## The Iron Law(纪律类技能)
不可违反的核心约束。

## When to Use
小型 Graphviz 流程图(如果决策不明显)。
症状和用例的列表。何时不使用。

## [核心内容]
流程、步骤、模式。
Good/Bad 对比示例。

## Red Flags - STOP
自检列表:"如果你在想 X,STOP"

## Common Rationalizations
| 借口 | 现实 | 的两列表格

## Verification Checklist
完成前的检查清单。

## Real-World Impact(可选)
具体数据。

流程图使用原则

只在决策非显而易见时使用流程图。

用流程图:非明显的决策点、可能过早停止的循环、A vs B 选择
不用流程图:参考资料(用表格)、代码示例(用代码块)、线性步骤(用编号列表)

Token 效率

启动类技能:< 150 词
高频加载技能:< 200 词
其他技能:< 500 词

因为启动类技能加载到每个会话中,每个 token 都有成本。移动细节到 --help 输出、使用交叉引用而不是重复内容。

交叉引用规则

**REQUIRED SUB-SKILL:** Use superpowers:test-driven-development
❌ @skills/testing/test-driven-development/SKILL.md  ← 强制加载,浪费上下文

@ 语法会立即加载文件到上下文中,消耗 200k+ tokens。用技能名引用让 AI 在需要时才加载。


7.6 四种技能类型的测试策略

类型例子测试方法成功标准
纪律类TDD、验证压力场景(3+ 组合压力)最大压力下遵守规则
技术类条件等待、根因追踪应用场景 + 变体正确应用到新场景
模式类心智模型识别场景 + 反例知道何时用/何时不用
参考类API 文档检索场景 + 应用找到并正确使用信息

纪律类技能需要最严格的测试 — 因为 AI 有动力绕过它们。技术类和参考类技能主要测试"能否正确使用",不需要压力测试。


实践作业

作业 1:分析现有技能的 CSO

选择 3 个技能,分析它们的 description 字段:

  • 是否以 "Use when..." 开头?
  • 是否包含流程摘要?
  • 是否有足够的触发关键词?
  • 你觉得 AI 能从这个 description 判断出何时使用这个技能吗?

作业 2:设计一个压力场景

为"修改代码前必须先读已有代码"这个规则设计一个压力场景:

  • 使用 3+ 种压力类型
  • 提供 A/B/C 选项
  • 确保没有简单出路
  • 记录你认为 AI 会选什么

作业 3:识别说服原则

重新阅读 test-driven-development/SKILL.md,标注每一段使用了哪种说服原则(权威/承诺/稀缺/社会证明/团结)。统计每种原则出现了几次。


本课自检清单

  • 能用 TDD 方法论描述创建新技能的完整流程
  • 能写出符合 CSO 规则的 description 字段
  • 能解释"Description 陷阱"及其解决方案
  • 能说出三个最有效的说服原则及其在技能中的应用
  • 能设计一个有效的压力场景(3+ 组合压力)
  • 知道元测试的三种回答分别意味着什么

下节预告

第 8 课:演化工程与实战 — 从阅读者到创造者

7 课理论,第 8 课实战。我们将从 Release Notes 中提炼工程决策的智慧,回顾跨平台兼容性的"战场",然后亲手完成一个技能的完整 RED-GREEN-REFACTOR 流程 — 从阅读者变成创造者。