阐述AI Agent的Skills开放标准——通过在代码库放置SKILL.md文件夹,让AI理解项目规范和工作流程,无需每次重复提示,兼容Claude Code/Cursor/Copilot等主流工具。
厌倦了一次又一次地向 AI Agent 解释同样的事情?
烦躁,因为 AI 总是忘记那些针对你代码库的小细节——而这些细节本应在每次修改时被牢记?
这就是目前大多数使用 AI Agent 构建软件的人所面临的现状。你把任务交给它,它给出解决方案,但漏掉了一些东西。你向它说明,它点头表示理解,然后下次又犯同样的错误。
我自己也一直这样,直到后来了解了 Skills。
还记得我们在几乎每个开源仓库中都能看到的 CONTRIBUTING.md 文件吗?
这个文件向所有参与仓库贡献的人解释:在贡献代码时需要检查什么、理解什么、记住什么,以免破坏项目。Skills 对于任何要对你的代码库进行修改的 AI Agent,作用与之类似。
它是一个文件夹,AI 在需要执行特定任务、专业工作或多步骤工作流时会随时查阅,无需你每次都写提示词。
最棒的是,它遵循一个开放标准,几乎适用于所有 AI Agent——无论是 Claude Code、Cursor、Copilot 还是更多其他产品。它采用基于文件夹的结构,围绕一个 SKILL.md 文件展开,其中包含该 Skill 的 YAML 元数据和说明。
Skill 可以根据你的需求,从简单的指令到复杂的多步骤工作流不等。据我所知,构建 Skill 有三种方式:
首先,你需要为你的 Skill 创建一个专用文件夹,并在其中放置一个 SKILL.md 文件。这个文件需要包含两样东西:
以下是一个基本的 SKILL.md 文件示例,供你参考:
---
name: word-counter
description: Counts the total number of words in a given text.
---
Take the user's input text.
Count the total number of words.
Return only the final word count as a number.
这是一种工具化接口(命令行或脚本),可以接收你的需求并相应地为你构建一个 Skill。就像你说出你想要什么,然后让它帮你生成文件一样。
大多数 AI Agent(如 Claude、Cursor 和 Gemini)都有自己的内置工具,但也有其他独立的工具,比如 Crew CLI。
这是我使用最多的方式。有一个叫 "skills.sh" 的市场。就像我们从 NPM 安装库一样,这是一个注册平台,我们可以从中浏览和安装所需的 Skill,选项众多。
我试过 Geoffrey Litt 的 'explain-diff' 和著名的 'matt-pocock' skills,两者都给了我很大帮助。
你可以在这里查看:https://www.skills.sh/
Skill 的编写有特定的方式。它不是你可以随时开启或关闭供每次使用的——是你的 AI Agent 决定何时使用它。这里有两个主要的摩擦点:
由于你无法控制 Skill 的使用,你可能刚创建了一个 Skill,但 AI 永远不会用到它。这是因为你的 Skill 描述与你和 Agent 交流的方式不匹配。所以 Agent 无法将你的对话映射到描述上,从而准确知道何时该使用这个 Skill。
每次都无关紧要地加载 Skill,悄悄吃掉你的 token。这更糟糕,因为在你不自知的情况下,它悄悄消耗着你的 token,导致成本上升。这可能是由于描述过于宽泛,导致它几乎在每个会话中都会被加载。
我是在自己的 Skill 无法被使用、不得不深挖原因时才发现这些问题的。
所以一旦我掌握了诀窍,Skills 就开始像魔法一样运作了。
我最常用的 Skill 是一个叫 "explain-check" 的东西。它是 Geoffrey Litt 原版的定制版本,可以解释任何用 HTML 实现的功能,并配有测验。我的版本还包含问题来检查我的理解,但不是测验,而是一段预定义的答案段落。
我相信 Skills 的潜力是巨大的,有效使用它们可以让你借助 AI 的工作更加完善。所以如果一个朋友问我 Skills 是否值得,我会毫不犹豫地说"是的"。
回到我在文章开头提出的问题,Skills 确实解决了我反复解释的烦恼。但就像任何其他软件一样,它需要理解。你不能随意糊弄一个 Skill 就指望它完美运行——你得按照你的工作方式、你与 AI Agent 的对话方式,以及你希望从那个 Skill 中获得什么来创建它。
感谢阅读!如果你有任何反馈或发现任何错误,请随时在下方留言。我一直在寻求提高写作水平,非常珍视你可能提出的任何建议。如果你有兴趣合作或有任何进一步的问题,请随时通过 fa1319673@gmail.com 与我联系。