Skip to content

Skills 目录结构

理解 Skill 的目录结构和运行机制,是构建可维护、可复用 AI Agent 能力的基础。

本文从零开始拆解一个标准 Skill 的目录结构、各文件作用和完整工作流程。


什么是 Skill

Skill 是一个独立的能力单元,用来完成某一类特定任务。

如果把 Agent 比作操作系统,Skill 就像应用程序;如果把 Agent 比作项目经理,Skill 就是可以被调用的专业能力。

Skill 的常见类型

以下是一些典型的 Skill 应用场景:

类型说明适用场景
PDF 文档分析提取 PDF 内容并生成摘要文档处理、信息提取
网页抓取自动化获取网页数据数据采集、信息监控
SQL 优化分析和优化 SQL 查询数据库性能调优
数据统计数据计算和统计处理数据分析、报表生成
图片识别识别图片中的内容OCR、图像分类

Skill 与 Agent 的关系

Skill 本身不负责决定什么时候使用,真正负责决策的是 Agent。

完整的工作流程如下:

skill-workflow.svg

关键要点:Agent 不会一次性加载所有 Skill 的完整内容。它会先读取每个 Skill 的描述信息,命中目标 Skill 后再加载完整内容。这样做的原因是:如果有几百个 Skills,每次都全部加载会极其浪费 Token。


Skill 的标准目录结构

一个完整的 Skill 不是单个文件,而是包含多个文件的目录。

以下是一个标准 Skill 的完整目录结构:

bash
my-skill/

├── SKILL.md 核心执行文件
├── metadata.json 元信息
├── examples/ 示例目录
   ├── example1.md
   └── example2.md

├── scripts/ 可执行脚本
   ├── main.py
   └── utils.py

├── resources/ 资源目录
   ├── prompt.md
   └── config.yaml

├── tests/ 测试目录
   ├── test_cases.md
   └── eval.yaml

├── README.md 使用说明

└── CHANGELOG.md 变更日志

接下来逐个拆解每个文件和目录的作用。

d56b29df-1900-447a-865d-fc532b4d5a61.webp


SKILL.md:核心执行文件

这是 Skill 中最重要的文件,定义了 Skill 的所有执行逻辑。

它包含以下关键信息:

部分说明作用
DescriptionSkill 的功能描述供 Agent 匹配使用
When to use明确适用场景避免误触发
When NOT to use明确不适用场景防止与其他 Skill 冲突
Input定义输入格式规范调用方式
Instructions执行步骤指导任务执行
Output输出格式说明保证结果一致性

以下是一个规范的 SKILL.md 示例:

实例

bash

# PDF 分析 Skill

## Description

用于分析 PDF 内容并生成摘要。

## When to use

适用于:

- PDF 阅读

- 摘要提取

- 内容分析

## When NOT to use

不适用于:

- 图片编辑

- 视频处理

## Input

PDF 文件

## Instructions

1. 提取文本

2. 识别章节结构

3. 总结主要内容

4. 输出重点

## Output

Markdown 格式摘要

常见的错误写法

很多初学者会写出过于简略的 SKILL.md,例如:

不推荐写法

bash

# PDF Skill

读取 PDF

总结内容

返回结果

这种写法的问题在于:不知道什么时候使用、不知道什么时候不用、输出格式不明确、容易和其他 Skill 冲突。

一个合格的 SKILL.md 应该让 Agent 一眼就能判断:这个 Skill 适不适合当前任务。


metadata.json:Skill 元信息

这个文件提供机器可读的结构化数据,帮助 Agent 快速筛选 Skill。

实例

json

{

  "name": "pdf-analyzer",

  "version": "1.0.0",

  "description": "分析 PDF 并生成摘要",

  "tags": ["pdf", "summary"],

  "category": "document"

}

常见字段说明

字段作用重要性
nameSkill 名称必填
description功能说明,Agent 依靠它做匹配最重要
version版本号推荐
tags标签,便于检索推荐
category分类可选
author作者可选
permissions所需权限可选

其中 description 字段最为重要,因为 Agent 通常依靠它做匹配。

匹配过程大致如下:用户提出请求后,Agent 扫描所有 Skill 的 description,发现匹配的描述后加载完整的 Skill 内容并执行。


examples:示例目录

很多开发者忽略这一部分,但它实际上非常重要。

目录结构

bash
examples/
├── example1.md
├── example2.md

示例文件内容

实例

bash

输入:

帮我分析这个 PDF

