深度 · 小互解读

Matt Pocock 发布 writing-great-skills 技能,提出 5 种失败模式自检法

用完成标准、三层信息结构和 no-op 测试,把 Skill 写成可预测工作流
速览
  • Skills For Real Engineers 作者 Matt Pocock(152K 关注者)发布了一个专门教人写 Skill 的 Skill,名为 writing-great-skills
  • 核心主张:Skill 的目标是让模型行为可预测,减少同类任务时做得细或做得浅的波动
  • 提出 model-invoked(模型自动发现触发)与 user-invoked(用户点名触发)两种方式的成本权衡
  • 用三层信息结构(步骤 / 参考 / 外部参考文件)做渐进式披露,避免主文件塞满内容稀释注意力
  • 定义 5 种常见失败模式(premature completion、duplication、sediment、sprawl、no-op),并给出「删掉这句话模型行为变不变」的 no-op 测试作为判断标准
1是什么

写 Skill 这件事,现在也有了一份说明书

Skills For Real Engineers 作者 Matt Pocock 最近发布了一个教人写 Claude Skill 的 Skill,名字就叫 writing-great-skills。

它把「怎么写好一个 Skill 或 Prompt」这件全凭手感的事,拆成一套能照着执行的检验动作。

原作者 @mattpocockuk 拥有 152K 关注者。这个 Skill 的落点不是又一句「要精简」的建议,而是给出一个能直接判断的动作:删掉某句话后,模型行为到底变不变;并把常见毛病命名成 5 种可对照的模式,逐个能查。

全文的锚点:好 Skill 把内容分三层放,用不到的不占注意力

Steps 步骤必须按顺序做
References 参考随手要查
External Files 外部文件特定场景才加载
152K
原作者 @mattpocockuk 账号关注者数
5 种
Skill 常见失败模式(premature completion / duplication / sediment / sprawl / no-op)
writing-great-skills 推文原图
@shao__meng 推文原图,介绍 Matt Pocock 的 writing-great-skills 技能 · 来源:X @shao__meng
2根本目标

Skill 写坏了会怎样

Skill 的作用不是当知识库,也不是把提示词一堆堆在一起。它要让模型在某一类任务里走出一条稳定的行为路径。判断好坏的标准很朴素:同一类活儿,这次做得细、下次做得浅,就是没写好。

当成知识库堆叠

内容越堆越多,模型每次抓到的重点不一样,做深做浅全凭运气,结果没法预期。

一条稳定行为路径

同一类任务每次都走同样的步骤,做到什么程度是可预期的,波动被压下去。

3触发方式

该让 AI 自己发现它,还是等你点名

一个 Skill 怎么被用起来,有两条路,各带各的代价。它把 Skill 分成两类。

Model-invoked

模型自动发现并调用

谁来触发
模型自己识别任务,主动调它
优点
用户不用记得它存在
代价
它的 description 会长期占用上下文注意力

User-invoked

用户点名才触发

谁来触发
只有用户明确点名才会启动
优点
零上下文负担
代价
用户必须记得它存在

不是所有 Skill 都该自动触发。只有当模型确实需要自己识别任务,或别的 Skill 要调用它时,才值得做成 model-invoked;否则默认走 user-invoked,省掉那份注意力成本。

4description

description 不是简介,是开关说明

对 model-invoked 的 Skill,description 的职责不是把功能介绍全,而是准确告诉模型「什么时候该用我」。很多 Skill 写坏,就坏在 description 写成了产品简介,而不是调用条件。

写成简介(坏)

「这是一个功能强大的代码审查 Skill,能帮你发现 bug、优化性能、提升可读性,适合各种项目。」全是自我介绍,没告诉模型何时该用。

写成调用条件(好)

触发词前置:「审查 diff、检查改动、找 bug 时使用。只审当前改动,不审全库。」前置关键触发词,只留真正不同的分支,去掉同义重复。

5三层结构 · 重点

东西不是越全越好,是分层放对地方

好的 Skill 不把所有东西塞进主文件,而是分三层来放。哪层放什么,决定了这个 Skill 读起来清不清爽。

progressive disclosure · 渐进式披露

常用、必须、影响流程的内容留在主文件里;分支性、解释性、定义性的内容放到外部文件,需要时才通过一个明确的指针去查。用不到的东西就不占模型的注意力。

打个比方

