Claude Skills:让AI Agent获得专业技能的工程化方案

Claude Skills:让AI Agent获得专业技能的工程化方案

背景

随着大语言模型能力的不断提升,我们已经能够构建通用的AI Agent,它们可以与完整的计算环境交互。Claude Code就是典型例子,它能够通过本地代码执行和文件系统完成跨领域的复杂任务。

然而,当这些Agent变得更强大时,我们需要一种更可组合、可扩展、可移植的方式,来为它们提供特定领域的专业知识。这促使Anthropic创造了Agent Skills——一种组织化的指令、脚本和资源文件夹,Agent可以动态发现和加载它们,以在特定任务上表现更好。

什么是Claude Skills

Skills是包含SKILL.md文本文件(带有YAML前置元数据)以及任何相关脚本、文档或资源的文件夹。每个Skill”打包”一个特定的工作流程或组织指南。

简单来说,Skills就是:

1
2
3
4
5
6
7
my-skill/
├── SKILL.md # 核心指令文件
├── reference.md # 可选:参考文档
├── scripts/ # 可选:可执行脚本
│ └── analyze.py
└── templates/ # 可选:模板文件
└── output.tmpl

与一次性提示不同,Skill明确告诉Claude如何处理一类任务,这样用户就不必每次都重新解释。

技术原理:渐进式披露

Skills的核心设计原则是渐进式披露(Progressive Disclosure)。这是使Agent Skills灵活且可扩展的关键。

三级上下文加载

  1. 第一级:元数据预加载

    • 在会话启动时,Agent仅预加载每个已安装Skill的name和description
    • 这只消耗每个Skill几十个token
    • Claude可以识别哪些Skill可能与用户请求相关,而不会用所有细节淹没提示
  2. 第二级:完整SKILL.md加载

    • 当Claude检测到某个Skill相关时(基于其description或嵌入的示例)
    • 它会将完整的指令和任何链接的文件加载到上下文中
  3. 第三级及以上:链接文件按需加载

    • 对于复杂的Skill,可以将内容拆分到多个文件
    • Claude只在需要时才读取这些额外文件

上下文窗口变化示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
┌─────────────────────────────────────────────────────────┐
│ 初始状态 │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 系统提示 + 所有Skill元数据 + 用户消息 │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────┐
│ 触发PDF Skill │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 系统提示 + Skill元数据 + pdf/SKILL.md内容 │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘


┌─────────────────────────────────────────────────────────┐
│ 按需加载forms.md │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 系统提示 + Skill元数据 + SKILL.md + forms.md │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘

这种设计意味着Skill可以捆绑的上下文量实际上是无界的

Skills与代码执行

Skills不仅仅是静态文本,它们还可以包含可执行脚本。这解锁了强大的用例:

为什么需要代码执行

  1. 效率考虑:通过token生成来排序列表比简单运行排序算法要昂贵得多
  2. 确定性可靠性:许多应用需要只有代码才能提供的确定性保证
  3. 本地数据处理:保持数据在本地执行环境中

示例:PDF表单提取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# extract_form_fields.py
import fitz # PyMuPDF

def extract_form_fields(pdf_path: str) -> dict:
"""提取PDF中的所有表单字段"""
doc = fitz.open(pdf_path)
fields = {}
for page in doc:
for widget in page.widgets():
fields[widget.field_name] = {
'type': widget.field_type_string,
'value': widget.field_value,
'rect': widget.rect
}
return fields

Claude可以直接运行这个脚本,而无需将脚本或PDF加载到上下文中。

Skills与MCP:技术对比

维度 Claude Skills Model Context Protocol
核心目的 嵌入专业知识,精简提示 连接外部工具和数据源
架构 文件夹 + SKILL.md 客户端-服务器协议
触发方式 基于description自动匹配 通过tool调用显式触发
上下文管理 渐进式披露,按需加载 每次调用返回完整结果
可移植性 跨Claude平台(Claude.ai、Claude Code、API) 跨AI平台(Claude、ChatGPT等)
创建复杂度 简单,只需Markdown 需要实现JSON-RPC服务器
适用场景 内部工作流、文档处理、品牌规范 外部API集成、数据库访问

互补使用

