Anthropic 最近虽然口碑差,但人才密度还是高,继 MCP 之后他们又新推出来 Agent Skills,这个思路非常好,既给了 Agent 确定性,也给了其几乎无限的上下文,顺便帮你省了钱。也算是和 MCP 互补,一个连接外部系统,一个连接本地脚本和文档。

Agent Skills 的核心思想也很简单,就是通过提供一个由Skill、脚本和资源组成的结构化文件夹,将领域专家的知识打包在这些文件夹中,让 Agent 能够动态加载这些“Skills”。

Skill 的构成与工作原理大概是下面这样:

  1. 一个 Agent Skill 本质上就是一个包含 SKILL.md 文件的目录,该文件有一定的规范,比如必须以包含元数据(如name和description)的 YAML 前置内容开头等等。

  2. Agent Skills 通过分层加载信息来高效管理上下文窗口:

第一层: Agent 在启动时仅加载所有已安装 Skill 的name 和 description,以便知道何时使用某个 Skill。

第二层: 当 Agent 认为某个 Skill 与当前任务相关时,它会读取该技能的 SKILL.md 文件的完整内容。

第三层及以上: 对于更复杂的任务,技能可以包含额外的辅助文件(如 reference.md 或脚本)。Agent 只在需要时才会读取这些文件,这个意思基本就是 Skills 可以包含几乎无限的上下文信息。

Skill 中可以包含预先编写好的固定的代码(如 Python 脚本)。Agent 可以像使用工具一样执行这些代码,以处理传统代码更擅长的确定性或高效率的任务,而不需要把代码本身加载到上下文中。

这个的好处很明显,把AI 生成的质量不稳定的代码变成稳定可控的代码,既大大缩小上下文,也节省了很多成本。

这篇文章中也举了两个 Skills 的典型应用例子:

  1. 通过AI 生成的代码来对列表进行排序,远比简单地运行一个排序算法要昂贵得多。除了效率问题,许多应用还需要只有代码才能提供的确定性可靠性。

  2. PDF Skills 包含一个预先编写的 Python 脚本,用于读取 PDF 并提取所有表单字段。Claude 可以在不将脚本或 PDF 加载到上下文的情况下运行此脚本。而且由于代码是确定性的,这个工作流程是一致且可重复的。

原文:为智能体配备 Agent Skills 以适应真实世界

随着模型能力的提升,我们现在可以构建与功能齐全的计算环境进行交互的通用智能体。例如,Claude Code 能够利用本地代码执行和文件系统,完成跨领域的复杂任务。但随着这些智能体变得越来越强大,我们需要更具组合性、可扩展性和可移植性的方法来为它们赋予特定领域的专业知识。

这促使我们创造了 Agent Skills (智能体技能):这是一些包含指令、脚本和资源的结构化文件夹,智能体可以动态地发现并加载它们,以便在特定任务上表现得更好。技能通过将您的专业知识打包成可供 Claude 使用的组合式资源,来扩展 Claude 的能力,从而将通用智能体转变为符合您需求的专业智能体。

为智能体构建一项技能,就像为新员工准备一份入职指南。现在,任何人都可以通过捕获和分享他们的程序性知识,来为他们的智能体赋予可组合的能力,而无需为每个用例构建零散、定制化的智能体。在本文中,我们将解释什么是技能、展示它们如何工作,并分享构建您自己技能的最佳实践。

要激活技能,您只需编写一个包含对智能体的自定义指导的 SKILL.md 文件。 一项技能是一个包含 SKILL.md 文件的目录,该文件包含结构化的指令、脚本和资源文件夹,为智能体提供额外的能力。

技能的构成

为了解技能的实际应用,我们来看一个真实的例子:为 Claude 最近推出的文档编辑功能 提供支持的技能之一。Claude 已经非常了解如何理解 PDF,但直接操作它们(例如填写表单)的能力有限。这个 PDF 技能 让我们能够赋予 Claude 这些新能力。

最简单的情况下,一项技能就是一个包含 SKILL.md 文件的目录。该文件必须以包含一些必需元数据(namedescription)的 YAML frontmatter 开头。在启动时,智能体会将每个已安装技能的 namedescription 预加载到其系统提示中。

这些元数据是渐进式披露第一层:它仅提供足够的信息,让 Claude 知道何时应使用每项技能,而无需将所有内容都加载到上下文中。该文件的实际正文是第二层细节。如果 Claude 认为该技能与当前任务相关,它将通过读取完整的 SKILL.md 文件内容来加载该技能。

SKILL.md 文件的构成,包括相关元数据:名称、描述以及与该技能应采取的具体行动相关的上下文。 SKILL.md 文件必须以包含文件名和描述的 YAML Frontmatter 开头,这些信息在启动时会加载到其系统提示中。

随着技能变得越来越复杂,它们可能包含过多的上下文,无法全部放入单个 SKILL.md 文件中,或者某些上下文仅在特定场景下才相关。在这些情况下,技能可以在技能目录中捆绑其他文件,并从 SKILL.md 中按名称引用它们。这些额外的链接文件是第三层(及更深层次)的细节,Claude 可以根据需要选择性地导航和发现。

