yena shared this post · 3h ago
meng shao

/writing-great-skills

https://github.com/mattpocock/skills/tree/main/skills/productivity/writing-great-skills

来自 152K✨ Skills For Real Engineers 作者 @mattpocockuk 的新 Skill,教咱们用最少但最有行为牵引力的结构,把 Skill 写成能稳定触发、分层加载、清楚完成、持续删减的“可预测工作流”。

跟这个优质 Skill 学它的编写思想

  1. Skill 的根本目标是过程可预测

Skill 不是知识库,也不是提示词堆叠。它的作用是让模型在某类任务中形成稳定行为路径。好的 Skill 应该减少“这次做得细、下次做得浅”的波动。

  1. 触发方式有成本权衡

它区分两类 Skill:

· Model-invoked:模型能自动发现并调用。优点是无需用户记住,缺点是 description 会长期占用上下文注意力。

· User-invoked:只有用户点名才会触发。优点是零上下文负担,缺点是用户必须记得它存在。

这里很关键:不是所有 Skill 都该自动触发。只有当模型确实需要自己识别任务,或其他 Skill 需要调用它时,才值得让它 model-invoked。

  1. description 是触发器,不是简介

对于 model-invoked skill,description 的职责不是介绍得完整,而是准确告诉模型“什么时候该用我”。因此它应当前置关键触发词,只保留真正不同的触发分支,避免同义重复。

这点很实用:很多 Skill 写坏,是因为 description 像产品简介,而不是调用条件。

  1. 信息层级决定 Skill 是否清爽

它提出一个三层结构:

· SKILL.md 中的步骤:模型必须按顺序做的事。

· SKILL.md 中的参考:模型运行时需要随手查看的规则、定义、事实。

· 外部参考文件:只在特定场景需要加载的材料。

好的 Skill 不把所有东西塞进主文件,而是用 progressive disclosure:常用、必须、影响流程的内容留在主文件;分支性、解释性、定义性内容放到外部文件,通过明确指针调用。

  1. 每个步骤都要有完成标准

它特别强调 completion criterion。一个步骤不能只写“分析清楚”“完成检查”这种模糊目标,而要让模型能判断“是否已经完成”。

完成标准越清楚,越能防止模型提前进入下一步,也就是它说的 premature completion。

  1. 拆分 Skill 不是为了整洁,而是为了控制注意力

什么时候拆?

· 如果一个 Skill 有独立触发词,可拆成单独的 model-invoked skill。

· 如果后续步骤会让模型急着往前跑,可把流程拆开,隐藏后续步骤,迫使模型认真完成当前阶段。

这很像工作流设计中的“减少提前优化”和“控制认知视野”。

  1. leading word 是压缩行为的关键词

它提出一个很有洞察的概念:leading word。也就是用模型预训练中已经熟悉的强概念,来压缩一组行为要求。

例如与其反复写“快速、确定、低开销”,不如找到一个更有行为牵引力的词。好处有两个:节省 token,并且更容易稳定唤起模型已有的行为模式。

但它也提醒:弱词可能无效。例如“be thorough”如果只是模型默认会做的程度,那就是 no-op;需要更有约束力的词。

它的失败模式诊断很有用

这个 Skill 给出的几个常见问题非常精确:

· Premature completion:模型过早认为当前步骤完成。优先修正完成标准,而不是马上拆 Skill。

· Duplication:同一个意思出现在多个地方,增加维护成本,也会让某个概念被模型过度重视。

· Sediment:旧内容沉积,没人敢删,导致 Skill 越来越脏。

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

· No-op:看似有用,实际不会改变模型行为的句子。

其中最有操作价值的是 no-op 测试:一句话如果删掉后模型行为几乎不变,它就不该留在 Skill 里。

30