Matt Pocock 演讲逐帧拆解:好 Skill 和坏 Skill 的差距就在这 4 个维度

Matt Pocock 演讲逐帧拆解:好 Skill 和坏 Skill 的差距就在这 4 个维度

你的 skill 明明写得很清楚,但 agent 就是不按你说的做。问题不在 agent------在于你还没掌握「引导词」这门手艺。


你有没有经历过这种绝望:下载了一堆 AI coding 工具,装了二十个社区 skill,以为从此开发效率要起飞了。结果发现 agent 要么根本不调用你的 skill,要么调用了也不按里面的流程走,要么产出的东西和 skill 里承诺的效果差了十万八千里。

如果你有过这种感受,恭喜你------你正困在 Skill Hell 里。

这个概念来自 Matt Pocock(Matt Pocock Skills 作者,目前最流行的工程 skill 集合之一)在一场技术演讲中的分享。他把这种现象命名为「Skill Hell」,是继 Tutorial Hell(教程地狱)和 Framework Hell(框架地狱)之后,AI 时代开发者面临的第三种困境:

  • Tutorial Hell:疯狂看教程,但拼不出一套完整的东西
  • Framework Hell:每十分钟出一个新框架,永远在追热点
  • Skill Hell:几百个免费 skill 摆在面前,但你不知道哪些真的好用、哪些只是占坑,更不知道它们各自的那一套流程为什么总是打架

问题的根因很简单:我们没有一个评判 skill 好坏的标准。没有人告诉你"看一个 skill 的时候应该关注哪些维度"。于是社区里充斥着大量看似有内容、实际对 agent 行为零影响的 skill。

Matt 给出的答案是:一份 4 维度的 Skill 检查清单


一、Trigger(触发):你的 Skill 该让谁按开关?

这是 skill 设计的第一道选择题------你的 skill 是 用户手动调用 (user-invoked),还是 模型自动判断激活(model-invoked)?

两种模式的区别

技术上,区分两者的关键是一个叫 context pointer (上下文指针)的东西------就是 skill 的 description 字段。如果 skill 包含 description,它就会常驻在 agent 的系统上下文中,agent 可以根据描述自动判断"我现在需要调用这个 skill"。这是 model-invoked 模式。

如果不写 description 或者显式设置了 disableModelInvocation: true,那这个 skill 就只是一个躺在文件系统里的 .md 文件,agent 不会主动去读------除非用户通过 /skill-name 或自然语言明确要求。

关键权衡:Context Load vs Cognitive Load

每种选择都有代价:

选择 代价 典型代表
Model-invoked Context Load(上下文负担):每多一个 model-invoked skill,agent 的上下文就多一条 description,耗费 token 不说,还增加 agent 的决策负担 Superpowers
User-invoked Cognitive Load(认知负担):用户需要记住有哪些 skill 可用、什么情况下该用哪个 skill Matt Pocock Skills

Matt 的选择是偏好 user-invoked 。原因很直白:model-invoked 带来的是不可预测性------即使某个 skill 完全适用于当前任务,模型也可能"选择不调用它"。你无法 100% 确定你的 skill 会在正确的时间被激活,除非你专门去做 eval 测试。而对于大多数个人开发者来说,做 skill 级别的 eval 几乎是不可能的。

Tip #1:在 user-invoked 和 model-invoked 之间做一次有意识的决策,而不是随大流。


二、Structure(结构):Skill 里只有两种东西

Matt 提出了一个极其简洁的 skill 内部模型:任何 skill 都可以拆成两种基本单元------Steps(步骤)Reference(参考资料)

  • Steps:skill 按顺序执行的操作流程
  • Reference:辅助执行步骤的静态资料------模板、术语表、检查清单、PRD 模板等等

有些 skill 只有 Steps(比如一个纯流程 skill),有些只有 Reference(比如一个术语表 skill),但大多数 skill 是两者的组合。

