Skill 的正确打开方式:Anthropic 公开内部方法论后的 5 点反思

marsbit发布于2026-06-08更新于2026-06-08

文章摘要

Anthropic团队公开了其内部构建Claude Code时使用Skill的方法论,文章指出Skill的本质是“上下文工程”,旨在沉淀组织内的隐性知识,而非简单堆砌提示词。核心反思包括五点: 1. **避免废话**:Skill应专注于记录模型不知道的“Gotchas”(常见陷阱),如特定系统的独特限制或易错点,而非重复常识。 2. **Skill是上下文工程**:Skill应是一个结构化的文件夹(包含导航文件SKILL.md、参考资料、脚本、示例等),而非单一文档。核心原则是“渐进式暴露信息”,只在需要时加载相关内容,以优化上下文使用,避免信息过载导致模型性能下降。 3. **优先使用脚本**:将重复性、确定性的操作流程(如数据查询、格式化)封装成脚本,而非写入冗长的指令。脚本能固化最佳实践,确保执行准确并节省Token,让模型专注于需要经验和判断的部分。 4. **描述是路由规则**:Skill的描述(Description)应清晰说明“在什么用户意图或场景下应加载此Skill”,而非罗列功能。这有助于模型在众多Skill中做出准确的调用决策。 5. **轻量级管理与分发**:Skill的管理应随团队规模灵活调整。初期可随项目代码库共享。数量增多后,可借鉴Anthropic的轻量级思路:新Skill先在小范围试用和自然传播,经受真实场景检验后,再被广泛采纳或纳入官方市场,避免繁重的审批流程。 总之,优秀的Skill解决的是知识沉淀、能力复用和上下文优化问题,其价值在于将分散的专家经验转化为团队可稳定调用的能力。

作者:AI 产品阿颖

看了一篇 Anthropic 团队写的博客《Lessons from building Claude Code: How we use skills》。这应该是我目前看到关于 Skill 最深入的一篇实践总结了。

Skill 这东西其实不复杂,但真正想把 Skill 做好,我觉得也没那么容易。

我记得 Skill 刚火的时候,大家特别喜欢做各种文风 Skill、写作 Skill。好像只要把自己的写作风格塞进去,模型就能稳定按照这个风格输出。

但我后来自己试了一圈,发现很多时候根本不可行。

因为一个文风 Skill 可能就塞进去几千字甚至上万字内容。Skill 一加载,上下文就占掉很大一块。上下文一重,模型的思考能力反而容易下降。

最后经常出现一种情况:风格倒是学到了,但内容变浅了,分析能力也变弱了。

还有一种常见情况。

很多人写 Skill 的时候,喜欢往里面塞各种操作说明。第一步做什么,第二步做什么,第三步做什么。结果跑起来会发现,模型执行并不稳定。

后来我才慢慢理解,很多这种重复执行的工作,其实更适合沉淀成 Script,而不是写成长长的 Instructions。

看完 Anthropic 这篇文章之后,我最大的感受是,很多人其实都在用 Skill,但未必真正理解 Skill。

Skill 本质上是在做 Context Engineering。什么时候应该把知识放进 Skill,什么时候应该拆成 References,什么时候应该写成 Script,什么时候应该用 Gotchas 去约束模型,这里面其实有很多经验。

理解了 Skill 的运行原理之后,再回头看那些优秀的 Skill,会发现它们解决的从来都不是提示词的问题,而是在解决上下文、经验沉淀以及能力复用的问题。

如果大家想深度研究 Skill,特别推荐看两篇文章:

https://claude.com/blog/lessons-from-building-claude-code-how-we-use-skills

https://research.perplexity.ai/articles/designing-refining-and-maintaining-agent-skills-at-perplexity

#01 不要写废话

Skill 本质上是在沉淀组织里的「隐性知识」。所以,Skill 里不要重复它已经知道的常识。真正有价值的是其实是那些模型根本不知道的信息。

Anthropic 内部经常强调,Skill 真正要写的是 Gotchas,也就是常踩的坑。

比如:

1、这个表不能按 created_at 排序

2、staging 返回 200 不代表成功

3、request_id 和 trace_id 是同一个东西

因为这些信息往往存在于员工的经验里。所以一定要记住 Skill 本质是什么。

Skill = 把老师傅经验写下来。

通过 Skill,把原来散落在不同人脑子里的经验沉淀下来。

#02 Skill 其实是 Context Engineering

这可能是 Anthropic 最深刻的观点之一。

Skill 不是一个 markdown 文件,而是一个文件夹。对用过 Skill 的人来说,这话听上去像废话。

但我这两天反复琢磨,慢慢意识到:他们正是想用文件夹这个形式,来表达 Context Engineering 的理念。

我们再重新看一下典型的 Skill 结构:

skill/ ├── SKILL.md ├── references/ 放详细说明、API 参考、边界条件 ├── scripts/ 放可执行脚本 ├── examples/ 放示例 ├── assets/ 放模板、图片、固定素材

当调用某个 Skill 的时候,模型首先读取的是 SKILL.md。如果我们把所有的信息都塞进这个文件里,那很快就会上下文爆炸。

假设这是一个支付排障 Skill,里面既有 Stripe 的错误码说明,也有历史故障案例,还有排查脚本和最终报告模板。

如果这些内容全部堆进 SKILL.md,每次调用 Skill 的时候,Claude 都得重新读一遍。

哪怕用户只是想确认一个错误码的含义,哪怕只是想查看某个支付状态为什么没有更新。大量根本用不上的信息,也会被一起塞进上下文。

而 Anthropic 的思路完全不同。

SKILL.md 更像一个导航页。它的职责是告诉模型,遇到 Stripe 错误的时候,去 references 里找对应说明。

需要参考历史案例的时候,去 examples 里查类似问题,需要真正执行排查动作的时候,运行 scripts 里的脚本,最后生成排障报告时,再使用 assets 里的模板。

整个过程是渐进的暴露。

下面这张图,强烈建议大家收藏。

#03 尽量用脚本

不要让模型把有限的上下文和推理能力浪费在重复劳动上。把这些事情交给脚本。

举个例子。很多人写 Skill 的时候,会这样写:

1. 查询注册数据;2. 查询付费数据;3. 计算转化率;4. 分析异常原因。

这种写法当然没问题。模型也能完成。但每次执行的时候,它都得从头把整个分析流程重新走一遍。

查询数据、整理数据、处理各种边界情况,这些工作其实都是重复的。

既然这些能力已经被验证过无数次。为什么还要让模型重新发明一次?不如直接提供具体的脚本。

而且通过脚本的方式, Skill 的执行也会更加准确,也更省 Token。

从这个角度看,Skill 里的 Scripts 其实是在沉淀组织能力。每一个脚本背后,往往都是团队过去踩过无数坑之后总结出来的最佳实践。

把这些能力固化下来之后。Claude 每次都能站在这些经验之上工作,而不是一次又一次从零开始。

所以我越来越觉得,Skill 中,Instructions 和 Scripts 解决的是两个不同层面的问题。

Instructions 提供的是经验和判断,Scripts 提供的是能力和执行。

举个例子,支付排障 Skill 里可能有这样一句:

如果 Stripe 返回 200,不要直接认为支付成功,需要进一步检查 payment_events 表。

这属于 Instructions。因为这是经验,而 check_payment_events() 属于 Script,因为这是执行能力。

如果只有 Script,模型知道怎么查,但未必知道为什么查。

如果只有 Instructions,模型知道应该查。但每次都得重新实现。两者缺一不可。

#04 Description 更像一个路由规则

很多人写 Skill Description 的方式天然就是错的。

因为大家习惯写成功能介绍。比如:PR Management Skill 帮助用户监控 PR 状态,处理 CI 问题,自动完成 Merge。

但问题在于,模型并不是通过功能去寻找 Skill 的,Claude Code 启动的时候,会先扫描所有 Skill 的名称和 Description。

然后根据用户当前的问题,判断应该加载哪个 Skill。

所以 Description 里最重要的信息,不是这个 Skill 能干什么,而是什么情况下应该加载它。

Description 其实承担着整个 Skill 的路由工作。

真实世界里,很少有人会说帮我调用一个 PR 管理工具。大家更可能说:帮我盯一下这个 PR、CI 又挂了之类。

