当 AI Agent 开发者越来越多地通过自定义 Skill(技能)赋予模型可靠的行为界面时,一个隐性的痛点浮出水面:为什么同样的 prompt 结构,有时输出稳定,有时却失控?Matt Pocock 的 /writing-great-skills 指南,正是为了回答这个问题而快速成为他个人最常调用的 Skill 本身。它把 Skill 写作从“玄学”拉回“工程”范畴,提供了一套以可预测性为核心原则的指导框架。
该指南的核心洞察之一,是明确区分模型自动触发(model-invoked)与用户手工调用(user-invoked)两种模式。对于自动触发场景,Skill 的 description 字段必须严格承担触发器角色——模型通过匹配描述来决定是否启用该 Skill,因此描述应当精确、唯一且避免歧义。这其实借鉴了传统软件工程中的“接口契约”思想:描述就是 API 文档,模糊就是 bug 的来源。
在内容组织上,Pocock 提出了三层信息结构:主步骤(核心流程)、参考(辅助上下文)和外部文件(数据源),以此实现渐进式披露。这种分层设计自然控制了模型在每一步的注意力带宽——与其把全部规则塞进一条指令,不如让模型按需读取。每层的完成标准(completion criteria)都被明确写出,形成一个链式终止条件,从根本上预防“任务未完成就输出结论”的典型失败。
更值得关注的是五个诊断型失败模式:Premature completion(过早完成)、Duplication(重复)、Sediment(沉淀或称僵尸指令)、Sprawl(蔓延)、No-op(空操作)。其中 No-op 被提升为一个可量化测试的标准:如果一个句子去掉后不影响任何行为输出,它就是空操作。这个概念对 AI 文本设计的实际意义,不亚于代码覆盖率之于单元测试——你可以在设计阶段就以“No-op 最小化”为准则进行重构。
另外,leading word(引导词)的运用相当精妙:把常见的操作意图压缩为单个动词或短词组,例如用“List”替代“Generate a list of”,用“Summarize”替代“Provide a brief summary”。这并非简单的语法简化,而是通过减少词汇多样性来降低模型在指令理解阶段的熵值。结合拆分 Skill 以控制注意力的原则,每个 Skill 的 leading word 形成一个微型的领域特定语言(DSL),让模型调用时更加稳定。
对于 Agent 开发者而言,这套方法的价值不在于理念的新颖,而在于可测试性。传统 prompt 优化依赖反复试错和直觉,而 Pocock 的框架引入了完成标准、No-op 测试、分层结构等可验证要素。建议团队在定义 Sensor(感知技能)或 Tool Use(工具调用)时,先写出目标 Skill 的上限步骤清单,逐条标注完成标准,然后删除所有 No-op 句子,最后用 leading word 压缩行为描述。如果发现步骤超过 5-7 个,就主动拆分——因为模型注意力在长步骤序列中会显著衰减。这本质上是在用“控制变量法”去驯服大模型的随机性。