一文读懂 Agent Skills:定义、结构与工程实践

一、的Agent Skills官方定义与核心理念

Anthropic 对 Agent Skills 的官方定义是:

这句定义值得逐词拆解,因为它精准地揭示了 Skills 的本质:

“organized collections of files” —— 文件系统抽象,极低创作门槛

Skill 不是一个复杂的二进制文件或需要编译的插件,它就是一个文件夹。里面放的主要是 Markdown 文本文件和可选的脚本。这意味着:

创建 Skill 的门槛极低——会用文本编辑器就能写

版本控制天然友好——直接放进 Git 仓库,diff、merge、blame 全部可用

分发极其简单——压缩打包或直接 clone 即可

“composable” —— 乐高积木式组合与嵌套

Skills 被设计成可以自由组合。一个复杂的任务可以由多个 Skill 协作完成:Pipeline 模式串联执行、多个 Skill 并行触发、或者一个 Skill 内部调用另一个 Skill 的能力。这种可组合性让 Skills 生态可以像乐高一样快速搭建复杂工作流。

“procedural knowledge” —— 过程性知识(How),而非陈述性知识(What)

这是最关键的区分。陈述性知识是“事实”(What)——比如“Python 的列表推导式语法是这样的”。过程性知识是“方法”(How)——比如“在这个项目里,当你需要过滤一个列表时,应该用列表推导式还是 filter 函数?为什么?代码应该写在哪个文件里?遵循什么命名规范?”

Skills 封装的是后者——那种“在这个具体场景下,应该这么做”的知识。这种知识在传统组织中存在于资深员工的头脑里、散落在各种 Wiki 页面中、口口相传却从未被系统化。Skills 让这种知识第一次可以被“打包”和“分发”。

核心理念:Skills 的本质是“可执行的知识”

Skill 不仅仅是文档——它里面可以包含可执行脚本。一个 PDF 处理 Skill 不只是告诉 Agent“你应该用 pypdf 库来处理 PDF”,它直接提供了一个写好的 Python 脚本,Agent 可以直接调用。

Skill 既教 Agent“怎么做”,又提供“做”的具体工具。

二、基础文件结构详解

Skill 在整个 Agent 中的位置如下图:

以 Claude 为例,Skills 在代码执行环境中运行,Claude 在该环境中具有文件系统访问权限、bash 命令和代码执行能力。Skills 作为目录存在于虚拟机上,Claude 使用与您在计算机上导航文件相同的 bash 命令与它们交互。

一个 Skill 是一个文件夹,文件夹结构类似下面这样:

或者这样:

其中只有SKILL.md是必须的。可选的文件或文件夹可以根据需要调整。

我们以下面这种结构来拆解分析

2.1 SKILL.md:双层结构解析

SKILL.md 是每个 Skill 的核心文件,由两部分组成:

YAML 元数据区(Frontmatter)

位于文件开头,用---包裹,定义 Skill 的元信息:

Markdown 指令区

位于 YAML 元数据区之后,是 Skill 的核心指令内容。包含:

触发条件说明:什么情况下应该使用这个 Skill

工作流步骤:详细的操作流程,一步一步指导 Agent

工具使用指南:何时调用哪个脚本或工具

输出格式要求:期望的输出结构和格式

注意事项和边界:什么能做、什么不能做、有什么坑

工程实践建议:

控制长度:SKILL.md 指令体建议≤500 行,超出部分移入references/

使用结构化标题:便于 Agent 精准定位信息,降低注意力稀释

避免过长的嵌套结构:Markdown 层级不宜过深,Agent 对深层嵌套的解析容易出错

2.2 scripts/:行动力目录

scripts/ 目录包含可执行代码——Python 脚本、Bash 脚本、JavaScript 等。这是 Skill 从“知道”到“做到”的关键。

scripts/ 目录包含多个功能脚本。

这些脚本被设计为 CLI 工具,Agent 可以直接通过命令行调用,传入参数获取结果。这比让 Agent 自己生成代码有两个巨大优势:

1.确定性:脚本是预先写好和测试过的,行为可预期

2.效率:Agent 不需要每次重新生成代码,直接调用即可

安全警示:scripts/ 也是 Skill 最大的安全风险来源。任何可执行代码都可能在用户系统上以用户权限运行。详见第 5 章的安全分析。

2.3 references/:领域知识库

references/ 存放只读的参考文档:

规则文档(如代码规范、品牌指南)

领域知识(如 API 文档、数据库 schema)

使用示例和最佳实践

指令(instructions)与参考(references)的分离是重要的设计原则:SKILL.md 中的指令应该是简洁的工作流描述,具体的细节文档放到 references/ 中,通过 Markdown 链接引用。这样既保持指令的可读性,又确保需要时可以查阅详细信息。

2.4 assets/:视觉与素材资源

assets/ 存放静态资源:

图标和图片

输出模板(如 Word 模板、PPT 母版)

配置文件样例

用于提升 Skill 的可视化表达与输出标准化。例如 brand-guidelines Skill 可以在 assets/ 中存放品牌 Logo 和配色方案文件。

三、渐进式披露:核心设计原理

设计动机:有限上下文窗口 vs. 无限能力扩展需求的根本矛盾

这是一个根本性的工程矛盾。我们想让 Agent 拥有尽可能多的能力,但上下文窗口是有限的。而且,把所有能力全部塞进上下文不仅浪费 token,还会严重稀释模型的注意力——模型在面对大量工具描述时,既要理解当前任务,又要判断该用哪个工具,本身就会出现注意力分散。

三种传统方案的困境:

全量加载:把所有知识都放进 SystemPrompt → 上下文占用 15k+ tokens,资源浪费,扩展性差

多 Agent 架构:每个 Agent 只加载自己的专业领域 → 局部看仍然是全量加载,切换成本高

RAG:向量检索动态加载知识→ 流程性知识检索失真,上下文碎片化,准确率上限 70-80%

AgentScope 团队用一个精彩的类比说明了问题本质:想象你是一位电商平台的全能客服,需要处理订单、退款、技术故障、投诉等各类问题。

全量加载:就像入职培训时把几十本手册全部背下来,即使用户只问个快递单号也要承载所有记忆负担

多 Agent 方案:就像把你拆分成订单客服、退款客服、技术客服,每通电话都需要“语音导航”判断转给谁

RAG 方案:就像有个助手根据问题去知识库搜索,但可能搜到过期的政策,或者只搜到零散的操作步骤却漏掉关键前置条件

我们需要的是一种更聪明的机制:Agent 脑子里有个清晰的“目录”,平时只记住目录,需要时才查阅完整内容。这就是渐进式披露(Progressive Disclosure)。

三层加载架构

不同的 Agent 架构设计,对 Skill 加载可能略有不同,我们以 Claude Code 为例。

我们仍然以下面这种结构来拆解分析:

渐进式披露将 Skill 的信息分为三个层次,Agent 按需逐步加载:

第一层:元数据层(启动时加载)

内容:每个 Skill 的 SKILL.md 文件夹中的name和description两个字段内容

加载时机:Agent 启动时预加载进系统提示

Token 消耗:每个 Skill 约 30-50 tokens

作用:让 Agent 知道“有什么能力可用”,作为触发判断的依据

第二层:指令层(任务触发时加载)

内容:完整的SKILL.md文件(包含 YAML 元数据和 Markdown 指令体)

加载时机:Agent 判断某个 Skill 与当前任务相关时

作用:获取详细的操作指南、工作流步骤、注意事项

第三层:资源层(执行需要时加载)

内容:references/中的参考文档、scripts/中的脚本、assets/中的资源文件

加载时机:执行具体操作需要时(如填写 PDF 表单时才加载forms.md)

作用:提供深度领域知识和可执行代码

效果:拥有数百个 Skills 不会陷入上下文过载。Agent 启动时只加载所有 Skill 的元数据(几百个 Skill 也不过几千 tokens),只有真正用到的 Skill 才会被完整加载。Token 成本线性可控,而不是随 Skill 数量爆炸式增长。

@vurb/skills 这个 npm 包很好地实现了这一架构,提供了三层工具:skills.search(搜索元数据)→ skills.load(加载完整指令)→ skills.read_file(读取辅助文件)。

四、Agent 如何发现、选择、使用与组合 Skills

发现(Discovery)

Agent 启动时,会扫描 Skills 目录,将所有 SKILL.md 的 YAML 元数据(name + description)预加载进系统提示。这使得 Agent 在每次对话开始时就知道自己“工具箱里有什么”。

关键设计点:description 是触发匹配的核心。一个好的 description 应该包含丰富的关键词,让 Agent 能够在用户描述任务时准确识别相关 Skill。

选择(Selection)

