Agent Skills
随着模型能力的提升,我们现在可以构建能够与完整计算环境交互的通用智能体。例如,Claude Code 可以利用本地代码执行和文件系统完成跨领域的复杂任务。但随着这些智能体变得更加强大,我们需要更可组合、可扩展且可移植的方式来为它们装备领域专业知识。
这促使我们创建了 Agent Skills:包含指令、脚本和资源的组织化文件夹,智能体可以动态发现并加载这些资源,以在特定任务中表现得更好。Skills通过将您的专业知识打包为Claude的可组合资源,扩展了Claude的能力,将通用智能体转变为适合您需求的专用智能体。
为智能体构建技能就像为新员工准备入职指南。与其为每个用例构建碎片化、定制设计的智能体,现在任何人都可以通过捕获和分享他们的程序性知识,用可组合的能力来专门化他们的智能体。在本文中,我们将解释什么是Skills,展示它们的工作原理,并分享构建您自己的技能的最佳实践。

一个技能是一个包含SKILL.md文件的目录,该文件包含组织化的指令、脚本和资源文件夹,为智能体提供额外的能力。
技能的结构
为了了解Skills的实际应用,让我们通过一个真实示例来逐步了解:为Claude最近推出的文档编辑能力提供支持的技能之一。Claude已经对PDF理解有很多了解,但在直接操作PDF方面(例如填写表格)能力有限。这个 PDF技能 让我们能够为Claude提供这些新能力。
最简单的形式下,一个技能是一个包含SKILL.md文件的目录。该文件必须以包含一些必需元数据的YAML frontmatter开头:name和description。在启动时,智能体将每个已安装技能的name和description预加载到其系统提示中。
这个元数据是第一层的渐进式披露:它提供足够的信息,让Claude知道何时应该使用每个技能,而无需将所有内容加载到上下文中。该文件的实际正文是第二层细节。如果Claude认为该技能与当前任务相关,它将通过读取完整的SKILL.md到上下文中来加载该技能。

SKILL.md文件必须以包含文件名和描述的YAML Frontmatter开头,这在启动时被加载到系统提示中。
随着技能复杂性的增加,它们可能包含太多上下文而无法放入单个SKILL.md中,或者包含仅在某些特定场景中相关的上下文。在这些情况下,技能可以在技能目录中捆绑额外的文件,并从SKILL.md中按名称引用它们。这些额外的链接文件是第三层(及更高层)的细节,Claude可以仅在需要时选择导航和发现。
在下面展示的PDF技能中,SKILL.md引用了两个额外的文件(reference.md和forms.md),技能作者选择将这些文件与核心SKILL.md捆绑在一起。通过将表单填写说明移至单独的文件(forms.md),技能作者能够保持技能核心的精简,相信Claude仅在填写表单时才会读取forms.md。

您可以将更多上下文(通过额外文件)纳入您的技能中,然后Claude可以根据系统提示触发这些上下文。
渐进式披露是使Agent Skills灵活且可扩展的核心设计原则。就像一本组织良好的手册,从目录开始,然后是特定章节,最后是详细的附录,技能让Claude仅在需要时加载信息:

具有文件系统和代码执行工具的智能体在处理特定任务时,不需要将整个技能读入其上下文窗口。这意味着可以捆绑到技能中的上下文量实际上是无限的。
技能与上下文窗口
下图显示了当用户消息触发技能时,上下文窗口如何变化。

技能通过系统提示在上下文窗口中触发。
展示的操作序列:
- 开始时,上下文窗口具有核心系统提示和每个已安装技能的元数据,以及用户的初始消息;
- Claude通过调用Bash工具读取
pdf/SKILL.md的内容来触发PDF技能; - Claude选择读取与技能捆绑的
forms.md文件; - 最后,Claude现在已从PDF技能加载了相关指令,继续处理用户的任务。
技能与代码执行
技能还可以包含代码,供Claude酌情作为工具执行。
大型语言模型在许多任务上表现出色,但某些操作更适合传统的代码执行。例如,通过令牌生成对列表进行排序远比简单地运行排序算法昂贵。除了效率问题,许多应用程序需要只有代码才能提供的确定性可靠性。
在我们的示例中,PDF技能包含一个预编写的Python脚本,用于读取PDF并提取所有表单字段。Claude可以运行此脚本,而无需将脚本或PDF加载到上下文中。而且因为代码是确定性的,此工作流程是连贯且可重复的。

技能还可以包含代码,供Claude根据任务的性质酌情作为工具执行。
开发和评估技能
以下是一些有助于开始编写和测试技能的指南:
- 从评估开始: 通过让智能体在代表性任务上运行并观察它们在哪里遇到困难或需要额外上下文,来识别智能体能力的特定差距。然后逐步构建技能以解决这些不足。
- 为扩展而构建结构: 当
SKILL.md文件变得笨拙时,将其内容拆分为单独的文件并引用它们。如果某些上下文是互斥的或很少一起使用,保持路径分离将减少令牌使用。最后,代码既可以用作可执行工具,也可以用作文档。应该清晰表明Claude是应该直接运行脚本,还是将其作为参考读入上下文。 - 从Claude的角度思考: 监控Claude在实际场景中如何使用您的技能,并根据观察进行迭代:注意意外的轨迹或对某些上下文的过度依赖。特别注意您技能的
name和description。Claude在决定是否响应其当前任务触发技能时将使用这些信息。 - 与Claude一起迭代: 当您与Claude一起处理任务时,要求Claude将其成功的方法和常见错误捕获到技能中的可重用上下文和代码中。如果它在使用技能完成任务时偏离轨道,要求它自我反思出了什么问题。此过程将帮助您发现Claude实际需要什么上下文,而不是试图预先预测它。
使用技能时的安全考虑
技能通过指令和代码为Claude提供新能力。虽然这使得它们功能强大,但也意味着恶意技能可能会在使用它们的环境中引入漏洞,或者指示Claude窃取数据并采取意外操作。
我们建议仅从可信来源安装技能。当从较不可信的来源安装技能时,请在使用前彻底审核它。首先阅读技能中捆绑的文件内容以了解其功能,特别注意代码依赖项和捆绑的资源,如图像或脚本。同样,注意技能中指示Claude连接到可能不受信任的外部网络源的指令或代码。
参考
https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills
https://github.com/anthropics/skills
https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview