引言

本文基于  Anthropic 官方工程博客发布的《 Equipping agents for the real world with Agent Skills》一文进行解读与分析。随着 大型语言模型(LLM)能力的飞速发展,通用 AI 代理(Agent)已能与复杂的计算环境进行交互。然而,如何让这些通用代理高效、可扩展地掌握特定领域的专业知识,以解决真实世界中的具体问题,成为一个核心挑战。为应对这一挑战,Anthropic 推出了  Agent Skills 框架,它通过将专业知识封装为模块化的资源,将通用代理转变为能够满足特定需求的“专家”。本文将深入探讨 Agent Skills 的核心概念、工作原理、构建方法及其安全考量,帮助开发者和技术爱好者理解如何利用这一框架打造更强大的 AI 代理。

什么是 Agent Skills?

Agent Skills 是一种将指令、脚本和资源组织在特定文件夹中的机制,AI 代理可以动态地发现并加载这些“技能”,从而在执行特定任务时表现得更加出色。

您可以将其类比为为一位新员工准备的“入职指南”。传统方法是为每个应用场景构建一个零散、定制化的代理,而 Agent Skills 则允许任何人通过捕捉和共享其程序化知识,为通用代理赋予可组合的专业能力。

简单来说,一个“技能”就是一个包含 SKILL.md 文件的目录,该文件为代理提供了完成特定任务所需的全部指引。

激活技能的 SKILL.md 文件

Agent Skills 的核心设计:渐进式信息披露

Agent Skills 的设计核心是渐进式信息披露(Progressive Disclosure),这一原则确保了框架的灵活性和可扩展性。它模仿了组织良好的手册结构——从目录到章节,再到详细的附录,让代理只在需要时加载必要的信息,从而高效利用有限的上下文窗口。

技能的构成

一个技能的核心是 SKILL.md 文件,其结构和加载机制遵循渐进式披露的三个层次。

层次一:元数据发现

每个 SKILL.md 文件都必须以 YAML Frontmatter 开头,包含两个关键字段:name(名称)和 description(描述)。在代理启动时,它会预加载所有已安装技能的元数据。这为代理提供了关于每个技能用途的摘要信息,使其能够在不加载完整内容的情况下,判断哪个技能与当前任务相关。

SKILL.md 文件结构

层次二:核心指令加载

当代理根据元数据判断某个技能与任务相关时,它会读取 SKILL.md 文件的正文内容,将其加载到上下文中。这是渐进式披露的第二个层次,提供了执行任务所需的核心指令和步骤。

层次三:按需加载附加资源

对于复杂的技能,所有信息可能无法全部容纳于一个 SKILL.md 文件中。此时,开发者可以将额外的上下文(如参考文档、代码片段)拆分到技能目录下的其他文件中,并在 SKILL.md 中引用它们。这些被引用的文件构成了第三个及更深层次的细节,代理仅在需要时才会导航和读取它们。

例如,在一个用于处理 PDF 的技能中,核心的 SKILL.md 可以保持精简,同时引用一个专门用于处理表单填写的 forms.md 文件。只有当用户请求填写 PDF 表单时,代理才会加载 forms.md 的内容。

在 SKILL.md 中捆绑附加内容

渐进式披露的工作流程

下图直观地展示了渐进式披露如何帮助代理高效地管理上下文信息。代理从一个高层次的概览(技能列表)开始,逐步深入到具体的指令和资源,有效避免了上下文窗口的浪费。

技能中的渐进式信息披露机制

由于代理拥有文件系统和代码执行工具,它无需在处理任务时将技能的全部内容读入上下文。这意味着一个技能可以捆绑的上下文数量实际上是无限制的

技能如何与上下文窗口和代码执行交互

技能触发与上下文窗口管理

当用户发出请求时,技能的触发和加载过程会动态地改变代理的上下文窗口。以下是典型的操作序列:

  1. 初始状态:上下文窗口包含核心系统提示、所有已安装技能的元数据以及用户的初始消息。
  2. 技能触发:代理识别出需要使用某个技能(例如 pdf 技能),并通过 Bash 工具读取 pdf/SKILL.md 的内容。
  3. 加载附加文件:根据 SKILL.md 中的指令,代理决定读取与技能捆绑的附加文件,例如 forms.md
  4. 执行任务:在加载了所有相关指令后,代理开始执行用户的任务。

技能在上下文窗口中的触发过程

下面的 Mermaid 流程图清晰地展示了这一动态过程:

技能与代码执行的结合

Agent Skills 不仅能提供文本指令,还可以包含可执行的代码,代理可以根据任务需要自行决定是否运行这些代码。

虽然大语言模型在许多任务上表现出色,但某些操作(如对列表进行排序)通过传统代码执行会更高效、更可靠。此外,许多应用场景要求代码所能提供的那种确定性。

例如,一个 PDF 技能可以包含一个预先编写好的 Python 脚本,用于从 PDF 中提取所有表单字段。代理可以直接运行此脚本,而无需将脚本内容或 PDF 文件本身加载到上下文中。由于代码是确定性的,这种工作流程保证了结果的一致性和可重复性。

技能中的代码执行机制

如何开发和评估 Agent Skills

以下是 Anthropic 官方提供的一些关于创作和测试技能的最佳实践:

  • 从评估开始:首先确定代理在执行代表性任务时的能力差距。观察它在哪些环节遇到困难或需要额外上下文,然后逐步构建技能来弥补这些不足。
  • 为扩展而设计:当 SKILL.md 文件变得臃肿时,将其内容拆分到不同的文件中并进行引用。如果某些上下文是互斥或很少一起使用,保持路径分离可以减少 Token 的使用。代码既可以作为可执行工具,也可以作为文档供代理阅读参考。
  • 从代理的视角思考:密切关注代理在真实场景中如何使用你的技能,并根据观察进行迭代。特别注意技能的 name 和 description,因为代理会依据它们来决定是否触发技能。
  • 与代理共同迭代:在与代理协作完成任务时,让它将成功的方法和常见的错误记录下来,并固化为技能中的可复用上下文和代码。如果代理在使用技能时偏离了轨道,让它自我反思问题所在。这个过程能帮助你发现代理真正需要的上下文,而不是凭空猜测。

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

技能通过指令和代码为代理赋予了新能力,这也意味着恶意的技能可能会在执行环境中引入漏洞,或指示代理泄露数据、执行意外操作。

因此,官方强烈建议只从受信任的来源安装技能。在安装来自非信任来源的技能时,务必在使用前进行彻底审计。仔细阅读技能捆绑的所有文件,特别是代码依赖项、捆绑的资源(如图片或脚本),以及任何指示代理连接到潜在不受信任的外部网络的指令。

Agent Skills 的未来展望

目前,Agent Skills 已在 Claude.aiClaude Code、Claude Agent SDK 和 Claude 开发者平台中得到支持。Anthropic 计划继续添加支持技能创建、编辑、发现、共享和使用的功能。

未来,Agent Skills 有望与模型上下文协议(Model Context Protocol, MCP)服务器互补,通过教会代理更复杂的工作流来与外部工具和软件交互。更长远的目标是使代理能够自主创建、编辑和评估技能,将自身的行为模式固化为可复用的能力。

总而言之,Agent Skills 是一个看似简单却极具潜力的概念。它的简洁性使得组织、开发者和最终用户都能更轻松地构建定制化的 AI 代理,并赋予它们强大的新能力。我们期待看到社区利用这一框架创造出更多创新的应用。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