在实际应用中,两者可以互补:

  • MCP:从GitHub、数据库、CI系统获取外部数据
  • Skills:解释数据、应用合规逻辑、生成标准化输出
1
用户请求 → MCP获取数据 → Skill处理数据 → 输出结果

官方Skills仓库

Anthropic在GitHub上维护了官方Skills仓库:https://github.com/anthropics/skills

仓库结构

1
2
3
4
5
6
7
8
skills/
├── skills/ # 示例Skills
│ ├── creative/ # 创意与设计
│ ├── development/ # 开发与技术
│ ├── enterprise/ # 企业与通信
│ └── document-skills/ # 文档处理
├── spec/ # Agent Skills规范
└── template/ # Skill模板

核心文档Skills

仓库中包含了Claude文档能力的底层实现:

  • docx:Word文档创建与编辑
  • pdf:PDF处理与表单填写
  • pptx:PowerPoint演示文稿生成
  • xlsx:Excel电子表格处理

这些是生产级参考实现,展示了复杂Skill的设计模式。

安装方式

Claude Code

1
2
3
4
5
6
# 注册为插件市场
/plugin marketplace add anthropics/skills

# 直接安装特定Skill
/plugin install document-skills@anthropic-agent-skills
/plugin install example-skills@anthropic-agent-skills

Claude.ai

付费计划的用户可以直接使用仓库中的示例Skills,也可以上传自定义Skills。

Claude API

通过/v1/skills端点上传和管理Skills,每个请求最多支持8个Skills。

创建自定义Skill

基本结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
---
name: my-skill-name
description: 清晰描述这个Skill做什么以及何时使用
---

# My Skill Name

[添加Claude在此Skill激活时将遵循的指令]

## 示例

- 示例用法1
- 示例用法2

## 指南

- 指南1
- 指南2

前置元数据要求

只需要两个字段:

  • name:Skill的唯一标识符(小写,用连字符代替空格)
  • description:完整描述Skill做什么以及何时使用

安全限制

  • 不能使用<>符号(防止注入攻击)
  • 名字不能包含”claude”或”anthropic”(保留词)

最佳实践

  1. 从评估开始

    • 在代表性任务上运行Agent,观察它们在哪里挣扎
    • 然后增量构建Skills来解决这些不足
  2. 为规模而结构化

    • 当SKILL.md变得难以管理时,将内容拆分到单独文件
    • 如果某些上下文互斥或很少一起使用,保持路径分离
  3. 从Claude的视角思考

    • 监控Claude在实际场景中如何使用你的Skill
    • 特别注意name和description,Claude用它们决定是否触发Skill
  4. 与Claude迭代

    • 完成任务后,让Claude捕获成功方法和常见错误到Skill中
    • 如果偏离轨道,让Claude自我反思哪里出了问题

官方推荐的五种Skill类型

根据大量案例,Anthropic总结了最常见的Skill类型:

1. 文档处理型

处理特定格式的文档,如PDF表单填写、Word文档格式化。

2. 数据分析型

按照组织特定工作流程分析数据。

3. 品牌规范型

确保输出符合公司品牌指南。

4. 工作流自动化型

自动化重复性业务流程。

5. 代码助手型

提供特定技术栈或框架的专业指导。

实际效果

官方数据显示,使用Skills后:

  • 工具调用次数减少 50%
  • Token消耗降低 一半
  • API错误率归零

团队协作

Skills支持团队共享:

  1. 将Skills存储在项目的.claude/skills/目录中
  2. 提交到git仓库
  3. 克隆仓库的团队成员自动获得访问权限
1
2
3
4
5
6
project/
├── .claude/
│ └── skills/
│ ├── brand-guidelines/
│ └── code-review-standards/
└── src/

参考资料

总结

Claude Skills代表了AI Agent专业化的一条重要路径。通过将领域知识工程化为可组合的资源,我们可以:

  • 降低成本:通过渐进式披露减少token消耗
  • 提高可靠性:通过确定性代码执行保证一致结果
  • 促进协作:通过文件系统实现团队知识共享
  • 保持灵活:通过模块化设计支持快速迭代

随着Agent Skills成为开放标准,我们有望建立一个丰富的Skill生态系统,让每个组织都能轻松为其AI Agent配备专业技能。