Skill再回首—深度解读Anthropic官方最新Skill白皮书

引言

近几个月 AI 领域 "Skill" 的概念非常火热,社区也已有很多对Skill和MCP等概念的对比解读,以及如何构建高效能 AI 技能的讨论与实践分享,但作为其标准定义者,官方一直处于只有规范没有指南 的情况。间隔4个月后,Anthropic 才首次下场发布了一份几十页的详尽 Skill 最佳构建指南,我们不妨花几分钟再从官方权威的"第一性视角"来完整回顾一下Skill的实践说明,看看我们自己的个人理解和标准设计者之间的理解是否相同。

本文从官方指南中提炼总结了关键内容供大家进行快速进行了解,包括Skill 的官方定义、设计原则、关键实现、评估迭代及常见误区等部分。如果想要完整了解Skill的设计和实践指南,推荐阅读官方的完整白皮书。

官方白皮书

resources.anthropic.com/hubfs/The-C...

官方定义:Skill 究竟是什么?

定义说明

首先,我们需要明确 Anthropic 对 Skill 的官方定义。它不是一个简单的提示(Prompt),也不是一个孤立的工具(Tool)。

官方定义 :一个 Skill 是一个封装了特定任务或工作流指令集的简单文件夹。它让 Agent 只需学习一次,就能在后续所有交互中重复使用你的偏好、流程和领域知识。

一个标准的 Skill 是一个包含以下内容的文件夹

js 复制代码
your-skill-name/ 
├── SKILL.md # **必需**:核心指令文件,包含 YAML 元数据 
├── scripts/ # 可选:可执行脚本 (Python, Bash 等) 
├── references/ # 可选:供 Skill.md 按需读取的参考文档
└── assets/ # 可选:用于生成结果的模板、图标等资源

核心设计原则

官方强调了 Skill 设计的三大核心原则,理解它们是构建高效 Skill 的前提。

原则一:渐进式披露 (Progressive Disclosure)

这是 Skill 最精妙的设计,旨在最大化能力、最小化 Token 消耗。它分为三层:

  • 第一层 (YAML Frontmatter) : 永远加载在系统提示中,只包含最核心的名称和描述,让 Agent 知道"何时"该用你。
  • 第二层 (SKILL.md 主体) : 当 Agent 认为 Skill 与当前任务相关时才会加载,包含完整的指令和工作流。
  • 第三层 (链接文件) : references/scripts/ 目录中的文件,只有在 Skill 指令引导 Claude去读取时才会被加载。
原则二:可组合性 (Composability)

Agent 可以同时加载多个 Skill。这意味着你的 Skill 需要像一个行为良好的微服务,专注于做好一件事,并能与其他 Skill 协同工作,而不是假设自己是系统中唯一的能力。

例如:

  • 一个"日志查询" Skill 可以和一个"代码审查" Skill 组合,实现从问题分析到代码定位修复的自动化闭环。

原则三:可移植性 (Portability)

一次创建,处处运行。一个标准的 Skill 能够在所有支持的环境中(如 Claude.ai 网页版、Claude Code 开发环境,以及通过 API 调用)无需修改即可一致地工作,前提是目标环境满足其依赖项(如特定的系统软件包或网络访问)。

简单来说,Skill 是连接"用户意图"和"底层工具"的智能胶水层。它教会Agent不仅"能做什么",更重要的是"应该如何一步步地、高质量地完成"。

Skill与Prompt、MCP、Tool的对比

Skill vs. Prompt vs. Tool:三者有何不同?

为了更清晰地理解 Skill 的定位,我们可以通过一个简单的表格来对比它与 Prompt 和 Tool 的区别:

对比维度 Skill (技能) Prompt (提示) Tool / Function (工具/函数)
核心本质 一个工作流 (Workflow) 的知识封装 一次性给予模型的指令 (Instruction) 一个模型可以调用的具体能力 (Capability)
形态 结构化的文件夹,包含指令、脚本、文档 自然语言文本 定义清晰的 API 接口 (如 OpenAPI Schema)
解决的问题 "应该如何做" (How to do it) "这次要做什么" (What to do now) "可以做什么" (What can be done)
典型场景 多步骤、可复用的流程,如"根据公司风格生成周报"、"执行代码审查并自动修复 Sentry 告警" 临时的、一次性的任务,如"帮我总结这段文字" 原子化的、确定性的操作,如"查询天气"、"发送邮件"
上下文消耗 低。通过"渐进式披露"按需加载,仅在触发时消耗少量 Token 高。每次都需要在上下文中完整提供 中等。调用时消耗接口定义的 Token

Skill 与工具调用 (MCP) 的关系:食谱与厨房

官方用一个生动的"厨房类比"阐明了 Skill 与工具调用 (Tool Use / MCP) 的关系:

  • MCP (Managed Connector Platform) :提供了一间专业厨房。它将 Claude 连接到外部服务(如 Notion, Jira, GitHub),提供了调用工具、获取实时数据的"设备和食材"。
  • Skill :则提供了食谱。它是一份份详细的分步说明,教导 Claude 如何使用这些设备和食材,以一致、可靠的方式烹饪出有价值的"菜肴"(即完成复杂工作流)。

什么时候需要 Skill?

当你发现自己或团队在可重复的工作流上花费大量时间时,就应该考虑构建 Skill。例如:

  • 根据产品规格说明书生成标准格式的前端代码。
  • 遵循固定的方法论进行用户研究和报告撰写。
  • 按照团队风格指南创建和格式化文档。
  • 编排一个需要调用多个 API、涉及多个步骤的复杂流程。

如果没有 Skill,用户即使连接了工具,也需要每次在对话中从头解释"该做什么"和"该怎么做",导致结果不一致、效率低下。Skill 将这些隐性的工作流知识显性化、标准化,从而实现真正的自动化。

构建高质量 Skill 的工程实践指南

官方指南用大量篇幅阐述了从设计到发布的完整生命周期。我们将其提炼为工程师最关心的几个核心实践维度。

1. 设计理念:从"能用"到"好用"

一个健壮的 Skill 应该遵循以下软件工程原则:

  • 原子化 与单一职责:一个 Skill 应该只做好一件定义明确的事情。避免创建一个"万能"的 Skill,它会变得难以维护和触发。例如,将"项目管理"拆分为"创建冲刺计划"、"生成项目周报"、"同步任务状态"等多个更小的 Skill。
  • 稳定的输入输出契约 :Skill 的触发条件和执行结果应该是可预测的。这不仅仅是技术要求,更是用户信任的基础。你的 SKILL.mddescription 字段就是这个契约最重要的部分。
  • 状态管理与 幂等性:如果 Skill 执行的是有副作用的操作(如创建、删除),需要考虑幂等性。多次执行同一个 Skill 不应该导致意外的重复操作。工作流中应包含检查"是否已存在"的逻辑。
  • 可监控与可观测:Skill 的执行过程应该像任何后端服务一样是可观测的。在 Skill 指令中明确定义关键步骤的日志输出格式,可以帮助你快速定位问题。

核心要点:把 Skill 当作一个" 微服务 "来设计。 它的 SKILL.md 就是 API 文档,scripts/ 目录就是业务逻辑实现,references/ 则是外部依赖文档。

2. 接口与数据契约:定义清晰的边界

一个 Skill 的核心在于其文件结构和 SKILL.md 的撰写质量。

文件夹与文件命名规范
  • 技能文件夹 : 必须使用短横线命名法 (kebab-case),例如 notion-project-setup。禁止使用空格、下划线或大写字母。
  • 核心文件 : 必须被准确命名为 SKILL.md (区分大小写)。
  • 禁止 README.md : 技能文件夹内不应包含 README.md,所有面向 Claude 的文档都应在 SKILL.mdreferences/ 目录中。
YAML 元数据:触发的"大脑"

SKILL.md 文件头部的 YAML Front Matter 是整个 Skill 中最重要的部分,它直接决定了 Claude 是否会以及何时加载你的 Skill。

最小必需格式:

yaml 复制代码
---
name: your-skill-name
description: What it does. Use when user asks to [specific phrases].
---

如何编写高效的 description

description 字段是渐进式披露的第一环,其核心任务是清晰地告诉Agent 两件事:这个 Skill 是做什么的,以及什么时候应该使用它。除此之外,再辅助对一些关键能力进行补充说明。

官方推荐结构 : [它做什么] + [何时使用] + [关键能力]

好的示例:

yaml 复制代码
# Good: 具体且可操作,包含触发短语
description: Analyzes Figma design files and generates developer handoff documentation. Use when user uploads .fig files, asks for "design specs", "component documentation", or "design-to-code handoff".

# Good: 包含用户可能提及的任务
description: Manages Linear project workflows including sprint planning, task creation, and status tracking. Use when user mentions "sprint", "Linear tasks", "project planning", or asks to "create tickets".

糟糕的示例:

makefile 复制代码
# Bad: 过于模糊
description: Helps with projects.

# Bad: 缺少触发条件
description: Creates sophisticated multi-page documentation systems.
SKILL.md 主体:清晰的指令是关键

在 YAML 元数据之后,便是用 Markdown 编写的实际指令。官方推荐包含指令 (Instructions)、示例 (Examples) 和故障排除 (Troubleshooting) 三个部分。

指令编写最佳实践:

  • 具体且可操作 : 不要说"验证数据",而要说"运行 python scripts/validate.py --input {filename} 来检查数据格式"。
  • 包含错误处理: 明确指出当某个步骤失败时(如 MCP 连接失败、API 返回错误),应该如何处理。例如,"如果你看到 'Connection refused',请检查 MCP 服务器是否正在运行"。
  • 清晰引用捆绑资源 : 如果 Skill 包含 references/ 目录,应在指令中明确引导 Agent 何时去查阅它们。例如,"在编写查询前,请查阅 references/api-patterns.md 以了解速率限制指南"。
  • 善用渐进式披露 : 保持 SKILL.md 主体指令的简洁性,将冗长的文档、复杂的示例或详细的 API 定义移至 references/ 目录中,并通过链接引用。

3. 安全与合规:构建可信的自动化

当 Skill 开始执行真实世界的操作时,安全成为第一要务。

  • 最小权限原则:Skill 依赖的工具(MCP/Tools)应该只被授予完成其任务所必需的最小权限。
  • 敏感操作确认 :对于删除数据、发起支付等高风险操作,Skill 的工作流中应强制包含一个"人机协作闭环",即在执行前向用户明确请求确认。
  • 失败安全 (Fail-safe) 与降级路径 :当工作流中某一步失败时,Skill 需要有明确的指令来处理。是重试、回滚,还是通知用户并终止?这必须在 SKIL.mdTroubleshooting 部分中定义清楚。
  • 越权防护description 字段也是一道安全防线。通过精确定义触发条件,可以防止 Skill 被恶意或无意地用于其设计范围之外的任务。

4. 评估与测试:确保 Skill 按预期工作

与传统软件测试类似,Skill 的评估也需要覆盖不同层面,官方推荐了三种测试方案:

测试类型 核心目标 方法示例
触发测试 (Triggering Tests) 确保 Skill 在正确的时间被加载,且不会在不相关时被误触发。> 需要准备一个测试用例集,包含应触发和不应触发的各类用户查询。 - 正向用例 : "帮我规划一个冲刺" -> 应该触发 sprint-planning skill。- 反向用例 : "今天天气怎么样" -> 应该触发 sprint-planning skill。
功能测试 (Functional Tests) 验证 Skill 的工作流是否能产出正确、API 调用是否成功,边缘情况是否能被妥善处理,且能够保持一致的结果。 给定输入(如项目名),断言 Skill 是否成功调用了所有预期的 API,并创建了符合规范的产出物。
性能对比 (Performance Comparison) 证明使用 Skill 比手动操作或纯 Prompt 更优。 将使用 Skill 前后的情况进行对比,用预设的成功指标(如完成任务所需的消息轮次、令牌消耗、失败率)来量化 Skill 带来的价值。