Agent 基于元数据匹配判断相关 Skill。当用户提出任务时,Agent 会:

扫描所有已安装 Skill 的 description

语义匹配判断哪些 Skill 可能相关

按需触发加载这些 Skill 的完整内容

这个过程是全自动的——用户不需要手动指定“请使用 PDF Skill”,只需要正常描述任务(“帮我提取这份合同里的付款条款”),Agent 会自动识别并激活正确的 Skill。

使用(Execution)

Skill 被激活后,Agent 会:

1.读取完整的 SKILL.md 指令体

2.按照指令中的工作流步骤执行

3.需要时调用 scripts/ 中的脚本、查阅 references/ 中的文档或 assets/ 中的资源

4.按照指令要求的格式输出结果

当 Skill 被触发时,Claude 使用 bash 从文件系统读取 SKILL.md,将其指令带入上下文窗口。如果这些指令引用了其他文件(如 FORMS.md 或数据库模式),Claude 也会使用额外的 bash 命令读取这些文件。当指令提到可执行脚本时,Claude 通过 bash 运行它们,只接收输出(脚本代码本身永远不会进入上下文)。

组合(Composition)

Skills 支持多种组合方式:

并行触发:多个相关 Skill 同时被激活,Agent 综合它们的指令执行

Pipeline 模式:多个 Skill 顺序编排,前一个的输出作为后一个的输入

嵌套调用:一个 Skill 在指令中明确引用另一个 Skill

五、五大标准设计模式

源自 Google Cloud Tech 团队对 Skills 生态的系统研究,这五种设计模式覆盖了绝大多数 Skill 的应用场景:

Tool Wrapper 执行流程和示例:

Generator 执行流程和示例:

Reviewer 执行流程和示例:

Inversion 执行流程和示例:

pipeline 执行流程和示例:

模式组合示例:

每种模式都解决了不同的问题。使用如下这个决策树来为你的用例寻找正确的模式:

Pipeline + Reviewer:每个阶段嵌入审查节点。例如代码部署 Pipeline:代码生成 → 代码审查 → 测试执行 → 安全审计 → 人工确认 → 部署

Generator + Inversion:先收集参数再标准化生成。例如周报生成 Skill:先提问收集本周关键事项 → 确认优先级和重点 → 按模板生成标准化周报

Pipeline + Generator + Reviewer:完整文档生产流水线。先收集素材→ 生成初稿 → 格式审查 → 内容审查 → 人工修改 → 定稿发布

这些模式不是理论推演,而是从大量实际 Skills 中提炼出来的最佳实践。掌握这五种模式,就可以系统化地设计和创建高质量的 Skills。

六、Skill 工程实践建议

控制长度

SKILL.md 指令体建议控制在 500 行以内。超过这个长度会带来两个问题:一是 Agent 在长文本中定位信息的效率下降,二是加载时间变长。如果内容确实很多,将详细说明移入references/,通过 Markdown 链接引用。

使用结构化标题

用清晰的 Markdown 标题层级组织内容(H1 用于主标题,H2 用于大节,H3 用于小节)。Agent 更容易在结构清晰的文档中定位信息。避免过深的嵌套,H4 及以下层级容易在模型注意力中丢失。

与版本控制整合

Skills 天然适合 Git 管理:

每个 Skill 独立仓库或 monorepo 中的独立目录

使用 Git 进行版本控制和协作

Code Review 确保 Skill 质量

标签和 Release 管理 Skill 版本

评测(Evals)驱动迭代

2026 年 3 月,Anthropic 为 skill-creator 新增了测试框架——可以写 evals、跑基准测试、A/B 对比两个版本的 Skill,全程不需要写代码。这意味着 Skills 的迭代可以像软件工程一样数据驱动:

功能正确性:Skill 是否按预期完成任务

安全性:是否存在安全漏洞或恶意行为

性能:执行时间和 token 消耗

成本:每次调用的 token 成本

评测驱动迭代的核心问题是:你的 Skill“到底是在弥补模型能力的不足,还是在固化团队的工作方式”?好的 Skill 应该让 Agent 比没有 Skill 时表现更好,而不是简单地重复已有的工作习惯。

以上内容为《2026 Agent Skills技术与安全白皮书》的部分内容节选,完整版白皮书请扫描下方二维码下载。

END

举报/反馈
分享到: 微博 QQ 空间
对本文内容有合作意向?
我们将在 1 个工作日内与您联系
留言咨询