输出:

# 文档总结

## 核心内容

1. ...

2. ...

3. ...

examples 的作用

作用说明
提供 Few-shot 示例帮助模型通过示例理解期望行为
规范输出格式通过示例明确输出结构和风格
提高输出稳定性减少随机行为,让结果更可预测

经验上,好的 examples 往往比增加提示词更有效。


scripts:可执行脚本

Skill 不仅仅是提示词,有时需要真正执行代码来完成实际工作。

常见需要脚本的场景包括:读取 PDF、执行 OCR、调用数据库、数据处理、生成图表等。

目录结构

bash
scripts/
├── main.py
└── utils.py

Python 脚本示例

实例

python

# 文件路径:scripts/extract.py

# 功能:从 PDF 文件中提取文本内容

from pypdf import PdfReader

# 打开 PDF 文件

reader = PdfReader("demo.pdf")

# 存储提取的文本

text = ""

# 遍历每一页并提取文本

for page in reader.pages:

    text += page.extract_text()

# 输出全部文本内容

print(text)

Skill 的工作流程是:读取文件 → 执行脚本 → 获取结果,然后再将结果交给大模型处理。


resources:资源目录

用于保存辅助内容,将配置与代码分离。

目录结构

bash
resources/
├── prompt.md
├── config.yaml

可能包含的资源类型

资源类型说明示例
Prompt 模板可复用的提示词模板prompt.md
配置文件参数和设置config.yaml
文本模板邮件、报告模板template.txt
图片资源图标、示意图logo.png
SQL 模板预定义的查询模板query.sql

配置文件示例

实例

bash

# 文件路径:resources/config.yaml

# 摘要相关配置

max_length: 1000    # 摘要最大长度(字符数)

language: zh        # 输出语言:zh=中文, en=英文

将配置放在独立文件中,以后修改参数就不需要改动代码。


tests:测试目录

成熟项目通常都会包含测试,用于验证 Skill 的效果和稳定性。

目录结构

bash
tests/
├── test_cases.md
└── eval.yaml

测试用例示例

实例

bash

测试:

输入:

帮我分析 PDF

期望:

输出摘要

包含关键点

测试的作用

作用说明
验证效果确保 Skill 输出符合预期
回归测试修改后验证旧功能不受影响
自动评估配合自动化流程批量测试
A/B 测试对比不同版本的输出质量

没有测试的 Skill 容易出现"改了一句话,旧功能突然失效"的问题。


README:使用说明

README 面向开发者,说明如何安装和使用这个 Skill。

实例

bash

# 安装

复制到 skills 目录

# 使用方法

上传 PDF

# 输出格式

Markdown

它解决的核心问题是:以后自己都不知道怎么用自己写的 Skill。


完整案例:PDF 分析 Skill

下面用一个完整的例子串联以上所有概念。

目录结构总览

bash
pdf-analyzer/
├── SKILL.md
├── metadata.json
├── examples/
   └── summary.md
├── scripts/
   └── extract.py
├── tests/
   └── eval.md
└── README.md

完整调用流程

bash
用户:
上传 PDF 并总结



Agent:
扫描所有 Skills



发现:
description: 分析 PDF 并生成摘要



命中 pdf-analyzer



读取 SKILL.md



调用 extract.py



提取 PDF 内容



生成摘要



返回结果

为什么 Skill 要设计成目录结构

很多人会问:为什么不用一个 prompt.txt 搞定所有事情?

原因是规模一大就会失控。

单文件方案的问题

问题具体表现
无法维护所有内容堆在一个文件,修改困难
无法测试没有测试用例,改完不知是否正常
无法复用每个 Skill 都要从头写
无法版本管理难以追踪变更历史
无法多人协作一个文件多人改容易冲突

目录化方案的优势

优势实现方式
可维护各文件职责清晰,修改定位快
可复用脚本和配置可以跨 Skill 共享
可测试独立测试目录,支持自动化验证
可扩展新增功能只需添加文件
可发布目录打包即可分发

总结

Skill 本质上不是提示词,而是一套完整的软件能力包。

核心文件关系

bash
SKILL.md

定义行为

metadata.json

定义信息

examples/

定义示例

scripts/

定义能力

tests/

定义质量

README

定义使用方式

Prompt 只能解决一次问题,而 Skill 是把能力沉淀成资产。

AI 思考中...

Skills 多步骤流程设计

Skills 与工具链集成

基于 VitePress 构建,部署于 GitHub Pages