从背景、实操 Demo 到 Reference/Script 与 MCP 区别,一次讲透
在 AI 赋能前端开发的浪潮中,Agent 已从"辅助聊天"升级为"可落地的开发助手",而 Agent Skill(智能体技能)正是让 Agent 摆脱"只会说不会做"、真正适配前端开发场景的核心能力支撑。
本文完全贴合前端开发实际,从 Agent Skill 的出现背景、核心价值、Cursor 实操 demo、加载逻辑、高级用法(Reference/Script 加载)、Token 消耗解析,到与 MCP 的核心区别,逐一拆解。
在 Agent Skill 出现之前,前端开发者使用 AI 工具(如 Cursor、Copilot)时,始终面临三个无法解决的核心痛点:
前端开发中存在大量"固定流程类"工作,比如"生成符合项目规范的 Vue3 组件""格式化 Axios 请求拦截器"。每次使用 AI 都要重复输入冗长的 Prompt,明确项目规范、代码风格、功能要求,重复操作占用大量开发时间。
AI 无法"记住"项目的个性化规则:项目中自定义的工具函数、接口请求规范、路由配置逻辑、UI 组件库的封装规范等,每次提问都需要重新提供,否则生成的代码会与项目脱节。
传统 AI 只能"生成代码",无法"执行操作":生成批量修改文件名的脚本后需要自己复制执行;发现代码中的路径错误后,无法自动定位并修改。AI 与实际开发流程脱节,无法形成"提出需求 → AI 处理 → 完成落地"的闭环。
| 痛点 | Skill 的解法 |
|---|---|
| 重复 Prompt | 将项目规范、操作流程封装成 Skill,调用时只需输入简单指令 |
| 上下文割裂 | Skill 内置项目个性化配置,调用时自动加载上下文,代码直接适配项目 |
| 无法联动执行 | 通过 Script 和 Reference 实现"生成 → 执行 → 校验"的闭环 |
简单来说,Agent Skill 就像给前端 AI 助手"制定了详细的工作手册",手册中明确了"做什么、怎么做、遵循什么规则、需要用到什么资料",让 AI 从"只会猜"变成"懂规则、会操作"的专属助手。
前置准备:确保 Cursor 已更新至最新版本,打开 Cursor 设置(Ctrl+Shift+J / Cmd+Shift+J),开启"Agent Skills"开关(默认开启)。
场景:项目中所有 Vue3 组件都需遵循"Setup 语法糖 + TailwindCSS + Props 类型校验 + emits 声明"的规范。进入当前前端项目,打开设置点击"创建 skills",在 Agent 对话框中用 AI 生成对应的 Skill,提示词如下:
/create-skill Help me create this skill for Cursor: 名字为:vue3-component-gen
适用范围是这个 vue3-skills 的项目,内容规则为:
# Vue3 组件生成技能(前端专用)
## 技能描述
根据用户需求,生成符合项目规范的 Vue3 单文件组件(SFC),严格遵循以下规则:
1. 语法:使用 <script setup> 语法糖,不使用 Options API;
2. 样式:使用 TailwindCSS,不写原生 CSS,样式需简洁、适配响应式;
3. Props:所有传入参数需用 defineProps 定义,并做类型校验(使用 TypeScript);
4. Emits:组件触发的事件需用 defineEmits 声明,明确事件参数类型;
5. 结构:模板结构清晰,包含注释,组件根节点使用 div,添加基础样式类;
6. 依赖:不引入项目中未使用的依赖,如需使用 UI 组件,仅使用 Element Plus。
## 使用场景
用户输入"生成XX组件""写一个XX组件"时,自动触发该技能,无需额外提示。
## 示例
用户需求:生成用户卡片组件(包含头像、姓名、手机号)
生成结果需符合上述所有规则,Props 包含 avatar(字符串)、name(字符串)、phone(字符串),
emits 包含 click(参数为用户信息对象)。
调用 Skill 一键生成组件:重启 Cursor(确保 Skill 被识别),打开 Agent 聊天框(Ctrl+L / Cmd+L),输入简单指令:"生成用户卡片组件,包含头像、姓名、手机号、邮箱,使用的哪些 skill 请你列出来"。无需额外补充规范,Cursor 会自动触发 vue3-component-gen Skill,生成符合项目规范的组件代码。
场景:项目使用 ESLint 规范代码(禁止 var、强制单引号、禁止 console.log),创建流程同第一个 Demo,提示词如下:
/create-skill Help me create this skill for Cursor: 帮我创建 名字是:eslint-fix 作用域是当前项目,内容是
# ESLint 错误修复技能(前端专用)
## 技能描述
识别用户提供的前端代码(JS/TS/Vue)中的 ESLint 错误,自动修复,严格遵循项目 ESLint 规范:
1. 变量声明:禁止使用 var,优先使用 const,可变变量使用 let;
2. 引号:所有字符串强制使用单引号,禁止双引号;
3. 控制台输出:禁止使用 console.log、console.warn 等控制台打印语句,直接删除;
4. 分号:语句结尾不添加分号(适配前端项目常见规范);
5. 缩进:使用 2 个空格缩进,禁止使用 Tab;
6. 结尾:修复后,需输出修复说明(列出修复的错误类型及数量)。
## 使用场景
用户输入"修复这段代码的 ESLint 错误""ESLint 校验修复",或直接粘贴存在 ESLint 错误的代码,自动触发该技能。
## 注意事项
修复时不改变代码原有功能,仅修复 ESLint 规范相关问题;若有无法自动修复的错误,需提示用户手动修改。
调用 Skill 修复代码:在项目中创建有 ESLint 报错的 js 文件,选中并添加 chat(Ctrl+K),在 Agent 聊天框输入"修复这段代码的 ESLint 错误,并列出你使用了哪些 skill",Cursor 自动触发 eslint-fix Skill,修复后的代码完全符合规范,并输出修复说明。
Reference 是 Agent Skill 的"参考资料库",可存放前端项目中的个性化配置、规范文档、接口信息等。前端常用场景:接口联调 Skill 加载接口文档、组件生成 Skill 加载 UI 组件封装规范、路由配置 Skill 加载路由规范。
加载方式(Cursor 实操):
实操示例:新建 Skill api-request-gen,创建 reference 子文件夹放入 api-docs.md(用户列表接口:GET /api/user/list,参数:pageNum、pageSize),在 SKILL.md 中添加加载条件:
# 接口请求代码生成 Skill
## 技能描述
生成符合项目接口规范的 Axios 请求代码,自动匹配接口地址、请求方式、参数类型。
## Reference 加载条件
当用户需要生成"接口请求代码",且提及具体接口名称(如用户列表、登录接口)时,
自动加载 reference/api-docs.md 文档,获取接口信息。
## 规则
1. 请求代码使用项目全局封装的 Axios 实例(import request from '@/utils/request');
2. 生成请求函数,包含参数类型校验(TypeScript);
3. 处理请求异常(try/catch 包裹,抛出异常提示)。
调用 Skill 输入"生成用户列表接口的请求代码,保存在 user.js 里面",Cursor 自动加载 api-docs.md 并生成:
import request from '@/utils/request'
/**
* 用户列表接口请求函数
* @param params - 请求参数
* @param params.pageNum - 页码(必填)
* @param params.pageSize - 每页条数(必填)
* @returns 用户列表数据
*/
export const getUserList = async (params: { pageNum: number; pageSize: number }) => {
try {
const response = await request({
url: '/api/user/list',
method: 'GET',
params
})
return response.data
} catch (error) {
console.error('获取用户列表失败:', error)
throw error
}
}
Script 是 Agent Skill 的"可执行操作模块",实现"生成代码 → 自动执行操作"的闭环。前端常用场景:批量重构脚本、文件操作脚本、规范校验脚本。
加载方式:创建 scripts 子文件夹 → 放入可独立执行的 JS/TS 脚本 → 在 SKILL.md 中明确"脚本执行条件" → 调用 Skill 时在沙箱中执行,输出结果经用户确认后应用。
实操示例(批量修改组件文件名脚本):
// scripts/rename-component.js
// 批量修改组件文件名脚本(Cursor 沙箱执行,不直接修改本地文件)
const fs = require('fs')
const path = require('path')
// 项目组件目录(前端项目常见目录)
const componentDir = path.join(__dirname, '../../src/components')
// 遍历目录,修改文件名和引入路径
const renameComponents = () => {
const files = fs.readdirSync(componentDir)
const modifiedFiles = []
files.forEach(file => {
if (file.endsWith('Card.vue')) {
const newFileName = file.replace('Card.vue', 'CardItem.vue')
const oldPath = path.join(componentDir, file)
const newPath = path.join(componentDir, newFileName)
// 读取文件内容,修改引入路径
let content = fs.readFileSync(oldPath, 'utf8')
content = content.replace(/import .* from './(.*)Card'/g, (match, p1) => {
return `import ${p1}CardItem from './${p1}CardItem'`
})
// 模拟修改(沙箱环境中不实际写入文件,仅输出结果)
modifiedFiles.push({
oldName: file,
newName: newFileName,
path: componentDir
})
}
})
return {
success: true,
modifiedCount: modifiedFiles.length,
modifiedFiles
}
}
// 执行脚本并输出结果
const result = renameComponents()
console.log('批量修改结果:', result)
在 SKILL.md 中添加脚本执行条件:
# 组件批量重命名 Skill
## 技能描述
批量修改项目中 Vue 组件的文件名,同时修改组件内部的引入路径,避免路径错误。
## Script 执行条件
当用户输入"批量修改组件文件名""批量重命名 Card 组件"时,
自动加载 scripts/rename-component.js 脚本,执行批量修改操作。
## 注意事项
1. 脚本在 Cursor 沙箱环境中执行,不直接修改本地文件;
2. 执行完成后,输出修改结果(修改的文件列表、数量);
3. 用户确认无误后,可手动将修改结果应用到本地项目。
调用 Skill 输入"批量重命名 Card 组件",Cursor 自动执行脚本并输出修改结果(如"修改了 3 个文件"),用户确认后手动应用即可完成批量重构。
| 加载类型 | 核心作用 | 加载时机 | 前端类比 |
|---|---|---|---|
| Reference | 提供参考资料,让 Skill 贴合项目 | 满足触发条件时加载,执行完成后释放 | 按需引入的配置文件(如 .env) |
| Script | 执行具体操作,实现自动化闭环 | 满足执行条件时加载,执行完成后销毁 | 按需执行的工具函数 |
Agent Skill 采用"按需加载"的核心逻辑,与前端的"路由懒加载""组件按需引入"原理完全一致——"需要时加载,不需要时不占用资源"。
AI 工具的 Token 消耗本质是"加载的文本内容长度"。Agent Skill 的按需加载,本质是"只加载当前需要的文本内容",实测数据显示在处理前端长流程任务时,按需加载架构能将上下文 Token 消耗降低 60%-80%。
| 阶段 | 加载内容 | Token 消耗 | 前端类比 |
|---|---|---|---|
| 初始化 | Skill 名称、简短描述(约 50-100 字符/个) | 单 Skill 约 30-75 Token,10 个约 300-750 Token | 加载路由表 |
| 触发 | 当前 Skill 的 SKILL.md(约 500-2000 字符) | 约 375-1500 Token | 加载路由组件 |
| 执行 | Reference(1000-5000 字符)/ Script(500-2000 字符) | Reference 约 750-3750 Token;Script 约 375-1500 Token | 加载依赖资源 |
实测显示,将庞大知识库拆分为按需加载的 Reference 文件,比全量加载的 Token 成本节省 92% 以上,同时加载速度提升 45%。
| 对比维度 | Agent Skill | MCP(如 Webpack、Vite、Rollup) |
|---|---|---|
| 核心定位 | AI 智能体的"技能模板",赋能 AI 更适配前端场景 | 前端项目的"构建/部署工具",处理项目文件 |
| 核心作用 | 省去重复 Prompt、关联项目上下文、执行自动化操作 | 打包、优化、构建、部署 |
| 使用场景 | 编码阶段:生成组件、修复代码、接口请求、批量重构 | 构建/部署阶段:打包源码、优化项目、部署上线 |
| 依赖环境 | 依赖支持 Skill 的 AI 工具,无需额外部署 | 依赖 Node.js 环境,需项目配置 |
| 操作对象 | 操作"AI 的指令和行为",间接作用于源码 | 直接操作"前端源码文件",输出可部署静态文件 |
| 前端关联度 | 可选但推荐(提升编码效率) | 必用(否则无法打包部署上线) |
两者配合场景:用 Agent Skill 辅助编码(生成、修复代码)→ 编码完成后,用 MCP 打包、优化项目 → 部署上线,形成前端开发的完整流程。
Agent Skill 对于前端开发者而言,核心价值是"解放双手、提升效率"——把重复、机械、规范的编码工作交给 AI 自动完成,开发者专注于核心业务逻辑。