使用 Agent Skills 为现实世界配备 Agent

本文翻译自 Anthropic 官方博客:Equipping agents for the real world with Agent Skills

译者注:本文介绍了 Agent Skills,这是一个开放标准,用于为 Agent 提供可组合的、可扩展的能力。

更新:我们已于 2025 年 12 月 18 日将 Agent Skills 发布为跨平台可移植性的开放标准。

随着模型能力的提高,我们现在可以构建与完整计算环境交互的通用 Agent。例如,Claude Code 可以使用本地代码执行和文件系统跨领域完成复杂任务。但随着这些 Agent 变得越来越强大,我们需要更可组合、可扩展和可移植的方式来为它们配备特定领域的专业知识。

这促使我们创建了 Agent Skills:有组织的指令、脚本和资源文件夹,Agent 可以动态发现和加载这些内容以在特定任务上表现更好。Skills 通过将你的专业知识打包成 Claude 可组合的资源来扩展 Claude 的能力,将通用 Agent 转变为适合你需求的专业 Agent。

为 Agent 构建 Skill 就像为新员工制作入职指南一样。现在,任何人都可以通过捕获和共享他们的程序知识来使用可组合的能力专门化他们的 Agent,而不是为每个用例构建分散的、自定义设计的 Agent。在本文中,我们将解释 Skills 是什么,展示它们如何工作,并分享构建你自己的 Skills 的最佳实践。

要激活 Skills,你需要做的就是编写一个 SKILL.md 文件,其中包含为 Agent 定制的指导。

Skill 是一个包含 SKILL.md 文件的目录,该文件包含有组织的指令、脚本和资源文件夹,为 Agent 提供额外能力。

Skill 的剖析

为了看到 Skills 的实际应用,让我们通过一个真实示例来了解:为 Claude 最近推出的文档编辑功能提供支持的 Skills 之一。Claude 已经对理解 PDF 有很多了解,但在直接操作它们(例如填写表单)方面的能力有限。这个 PDF Skill 让我们能够赋予 Claude 这些新能力。

最简单地说,Skill 是一个包含 SKILL.md 文件的目录。此文件必须以包含一些必需元数据的 YAML frontmatter 开头:namedescription。在启动时,Agent 将每个已安装 Skill 的 namedescription 预加载到其系统提示中。

此元数据是渐进式披露第一级:它为 Claude 提供了足够的信息,以了解何时应使用每个 Skill,而无需将所有内容加载到上下文中。此文件的实际主体是第二级细节。如果 Claude 认为 Skill 与当前任务相关,它将通过将完整的 SKILL.md 读入上下文来加载 Skill。

SKILL.md 文件的剖析,包括相关元数据:名称、描述以及与 Skill 应采取的特定操作相关的上下文。

SKILL.md 文件必须以 YAML Frontmatter 开头,其中包含文件名和描述,这些在启动时加载到系统提示中。

随着 Skills 变得越来越复杂,它们可能包含太多上下文而无法放入单个 SKILL.md 中,或者仅在特定场景中相关的上下文。在这些情况下,Skills 可以在 Skill 目录中捆绑其他文件,并从 SKILL.md 中按名称引用它们。这些额外的链接文件是第三级(及更高级别)的细节,Claude 可以选择仅在需要时导航和发现它们。

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

如何将其他内容捆绑到 SKILL.md 文件中。

你可以将更多上下文(通过额外文件)合并到你的 Skill 中,然后可以由 Claude 根据系统提示触发这些上下文。

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

此图像描绘了 Skills 中上下文的渐进式披露。

具有文件系统和代码执行工具的 Agent 在处理特定任务时不需要将整个 Skill 读入其上下文窗口。这意味着可以捆绑到 Skill 中的上下文量实际上是无限的。

Skills 和上下文窗口

下图显示了当用户的消息触发 Skill 时上下文窗口如何变化。

此图像描绘了 Skills 如何在上下文窗口中触发。

Skills 通过系统提示在上下文窗口中触发。

显示的操作顺序:

  1. 首先,上下文窗口具有核心系统提示和每个已安装 Skill 的元数据,以及用户的初始消息;
  2. Claude 通过调用 Bash 工具读取 pdf/SKILL.md 的内容来触发 PDF Skill;
  3. Claude 选择阅读与 Skill 捆绑的 forms.md 文件;
  4. 最后,Claude 继续处理用户的任务,因为它已从 PDF Skill 加载了相关指令。

Skills 和代码执行

Skills 还可以包含代码供 Claude 根据其判断作为工具执行。

大型语言模型擅长许多任务,但某些操作更适合传统代码执行。例如,通过 token 生成排序列表比简单地运行排序算法要昂贵得多。除了效率考虑之外,许多应用程序需要只有代码才能提供的确定性可靠性。

在我们的示例中,PDF Skill 包括一个预先编写的 Python 脚本,用于读取 PDF 并提取所有表单字段。Claude 可以运行此脚本,而无需将脚本或 PDF 加载到上下文中。而且因为代码是确定性的,所以此工作流是一致且可重复的。

此图像描绘了 Skills 如何执行代码。

Skills 还可以包含代码供 Claude 根据任务性质作为工具执行。

开发和评估 Skills

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

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

使用 Skills 时的安全考虑

Skills 通过指令和代码为 Claude 提供新能力。虽然这使它们强大,但也意味着恶意 Skills 可能会在使用它们的环境中引入漏洞,或指示 Claude 渗漏数据并采取意外行动。

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

Skills 的未来

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

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

展望未来,我们希望能够让 Agent 自己创建、编辑和评估 Skills,让它们将自己的行为模式编码为可重用的能力。

Skills 是一个简单的概念,具有相应的简单格式。这种简单性使组织、开发者和最终用户更容易构建定制的 Agent 并为它们提供新能力。

我们很高兴看到人们用 Skills 构建什么。今天就开始查看我们的 Skills 文档和 cookbook。

致谢

由 Barry Zhang、Keith Lazuka 和 Mahesh Murag 撰写,他们都非常喜欢文件夹。特别感谢 Anthropic 的许多其他人,他们倡导、支持和构建了 Skills。