手记

为现实世界配备智能体技能

更新:我们已将智能体技能发布为跨平台可移植性的开放标准。(2025年12月18日)

随着模型能力的不断增强,如今我们已经能够构建出可以同功能完备的计算环境进行交互的通用智能体。例如,Claude Code便能利用本地代码执行和文件系统来完成跨领域的复杂任务。然而,随着智能体日益强大,我们需要采用更具可组合性、可扩展性和可移植性的方式,来为它们赋予专业的领域知识。

这促使我们创建了智能体技能:由指令、脚本和资源组成的有组织文件夹,智能体可以动态发现和加载这些内容,以在特定任务中表现更佳。技能通过将您的专业知识打包成可组合资源来扩展Claude的能力,从而将通用智能体转变为满足您需求的专用智能体。

为智能体构建技能,就好比为一位新员工准备入职指南。无需为每个用例构建零散、定制设计的智能体,现在任何人都可以通过捕获和共享其流程性知识,用可组合能力来专业化他们的智能体。在本文中,我们将解释什么是技能,展示它们的工作原理,并分享构建自有技能的最佳实践。

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

技能的结构

为了了解技能的实际运作,让我们看一个真实示例:支持Claude最近推出的文档编辑能力的技能之一。Claude已经对理解PDF有很多了解,但在直接操作PDF方面能力有限。这个PDF技能让我们能够赋予Claude这些新能力。

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

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

SKILL.md文件必须以包含文件名和描述的YAML前言开始,这些内容在启动时加载到系统提示中。

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

在下面显示的PDF技能中,SKILL.md引用了两个附加文件,技能作者选择将它们与核心SKILL.md捆绑在一起。通过将表单填写指令移动到单独的文件中,技能作者能够保持技能核心的精简,相信Claude只会在填写表单时读取该文件。

您可以将更多上下文(通过附加文件)整合到您的技能中,然后可以由Claude根据系统提示触发。

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

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

技能与上下文窗口

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

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

显示的操作序列:

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

技能与代码执行

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

大型语言模型在许多任务上表现出色,但某些操作更适合传统的代码执行。例如,通过令牌生成排序列表比简单地运行排序算法成本高得多。除了效率问题外,许多应用需要只有代码才能提供的结果确定性。

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

技能还可以包含代码,供Claude根据任务性质自行决定作为工具执行。

开发和评估技能

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

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

使用技能时的安全考虑

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

我们建议仅从受信任的来源安装技能。当从不太受信任的来源安装技能时,请在使用前彻底审核它。首先,应仔细阅读技能包内所有文件的内容,以彻底了解其功能,特别注意代码依赖项和捆绑资源。同样,注意技能中指示Claude连接到可能不受信任的外部网络源的指令或代码。

技能的未来

智能体技能目前已在多个平台上得到支持。

在接下来的几周内,我们将继续添加支持创建、编辑、发现、共享和使用技能全生命周期的功能。我们特别期待技能能帮助组织和个人与Claude共享其上下文和工作流程。我们还将探索技能如何通过教导智能体涉及外部工具和软件的更复杂工作流程来补充模型上下文协议服务器。

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

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

我们期待看到人们用技能构建什么。立即开始,查看我们的技能文档和示例库。

致谢

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

0人推荐
随时随地看视频
慕课网APP