实践技巧 :Anthropic 推荐一个非常有效的方法------不要一开始就追求全面的测试覆盖率 。更有效的方法是,先聚焦于一个有代表性且稍有挑战性的任务,通过与Agent的反复对话、调试,直到这个任务可以被完美解决然后,将这个成功的交互过程和最终的解决方案让AI帮我们提炼、固化成一个 Skill。当你有了一个坚实的基础后,再扩展到更多的测试用例来保证其泛化能力。在我们使用OpenClaw或TraeCli等Agent时都可以广泛使用该技巧。

一个完整的 Skill 生命周期除了测试外,还包括与外部工具的集成、持续的测试迭代以及最终的分发共享:

  • 与工具 ( MCP ) 衔接: Skill 通过指令编排对 MCP 工具的调用。指令需要明确每个步骤应调用哪个工具、传递什么参数,并对预期输出进行说明。

  • 错误与异常处理 : 健壮的 Skill 必须定义失败路径。例如,如果 API 调用失败,是应该重试、回滚,还是向用户请求更多信息?这些都应在 SKILL.md 的"故障排除"部分明确。

  • 安全考量:

    • 保护措施 : YAML 元数据中禁止使用 XML 尖括号 (< >),以防止指令注入攻击。
    • 权限控制 : 可以在元数据中通过 allowed-tools 字段限制该 Skill 能够调用的工具范围,实现最小权限原则。

5. 版本化与发布:规范化的团队协作

当团队开始大规模构建和使用 Skill 时,规范化的管理变得至关重要。

  • 版本规范 : 建议在 SKILL.md 的元数据中加入 version 字段,便于管理和迭代。

  • 文档化 : 虽然 Skill 文件夹内不应有 README.md,但在托管 Skill 的代码仓库中,需要一个清晰的 README.md 文件来面向人类开发者,解释该 Skill 的用途、安装方法和使用示例。

  • 可复用 封装 与团队协作:

    • 个人使用: 用户可以在 Claude.ai 的设置中直接上传和管理自己的 Skill 文件夹 (或 .zip 压缩包)。
    • 组织共享: 管理员可以部署工作区范围的 Skill,实现团队内的自动更新和集中管理。
    • 开放标准: Anthropic 将 Skill 作为一项开放标准发布,鼓励其在不同 AI 平台间的移植和共享。

常见误区与反模式:官方避坑指南

五大常见误区

  1. 误区一:把 Skill 当作一堆 Prompt 的集合。

    1. 纠正 :Skill 的核心是工作流,并不仅是一个简化的Prompt,需要根据解决场景的SOP流程,从更系统化工程角度来完善SKILL.MD,并在文档中做好必要的处理步骤引导、引用关系的说明。
  2. 误区二:无契约的自由输入。

    1. 纠正description 就是 Skill 的 API 契约。必须清晰地定义它能做什么、不能做什么,以及何时被触发。
  3. 误区三:没有安全边界。

    1. 纠正:任何有副作用的 Skill 都必须设计确认环节和失败回滚路径。
  4. 误区四:缺少评估闭环。

    1. 纠正:构建 Skill 只是第一步。持续地进行触发测试和功能测试,并根据失败案例进行迭代,才是成功的关键。
  5. 误区五:版本漂移与无人维护。

    1. 纠正:将 Skill 纳入团队的 Git 工作流和 MLOps/DevOps 流程中,像维护代码一样维护它。

误区的总结分类

从触发和执行的维度,也可以将几个误区总结如下:

触发相关误区

  • 描述过于笼统 : 如 description: "Helps with projects",导致 Claude 无法判断何时使用。

  • 缺少具体触发短语 : 没有在 description 中包含用户可能实际使用的词汇或任务描述。

  • 触发过于频繁 : description 涵盖范围太广,导致 Skill 在不相关的查询中也被加载。解决方案 :在描述中加入负向触发器,如 Do NOT use for...,或让范围更具体,如从"处理文档"细化为"为合同审查处理 PDF 法律文件"。

执行相关误区

  • 把 Skill 当作普通 提示词: 忽略了结构化指令、错误处理和渐进式披露的重要性。
  • 未定义失败路径: Skill 只考虑了"成功"的情况,一旦某个环节出错,整个流程就会崩溃或产生不可预期的结果。
  • 指令模糊不清: 使用了"请妥善验证"这类模棱两可的语言,而不是给出确切的命令或检查项。
  • 过度依赖长上下文 : 将所有信息(数万字的参考文档)都堆砌在 SKILL.md 中,而不使用 references/ 目录进行拆分,导致性能下降和模型"惰性"。

快速上手建议

如果你想快速开始,官方建议了这样一个最小化但完整的路径:

  1. 识别用例 :找到一个你或你的团队高频重复的多步骤任务。例如,"每周从 Jira 同步数据到 Google Sheets 并生成图表"。

  2. 定义成功标准:明确什么样的结果算"成功"。例如,"一个包含最新数据和三个核心图表的 Google Sheet 链接被创建"。

  3. 对话式原型:先不要写 Skill!直接在一个新的 Claude 对话中,通过多轮对话手动引导 Claude 完成这个任务。把需要的工具(MCP)、数据源、操作步骤都告诉它。

  4. 提炼成 Skill :当你成功地让 Claude 完成任务后,将整个对话过程提炼成 SKILL.md

    1. 你的第一条指令 -> description 的一部分。
    2. 你提供的背景知识/API 文档 -> references/ 目录。
    3. 你引导的每个步骤 -> SKILL.md 主体的指令。
    4. 中间的 Python/Shell 脚本 -> scripts/ 目录。
  5. 本地测试:在 Claude.ai 或 Claude Code 中上传你的 Skill 文件夹,测试它是否能在新对话中被正确触发并独立完成任务。

  6. 迭代与分享 :根据测试中发现的失败案例(如触发失败、步骤错误),迭代优化你的 SKILL.md。当它足够稳定后,通过 Git 仓库分享给你的团队。

写在最后

Anthropic 提出的 Skill 概念,本质上是将软件工程的最佳实践(如模块化、版本控制、API 契约)引入到与大语言模型的交互中。它提供了一种在"万能"的通用模型和"固化"的专用工具之间,构建可复用、可维护、可演进的智能工作流的有效范式。

通过这份官方指南,我们可以看到构建一个强大的 Skill 不仅仅是"写 Prompt",更是一项严肃的工程活动。

相关推荐
冬奇Lab3 小时前
OpenClaw 深度解析(八):Skill 系统——让 LLM 按需学习工作流
人工智能·开源·源码阅读
冬奇Lab3 小时前
一天一个开源项目(第45篇):OpenAI Agents SDK Python - 轻量级多 Agent 工作流框架,支持 100+ LLM 与实时语音
人工智能·开源·openai
程序员Better3 小时前
3月9日AI圈热瓜速报:OpenClaw龙虾潮炸圈,大厂专属版上线太香了
aigc·ai编程·airbnb
小兵张健3 小时前
两个配置让 Codex 效率翻倍
人工智能·程序员·github copilot
程序新视界3 小时前
Mermaid+AI,告别“手搓”画流程图
ai编程
whinc4 小时前
🚀 两年小程序开发,我把踩过的坑做成了开源 Skills
前端·微信小程序·ai编程
kymjs张涛5 小时前
OpenClaw 学习小组:初识
android·linux·人工智能
yangpow25 小时前
拆解 OpenClaw 的 Skills 机制:一个为 AI Agent 设计的"包管理器"
人工智能