在下面展示的 PDF 技能中,SKILL.md 引用了两个额外文件(reference.mdforms.md),技能作者选择将它们与核心的 SKILL.md 一起捆绑。通过将填写表单的指令移至一个单独的文件(forms.md),技能作者能够保持技能核心的精简,并相信 Claude 只会在填写表单时才读取 forms.md

如何将额外内容捆绑到 SKILL.md 文件中。 您可以将更多上下文(通过额外文件)整合到您的技能中,然后 Claude 可以根据系统提示触发这些内容。

渐进式披露是使智能体技能灵活且可扩展的核心设计原则。就像一本组织良好的手册,从目录开始,然后是具体章节,最后是详细的附录,技能让 Claude 能够仅在需要时加载信息:

拥有文件系统和代码执行工具的智能体在处理特定任务时,无需将技能的全部内容读入其上下文窗口。这意味着可以捆绑到技能中的上下文数量实际上是无限的。

技能与上下文窗口

下图展示了当用户消息触发一项技能时,上下文窗口的变化情况。

此图描绘了技能如何在您的上下文窗口中被触发。 技能通过您的系统提示在上下文窗口中被触发。

所展示的操作序列:

  1. 开始时,上下文窗口包含核心系统提示、每个已安装技能的元数据以及用户的初始消息;
  2. Claude 通过调用 Bash 工具读取 pdf/SKILL.md 的内容来触发 PDF 技能;
  3. Claude 选择读取与该技能捆绑的 forms.md 文件;
  4. 最后,在从 PDF 技能加载了相关指令后,Claude 继续执行用户的任务。

技能与代码执行

技能还可以包含代码,供 Claude 自行决定作为工具来执行。

大型语言模型在许多任务上表现出色,但某些操作更适合传统的代码执行。例如,通过生成 Token 来对列表进行排序,远比简单地运行一个排序算法要昂贵得多。除了效率问题,许多应用还需要只有代码才能提供的确定性可靠性。

在我们的例子中,PDF 技能包含一个预先编写的 Python 脚本,用于读取 PDF 并提取所有表单字段。Claude 可以在不将脚本或 PDF 加载到上下文的情况下运行此脚本。而且由于代码是确定性的,这个工作流程是一致且可重复的。

此图描绘了代码如何通过技能执行。 技能还可以包含代码,供 Claude 根据任务的性质自行决定作为工具来执行。

开发和评估技能

以下是开始编写和测试技能的一些有用指南:

  • 从评估开始: 通过在代表性任务上运行您的智能体,并观察它们在哪些地方遇到困难或需要额外上下文,来识别其能力的具体差距。然后逐步构建技能以弥补这些不足。
  • 为扩展而构建结构:SKILL.md 文件变得难以管理时,将其内容拆分到单独的文件中并进行引用。如果某些上下文是互斥的或很少一起使用,保持路径分离将减少 Token 的使用。最后,代码既可以作为可执行工具,也可以作为文档。应该明确 Claude 是应该直接运行脚本,还是将其作为参考读入上下文。
  • 从 Claude 的角度思考: 在真实场景中监控 Claude 如何使用您的技能,并根据观察进行迭代:注意意外的执行路径或对某些上下文的过度依赖。特别关注您技能的 namedescription。Claude 在决定是否响应当前任务而触发技能时会用到这些信息。
  • 与 Claude 一起迭代: 当您与 Claude 一起处理任务时,要求 Claude 将其成功的方法和常见错误捕获到可重用的上下文和代码中,形成一项技能。如果在使用技能完成任务时偏离了轨道,请让它自我反思哪里出了问题。这个过程将帮助您发现 Claude 真正需要的上下文,而不是试图预先猜测。

使用技能时的安全注意事项

技能通过指令和代码为 Claude 提供了新能力。虽然这使它们非常强大,但也意味着恶意的技能可能会在其使用环境中引入漏洞,或指示 Claude 窃取数据并执行非预期的操作。

我们建议仅从受信任的来源安装技能。当从不太受信任的来源安装技能时,请在使用前对其进行彻底审计。首先阅读技能中捆绑的文件内容以了解其功能,特别注意代码依赖项和捆绑的资源(如图像或脚本)。同样,要注意技能中指示 Claude 连接到可能不受信任的外部网络源的指令或代码。

技能的未来

Agent Skills 目前已在 Claude.ai、Claude Code、Claude Agent SDK 和 Claude 开发者平台中得到支持

在未来几周,我们将继续增加功能,以支持创建、编辑、发现、分享和使用技能的整个生命周期。我们对技能能够帮助组织和个人与 Claude 分享他们的上下文和工作流程的机会感到特别兴奋。我们还将探索技能如何通过教授智能体涉及外部工具和软件的更复杂工作流程,来补充模型上下文协议 (MCP) 服务器。

展望未来,我们希望使智能体能够自行创建、编辑和评估技能,让它们将自己的行为模式固化为可重用的能力。

技能是一个简单的概念,其格式也相应简单。这种简单性使得组织、开发者和最终用户更容易构建定制化的智能体并赋予它们新能力。

我们很期待看到大家用技能构建出什么样的作品。立即通过查阅我们的技能文档食谱开始吧。

致谢

由 Barry Zhang、Keith Lazuka 和 Mahesh Murag 撰写,他们都非常喜欢文件夹。特别感谢 Anthropic 公司中许多倡导、支持和构建技能的同事。