所以一个好的 Description,应该尽量描述用户的意图,而不是罗列功能。

我甚至觉得可以用一个特别简单的方法检查。

写完 Description 之后,把整个 Skill 删掉,只保留这一行 Description。然后问自己:模型看到用户的问题之后,能不能知道什么时候该加载这个 Skill。

如果做不到,那大概率还得继续改。

#05 Skill 的管理和分发

还有一个是关于 Skill 的管理。

一个人用 Skill 的时候,这事其实很简单。自己写几个 Skill,自己维护,自己升级就行了。但我相信大部分团队后面都会遇到同一个问题。

当 Skill 从几个变成几十个,甚至几百个的时候,这些 Skill 应该怎么管理?怎么升级?怎么分发给团队成员?

Anthropic 在这方面的经验,我觉得挺值得参考。

团队规模比较小的时候,Skill 直接跟着代码仓库走。放在项目里的 .claude/skills目录就行。大家共享同一套 Skill,也共享同一套工作方法。

但随着 Skill 数量越来越多,一个新的问题出现了。

Claude Code 启动的时候,会扫描所有 Skill 的名称和 Description,然后判断当前任务应该调用哪个 Skill。Skill 越多,路由成本就越高。

这也是为什么 Anthropic 后来开始做 Marketplace。但更有意思的是,他们管理 Marketplace 的方式。

很多公司遇到这种问题,第一反应往往是建立一套审批流程。谁写了 Skill,先提交申请;审核通过之后,再进入官方 Skill 库。我们内部之前也这样做过,但非常重。为了管理而管理

我发现人家 Anthropic 的组织就很轻巧。

让新的 Skill 先在小范围传播,让同事自己安装、自己试用。

如果越来越多人开始使用,说明这个 Skill 确实解决了某个真实问题。到了这个阶段,作者再提交到正式的 Marketplace。

所以他们没有先讨论 Skill 有没有价值,而是先让它接受真实使用场景的检验,用的人多了,自然就进入正式体系。这样留下来的 Skill,基本都是团队真正需要的 Skill。

相关问答

Q什么是Skill本质上要解决的核心问题?

ASkill本质上解决的不是提示词的问题,而是上下文管理、隐性知识(即老师傅经验)的沉淀与固化,以及能力的复用问题。它是Context Engineering的一种实践。

Q根据文章,编写Skill时,什么是最不应该写的内容?什么是真正有价值的内容?

A最不应该写的是模型已经知道的常识或废话。真正有价值的内容是那些模型不知道的、存在于员工经验里的“Gotchas”,即常踩的坑和关键细节,例如特定系统的独有规则或常见的错误理解。

Q为什么Anthropic强调Skill是一个文件夹结构,而不仅仅是SKILL.md文件?这种结构如何体现“Context Engineering”的理念?

A将Skill设计为文件夹结构是为了实现“渐进的暴露”,避免将所有信息一次性塞入上下文导致“上下文爆炸”。核心的SKILL.md文件就像一个导航页,根据任务需要,动态指引模型去references、scripts、examples等子目录中查找具体信息、执行脚本或参考案例。这样能有效管理上下文窗口,只在需要时才引入相关信息,提升效率和性能。

Q在Skill中,Instructions(指令)和Scripts(脚本)分别扮演什么角色?它们如何协同工作?

AInstructions提供的是经验和判断,告诉模型“为什么”要这么做以及在特定情况下应注意什么。Scripts提供的是具体的能力和执行,是固化下来的、可重复使用的代码或操作流程。两者缺一不可:只有Instructions,模型每次需重新实现;只有Scripts,模型知其然而不知其所以然。它们协同工作,让模型能在既有经验(Instructions)的指导下,高效、准确地调用现成能力(Scripts)来完成任务。

Q一个好的Skill Description(描述)应该怎么写?它最主要的作用是什么?

A一个好的Skill Description不应该罗列功能,而应描述用户意图或触发场景,例如用户可能会说什么样的话、提出什么样的问题。它最主要的作用是充当“路由规则”,帮助模型根据用户当前的问题,准确地判断和选择应该加载哪个Skill。可以以“用户是否可能说出描述中的话”来检验其有效性。

你可能也喜欢