以 Matt 的 to-PRD skill 为例:

  • Steps(3 个):寻找相关上下文 → 和用户确认测试场景 → 写 PRD 文档
  • Reference(2 个):"什么是测试场景"的说明 + PRD 模板

skill.md 尽可能小

Tip #3:skill.md 是 skill 的核心文件,让它越小越好。

小的 skill.md = 更好维护 + 更容易审查 + 更少 token 消耗。每砍掉一个不必要的词,就是替用户省了好几次调用的 token。

Branches(分支):skill 的不同使用路径

skill.md 变小的关键技术,是识别 skill 的 branches------不同的使用场景分支。

举个例子:

  • to-PRD 只有一个 branch:永远创建 PRD → 所有 reference 都应该在主 skill.md
  • Domain Modeling两个或三个 branch:更新 context.md / 创建 ADR / 也可能什么都不做 → ADR 模板和 context.md 模板不需要常驻主 skill.md

对于多分支 skill,把只在特定分支有用的 reference 外置为独立文件 ,通过 context pointer 按需加载。Matt 管这叫 External Reference------一个"如果你需要 X 就去读那个文件"的指针。

核心操作:把分支专属的参考资料藏在 context pointer 后面。


三、Steering(驾驭):让 Agent 真的听你的

这是整场演讲里最值钱的部分。Matt 用两个技术解决了"skill 写得很清楚但 agent 不照做"这个千古难题。

技术 1:Leading Words(引导词)

Leading Words(德语文学理论中叫 Leitwort)是一种自带"压缩包"效果的词或短语------你用短短两三个词,就能激发 agent 激活一整套行为模式。

Matt 举的例子是 "vertical slice" (垂直切片)。每个工程师都知道 agent 有一个经典毛病:拿到一个任务后逐层编码------先写数据库层、再写 schema 层、再写 API 层、再写前端......而不是像人一样先做一个最小可工作的端到端切片。

如果你只在 skill 里写"不要逐层编码,先做一个小功能再扩展",agent 大概率还是逐层来。但如果你在 skill 里反复使用 "vertical slice" 这个 Leading Word:

复制代码
用 vertical slice 的方式来实现功能
先做一个 thin vertical slice 验证全链路
每个 vertical slice 完成后再扩展下一个

效果验证方式:去 agent 的 reasoning traces 里看------如果 agent 在思考过程中自己说出了 "let me approach this as a vertical slice",那就说明 Leading Word 起作用了。Agent 在自我复述这个短语的过程中,会被自己的"推理"引导到正确的行为模式上。

Matt 说几乎所有听过这个技巧的人都回应"哦对,我其实一直在下意识这么做"。他的建议是:从现在开始,有意识地在 skill 里保持一致、有力的 Leading Words,并去 reasoning traces 里检验它们是否真的生效。

他还有一个很妙的比喻:英语就像一套有着巨大 API 的编程语言,不同的词就是在调用不同的"函数",而 Leading Words 就是那些最常用、最可靠的函数名。

技术 2:Legwork(工作量)------隐藏终点让 Agent 走好当下的路

另一个常见的问题是 agent 在某个步骤"不够用力"。

Matt 举了一个他称之为"无处不在"的经典案例:Plan Mode。几乎所有 Plan Mode 的实现都有两步------先问澄清问题,再写计划。但 agent 知道自己的终极目标是"写出一个计划",所以它在第一步(问澄清问题)上总是浅尝辄止------问一两句就急着跳到第二步。

Matt 的解法是把计划流程拆成两个独立 skill:

  1. grill-with-docs:纯提问阶段,agent 看不到"写计划"这个后续步骤
  2. to-PRD:拿到足够信息后,才进入写文档阶段

核心原理:当你让 agent 只看得到当前步骤时,它会在这个步骤上投入更多"腿力"------因为它没有捷径可抄。

这不是每个 skill 都需要做的事,但在那些"第一步总是做不好"的场景里,这是唯一有效的解法。


四、Pruning(精简):砍掉不起作用的内容

一个 skill 的臃肿往往是其他问题的症状,而不是原因本身。Matt 指出了三种最常见的失败模式:

1. DRY(重复)

同一份 reference material 出现在多个地方。解法:单一事实来源(Single Source of Truth)------每个信息只在一处定义。

2. Sediment(沉积)

多人协作的产物------每个人都在往同一个 markdown 文件里加东西,但没人敢删别人的内容。日积月累就变成了沉积层。解法:按 branches 归位,或者直接删除过时的东西。

3. No-ops(空操作)

这是 Agent 生成 skill 最容易出现的毛病。 No-op 是指 skill 中那些"看起来在说点什么,但删掉后 agent 的行为完全不变"的内容。

Matt 给出了一个实用的 Deletion Test:假设你的 skill 里有一整段告诉 agent "要写详细的长 commit message"。删掉这段。Agent 大概率还是会写正常的 commit message------因为这是它从训练数据里就会的基本行为。

凡是通过 Deletion Test 的内容,都是 no-op------大胆删。


检查清单回顾 + 行动指南

把四步串起来,就是一份完整的 Skill 质量审查清单:

  1. Trigger:决定 user-invoked 还是 model-invoked,理解你付出的代价(context load 还是 cognitive load)
  2. Structure:Steps + Reference 两单元 → 识别 branches → 外置分支专属 reference → 让 skill.md 尽可能小
  3. Steering:提炼一致的 Leading Words → 去 reasoning traces 验证 → 必要时拆分 skill 增加 legwork
  4. Pruning:查 DRY → 清沉积 → 做 Deletion Test 删除 no-ops

一条建议

如果你现在手头有正在维护的 skill,立刻拿这份清单过一遍 。Matt 已经把整套方法论编码成了一个叫 writing-great-skills 的 skill(就在他的 Matt Pocock Skills repo 里),你可以直接用它来审查和改写你的 skill。

如果你对 AI 工程化开发感兴趣,Matt 还在 aihero.dev 有一个 newsletter,接下来几个月会发布 AI Coding 速成课程。


本文基于 Matt Pocock 演讲 "Building Great Agent Skills: The Missing Manual"(原定于 AI Engineer World's Fair 发表)改写。配图为视频截图。

声明:本文中所有截图均截取自 Matt Pocock 的 YouTube 原视频,仅用于教学评论和内容分析目的,版权归原作者所有。


相关推荐
fthux6 小时前
RenoPit 能为普通业主做什么?看懂图纸、审查合同,提前发现装修坑
javascript·人工智能·ai·开源·github·chrome扩展·open source·edge扩展·firefox扩展
哥不是小萝莉8 小时前
AI 应用落地:原理、架构与工程实践
ai
_itgo9 小时前
LangGraph 主要3 种核心模式
ai·langchain·langgraph
我才是银古11 小时前
My OpenCode × DeepSeek Config 实战:从一行需求到 13 次提交的全自动化开发管线
deepseek·opencode
Muscleheng11 小时前
SpringBoot 集成 DeepSeek 实现 RAG 文档问答
java·spring boot·ai·springai
ddshub_cc13 小时前
2026 AI API 定价对比:GPT-5.6 vs Claude Fable 5 vs Opus 5,哪款模型最划算?
人工智能·gpt·ai·chatgpt
带娃的IT创业者13 小时前
中国开源大模型策略:正在赢得全球AI竞赛
人工智能·开源·qwen·开源大模型·deepseek·ai竞赛·开源策略
旋生万物14 小时前
五条几何公理重构元素周期表:从量子力学到螺旋拓扑的降维(AI 编程时代的微观启示)
重构·ai编程·代码审计·cursor·ai agent·mcp协议·claudecode
wang_yb16 小时前
用方差阈值过滤掉“惰性特征”
python·ai·databook