就像说明书正文只写操作步骤,型号参数表放在附录里,用不到就不用翻开。

放什么模型必须按顺序做的动作,一步扣一步的流程。
何时加载一直躺在主文件 SKILL.md 里,每次都读到。
放什么模型运行时需要随手查看的规则、定义、事实。
何时加载也在主文件里,但作为查阅项,不是必须按顺序执行的步骤。
放什么分支性、解释性、定义性的材料,只有特定场景才用得上。
何时加载只在需要时,通过主文件里的明确指针去加载;用不到就不进上下文,不稀释注意力。

点上面任意一层看它放什么、什么时候加载

6完成标准 · 重点

怎么让 AI 不会没做完就说做完了

每个步骤都要带一个完成标准。一个步骤不能只写「分析清楚」「完成检查」这种模糊目标,要让模型能自己判断「到底算不算做完了」。

completion criterion · 完成标准

完成标准越清楚,越能挡住模型提前跳到下一步,也就是它说的 premature completion(过早完成)。

打个比方

过早完成,就像学生只写了作业标题,就说作业写完了。

模糊目标(坏)

步骤写「分析清楚这段代码」「完成检查」。模型没法判断到底算不算做完,可能扫一眼就跳到下一步。

清晰完成标准(好)

步骤写「逐个函数确认输入边界已处理,并在回复里列出每个函数的检查结论」。模型能对着标准判断自己是不是真的做完了。

7leading word

一个词顶一整段要求

它提出一个概念叫 leading word:找一个模型在预训练里已经很熟、自带一整套行为联想的强概念词,用它替代一长串啰嗦的行为要求。好处有两个,省 token,而且更容易稳定唤起模型已有的那套行为。

打个比方

说「请像审计员一样检查」,比说「请仔细、严格、逐项、不要遗漏地检查」更省字也更管用,因为「审计员」这个词自己就带着一整套模型已经理解的行为模式。

它也提醒:弱词可能无效。比如写一句「be thorough(要认真)」,如果这只是模型默认就会做的程度,那这句话加了等于没加,需要换一个更有约束力的词。

8自检清单 · 重点

5 种病,1 句话测出该删哪句

writing-great-skills 把 Skill 常见的毛病命名成 5 种失败模式,配一个统一的判断动作。点下面任意一种,看它的定义、一个写坏的例子和对应修法。

premature completion · 过早完成

模型在步骤还没真正做完时,就误以为已经完成,提前跳到下一步。

写坏例子步骤只写「检查代码有没有问题」,模型扫一眼就说检查完了。
修法优先把完成标准写清楚,让模型能判断是否真的做完,而不是马上去拆 Skill。
duplication · 重复

同一个意思出现在多个地方,抬高维护成本,还会让某个概念被模型过度重视。

写坏例子开头写「始终用中文回复」,中间步骤又写「注意用中文」,参考区再写「语言:中文」,三处同义。
修法合并到一处,只说一遍。
sediment · 沉积

旧内容留着没人敢删,日积月累,Skill 越来越脏。

写坏例子还留着「如果用到 v1 接口就加 --legacy 参数」,但 v1 早就下线了,这句话一直躺着没人动。
修法定期清掉已经过时、不再适用的内容。
sprawl · 蔓延

内容都有效,但主文件太长,注意力被稀释。

写坏例子把 20 条边界说明、3 份完整示例、一整张术语表全塞进 SKILL.md 主文件,每条都对,但主文件读起来重点全糊在一起。
修法按三层结构,把解释性、定义性内容挪到外部文件,用指针引用。
no-op · 空转

看着有用、实际不改变模型行为的句子。

写坏例子写一句「be thorough(要认真)」,但这只是模型默认就会做的程度,加了等于没加。
修法做 no-op 测试,删掉看行为变不变;要真起约束,就换一个更有牵引力的词。
no-op 测试

判断一句话该不该留在 Skill 里的方法:把它删掉,看模型的实际行为有没有变化。删了也没变化,说明这句话是废话,该删。

一句话如果删掉后模型行为几乎不变,它就不该留在 Skill 里。 writing-great-skills,via X @shao__meng
来源:X @shao__meng 转述 Matt Pocock(@mattpocockuk)的 writing-great-skills 技能,代码见 GitHub 仓库 mattpocockuk/skills。原文发布于 2026-07-01。本文为小互解读站可视化解读。