Skip to content

如何写一个Skill

本答案由chatgpt提供


简单来说,如果说我们上次聊的 MCP 是给 AI 提供了“手脚”,让它能调用外部工具,那么 Skill 就是给 AI 提供了一份“岗位说明书”或“SOP(标准作业程序)”,教会它如何像一位经验丰富的专家一样,稳定、可靠地完成一整项复杂任务。

🤔 什么是 Skill?它和 MCP 有什么区别?

一个 Skill 就是一个能力封装包。它将完成特定工作所需的指令、流程、知识文档、代码脚本甚至是固定的素材(如图片),以固定的文件夹结构组织在一起。

为了让你更清晰地理解,我把 Skill 和 MCP 的不同点整理成了一个表格:

特性Agent SkillMCP (Model Context Protocol)
核心定位流程与知识封装:教AI“如何做好一件事”。功能与连接:为AI提供“能做什么事”的工具。
内容构成Markdown指令、流程文档、代码脚本、图片等资源。服务端程序、API接口定义、工具函数。
加载机制渐进式加载:先加载元信息“目录”,需要时才加载完整指令,节省Token。启动时加载:客户端启动时,通常会一次性加载所有可用的工具定义。
优势轻量、灵活、可复用,能封装非常复杂的业务逻辑和经验。标准化、实时性,能无缝接入各种外部服务(如数据库、搜索引擎)。
典型场景代码审查、周报生成、遵循特定品牌规范进行设计、数据库迁移流程。查询天气、发送邮件、操作本地文件、调用第三方API。

一句话总结:Skill 定义“流程”(HOW),MCP 提供“功能”(WHAT),两者协同工作,让 AI 不仅能想,还能做,并且做得规范。

🛠️ 最小可跑 Skill 实战:一个“文件搜索助手”

理论说了这么多,我们来动手写一个最小的、可运行的 Skill。它的功能很简单:在项目里帮你根据文件名关键词搜索文件

一个最基本的 Skill 只需要一个文件夹和一个核心文件 SKILL.md

1. 创建项目结构

在你的项目(比如一个叫 my-project 的文件夹)里,创建一个 skills 文件夹,然后在里面为你的新 Skill 创建一个子文件夹,比如叫 file-searcher。最终结构如下:

my-project/
├── skills/
│   └── file-searcher/
│       └── SKILL.md
└── ... (你的其他项目文件)

2. 编写核心文件 SKILL.md

用你喜欢的代码编辑器创建 SKILL.md 文件,并写入以下内容:

md
---
name: "file_searcher"
description: "在当前项目按文件名关键词搜索文件;当你需要找文件但不确定完整路径,或用户说“搜索/查找名字包含 xxx 的文件”时调用。"
---

# 文件搜索助手使用指南

当你接到一个“搜索文件”的任务时,请严格遵循以下流程:

## 第一步:理解用户需求

明确用户想要搜索的文件名关键词(keyword)。关键词可以是完整的文件名,也可以是文件名的一部分。

## 第二步:执行搜索

1. **确定搜索范围**:搜索范围限定在当前项目的根目录下。
2. **使用搜索命令**:在项目的根目录下,打开终端并执行以下命令来查找文件:

   find . -iname '_<keyword>_' -type f 2>/dev/null

3. **解释命令**
   - `find .`: 从当前目录(项目根目录)开始搜索。
   - `-iname '*<keyword>*'`: 查找文件名中包含 `<keyword>` 的文件,且不区分大小写。两边的通配符 `*` 用于匹配包含该词的文件名。
   - `-type f`: 只查找文件,不包括文件夹。
   - `2>/dev/null`: 将错误信息(如无权限访问的文件夹)丢弃,让输出更干净。

## 第三步:整理并返回结果

1. **执行命令**:运行上面构造好的命令。
2. **处理结果**
   - 如果命令输出了一串文件路径,请将这些路径以清晰的列表形式返回给用户。
   - 如果命令没有任何输出,说明没有找到匹配的文件,请友好地告知用户“未找到包含关键词 '[keyword]' 的文件”。
3. **注意**:你的任务到此结束。不需要对找到的文件内容做任何解读或操作,除非用户再次提出新的请求。

这就是一个完整的、最小可运行的 Skill!它包含了:

  • 元信息 (--- 包裹的部分):包括技能名称 (name) 和描述 (description),这是 AI 判断何时使用该技能的“目录”。
  • 指令定义 (# 文件搜索助手使用指南 之后的部分):用自然语言详细描述了 AI 在调用此技能时,应该遵循的步骤、使用的命令以及如何返回结果。

🚀 Skill 是怎么被调用的?

Skill 的调用方式非常灵活,主要有两种:

  1. 隐式调用(AI 自动判断):这是 Skill 最强大的地方。当你向 AI 提问时,它会根据对话内容和你项目中安装的所有 Skill 的 namedescription自动决策是否需要调用某个 Skill。例如,如果你问:“帮我找一个关于 api 的文件,我不记得放哪了。” AI 读到 file_searcher 这个技能的描述是“根据文件名关键词搜索文件”,它就会判断出这个场景下应该使用该技能,然后主动去加载 SKILL.md 里的完整指令来执行。

  2. 显式调用(用户指定):你也可以在提问时,明确要求 AI 使用某个 Skill。例如:“使用 file_searcher 技能,帮我查找项目中所有包含 README 的文件。”

如何让 AI 发现你的 Skill? 这取决于你使用的 AI 客户端(如 Claude Code、Cursor 等):

  • 项目级安装:大多数客户端(如 Claude Code)会默认扫描项目根目录下的 skills 文件夹。所以只要我们把 file-searcher 文件夹放在 my-project/skills/ 下,在这个项目里与 AI 对话时,它就能自动发现。
  • 用户级安装(全局):一些工具也支持将 Skill 安装在全局目录下(如 ~/.claude/skills/),这样在任何项目中都可以使用。

💡 如何验证你的 Skill 是否工作?

  1. 确保你的 AI 客户端支持 Skill:目前 Claude Code、支持 OpenSkills 协议的编辑器(如 Cursor、Windsurf 通过插件)等都支持。
  2. 在项目目录下启动 AI 客户端
  3. 尝试提问:“帮我搜索一下项目里名字包含 test 的文件。”
  4. 观察 AI 的思考过程:如果配置成功,你会在 AI 的回复中看到它“决定”使用 file_searcher 技能,然后“执行” find 命令,最后“返回”搜索结果。

这个最小的 file_searcher 示例已经展示了 Skill 的核心价值:用文档定义流程,让 AI 自动执行

alt text

上次更新于: