什么是 Skills
Skills 是 AI 编码助手的能力扩展机制。你可以将其理解为写给 AI 看的标准操作手册。
核心价值对比
| 特性 | 没有 Skills 的 AI | 有 Skills 的 AI |
|---|---|---|
| 执行逻辑 | 泛泛的通用知识 | 精准遵循项目既定规范 |
| 产出标准 | 每次输出风格不一致 | 始终保持统一的代码标准 |
| 指令管理 | 好的 Prompt 用完即丢 | 指令持久化,可反复复用 |
| 经验传承 | 经验留在个人脑海 | 团队共享,协作标准化 |
类比理解:
-
SOP 之于员工:Skills 就是 AI 的岗前培训手册。
-
App 之于手机:AI 自带基础能力,Skills 让它适配你的业务逻辑。
-
技能树之于游戏:每装载一个 Skill,AI 就多一个专精方向。
以前我们教 AI,是靠聊天,今天说一遍,明天换个对话框它就全忘了。有了 Skill,你直接把这套规则写成文件扔在项目里。AI 只要一启动,就会先把这套"家规"读一遍,保证它每次干活都按照你的标准来。
核心原理:
当一个 Skill 被加载时,AI 的决策链路会发生变化:
-
识别(Identification):AI 根据你的需求,从已有的 Skill 库中匹配最相关的指令。
-
加载(Loading) :读取
SKILL.md中的元数据、约束条件和参考模板。 -
对齐(Alignment):将通用 AI 能力与项目上下文(Context)强制绑定。
-
执行(Execution):严格按定义的步骤(Steps)输出结果。
这种机制解决了通用 AI 与特定项目之间的鸿沟,将资深工程师的"隐性检查清单"转化为了可执行的"代码准则"。
为什么你需要用它?
-
告别"记性差":你的规范(比如 API 怎么写、异常怎么捕获)不用反复强调,存进 Skill 里,它是持久化的。
-
团队协作神器:如果你们团队都用同一套 Skill,那生成的代码风格就真的能统一了,不再是"一千个 AI 写出一千种风格"。
-
把经验变成资产:你总结出来的那些"坑"和"最佳实践",变成 Skill 之后,以后有新人来,直接把这套插件拷给他,他也能瞬间上手。
构建一个 Skill
不用想得太复杂,其实就是在一个特定的文件夹里写个说明书。
在你的项目根目录下建这个结构:
.agent/skills/你的技能名/
├── SKILL.md # 这是灵魂,把你的要求写这里
├── scripts/ # 嫌 AI 笨?写个脚本让它跑
└── examples/ # 给几个好的示范,AI 最会照猫画虎└──resources/ # 模板与配置(可选)
重点看 SKILL.md,这其实就是写给 AI 的"操作指南": 比如你要写个处理 API 错误的 Skill,你就写清楚:
-
触发条件:什么时候该用这个技能?(比如:用户写 API 接口时)
-
执行步骤:第一步查 try-catch,第二步查状态码,第三步查 JSON 格式。
-
输出规范:必须长什么样(直接把那个 JSON 模板贴上去)。
例子 :建个
security-check的 Skill,防止代码里有 SQL 注入之类的漏洞。文件结构就是:
.agent/skills/security-check/SKILL.md
SKILL.md里的内容(写成"检查清单"):
name: security-check
description: 当我编写数据库查询或 SQL 语句时触发,确保代码安全。
SQL 安全检查清单
执行步骤
**防注入**:必须使用参数化查询(Prepared Statements),禁止直接拼接 SQL 字符串。
**防泄露**:确保查询结果中不包含用户密码、身份证号等敏感字段。
**防越权**:必须检查当前操作用户是否对查询的资源有权限。
负面示例 (Don't)
- 使用 `db.execute("SELECT * FROM users WHERE id = " + user_id)`
正面示例 (Do)
- 使用 `db.execute("SELECT * FROM users WHERE id = ?", [user_id])`
记着,写得越像"检查清单(Checklist)",AI 干活就越精准。
如何调用Skill
调用方式其实就是你和 AI 的"暗号":
-
自动触发(AI 比较聪明) : 你:"帮我写个查订单的 SQL。" AI 识别到你在操作数据库,自动 挂载
security-check这个 Skill。它写完代码后,会顺手检查一下有没有用参数化查询,省得你再提醒。 -
手动指定(强制加餐) : 你:"请用
security-check检查一下刚才那段代码。" 这就像是你给 AI 派发了一个临时检查任务。 -
链式调用(流水线作业) : 如果任务很复杂,你可以这样下指令: "先用
business-logic-skill写核心功能,再用security-check审一遍,最后用api-format-skill包装一下接口。"这就好比你雇了一整支工程队,AI 从架构师到安检员,再到接口规范员,全包了。