如何让自己变得让人工智能永远也无法取代

面对人工智能的冲击,许多人担心工作被取代。然而,真正的威胁在于个人对他人和系统的依赖,以及由此产生的“薪资奴役”——即为生存而从事无意义、枯燥的工作。摆脱这种困境的关键,不是抵制技术,而是成为拥有高自主性的“不可受雇”个体。 文章提出了成功抵御AI替代的五个核心要素:自主性(主动行动的能力)、品味(判断事物价值的经验)、说服力(让他人关注你工作的能力)、毅力(坚持并从错误中学习)和迭代(根据反馈持续改进)。这些能力无法仅通过理论学习获得,必须通过实践来培养。 要启动转变,首先要彻底改变环境,重塑身份认同。其次,应选择一个能获得真实、快速反馈的实践领域,例如创业。在众多技能中,内容创作(媒体)比编写代码更具优势,因为其价值是主观的,需要独特的审美和判断力,这正是AI目前难以完全复制的。 具体行动上,可以从三个步骤开始: 1. **挖掘原始素材**:反思自己长期痴迷的知识领域、轻松解决的难题或童年被压抑的兴趣,找到独特的个人经验。 2. **确立反向思考主轴**:找出你坚信但主流观点错误的地方,或行业内普遍忽视的“皇帝新衣”,形成独特的批判性视角。 3. **立即发布**:将前两步的思考融合,撰写并发布第一个核心内容(如帖子、视频),勇敢接受真实世界的反馈,并在此基础上持续学习和迭代。 最终,抵御AI的关键在于构建一份与自身身份深度契合的毕生事业,通过持续的内容创作和真实互动,建立无法被自动化取代的独特价值和影响力。行动,从今天发布第一个想法开始。

marsbit1小时前

如何让自己变得让人工智能永远也无法取代

marsbit1小时前

通过掷骰子离线保管比特币密钥:并非人人愿意为之

文章探讨了通过投掷骰子生成比特币钱包种子短语的安全方法及其现实挑战。核心观点如下: **1. 骰子提供物理熵源** 骰子结果由众多微小变量决定,理论上虽可预测,但实践中无法被攻击者复制或计算,从而提供高质量的随机性。每个六面骰子投掷约产生2.585比特熵,50次投掷即可满足典型12词助记词(128比特熵)的安全需求。 **2. Coldcard漏洞事件凸显手工熵源的价值** 近期Coldcard硬件钱包因固件漏洞导致其内部随机数生成器存在缺陷,致使约1128枚比特币被盗。但那些**完全**通过足量骰子投掷生成种子短语的用户未受此漏洞影响,因为他们的主密钥未使用有缺陷的生成器。 **3. 重要警示:手工种子并非万能保护** 安全研究员指出,即使用户使用骰子生成了安全的种子,若他们使用了Coldcard的其他功能(如生成纸钱包、克隆密钥、共享签名密钥、密码等),这些**衍生密钥**仍可能调用有漏洞的随机数生成器,从而存在风险。安全种子不保证设备生成的所有秘密都安全。 **4. 手工生成熵源的现实局限性** 尽管数学上可靠,但该方法对大多数用户并不友好: * **过程繁琐易错**:需投掷50-99次,精确记录,任何输入错误都会导致钱包完全不同。 * **引入新风险**:用户可能在记录、转换过程中泄露信息,或使用有偏的骰子/投掷方式。 * **用户体验差**:难以想象大规模推广需要用户手动投掷近百次骰子。安全措施需适应现实生活场景和普通用户的知识水平。 **5. 给用户的建议** 受影响的Coldcard用户应: * 更新固件至最新版。 * 检查是否使用过有漏洞的功能生成了次级密钥或密码,如有则需立即更换。 * 考虑采用多签方案,使用不同厂商的设备分散风险。 **结论**:手工投掷骰子生成熵源是技术娴熟用户的一个有效安全选项,但其过程复杂、容易出错,不适合作为主流用户的默认方法。长远目标是依赖安全、透明且无需专业知识的硬件/软件随机数生成方案。

cryptonews.ru4小时前

通过掷骰子离线保管比特币密钥:并非人人愿意为之

cryptonews.ru4小时前

交易

现货
活动图片