Skills 深度实战指南

举报
yd_47669746 发表于 2026/11/06 18:23:11 2026/11/06
【摘要】 一、理解 Skills 的本质 Skills 不是插件,是 Prompt 模板很多人的误解:Skills 是给 Claude Code 添加新功能的插件。真相:Skills 是预定义的 Prompt + 流程模板,它不改变 Claude 的能力,而是改变 Claude 的行为方式。没有 Skill:Claude 用通用方式处理你的请求有了 Skill:Claude 用专家方式处理特定类型的...

一、理解 Skills 的本质

Skills 不是插件,是 Prompt 模板

很多人的误解:Skills 是给 Claude Code 添加新功能的插件。

真相:Skills 是预定义的 Prompt + 流程模板,它不改变 Claude 的能力,而是改变 Claude 的行为方式。

没有 Skill:Claude 用通用方式处理你的请求
有了 Skill:Claude 用专家方式处理特定类型的任务

类比

MCP = 给一个人一把新锤子(新能力)
Skill = 教一个人怎么当木匠(新行为模式)

二、内置 Skills 深度解析

/simplify — 代码简化

/simplify src/utils/helpers.ts

它做什么:

  1. 读取文件
  2. 分析每段代码的复杂度
  3. 找出可以简化的部分
  4. 重构但保持行为不变

技巧:结合约束使用

/simplify src/services/order.ts
约束:不要改变任何公开 API 签名

/review — 代码审查

/review src/api/auth.ts

技巧:指定审查重点

/review src/api/auth.ts
重点:安全性,特别是 SQL 注入和认证绕过

/test — 测试生成

/test src/services/userService.ts

技巧:指定测试风格

/test src/services/userService.ts
使用 Vitest,mock 数据库,覆盖边界条件

三、自定义 Skill 实战

Skill 文件结构

.claude/
  skills/
    api-endpoint.md      # API 接口生成器
    db-migration.md      # 数据库迁移助手
    security-scan.md     # 安全扫描
    performance.md       # 性能分析
    refactor-plan.md     # 重构规划

实战 Skill 1:API 接口生成器

---
name: api-endpoint
description: 根据数据模型生成完整的 RESTful API 接口
tools: [Read, Write, Edit, Glob, Grep]
---

# 角色

你是一个后端 API 开发专家,擅长设计清晰、安全、高性能的 RESTful 接口。

# 任务

当用户要求创建 API 接口时,按以下流程执行:

## 步骤 1:理解需求

问用户(如果不够清楚):
- 资源名称和字段
- 需要哪些 CRUD 操作
- 认证/授权要求
- 分页/排序/筛选需求

## 步骤 2:设计接口

输出接口设计(不要直接写代码):

POST /api/{resource} — 创建
GET /api/{resource} — 列表(支持分页)
GET /api/{resource}/:id — 详情
PUT /api/{resource}/:id — 更新
DELETE /api/{resource}/:id — 删除


## 步骤 3:实现代码

按以下结构生成文件:

1. **类型定义** `src/types/{resource}.ts`
   - 请求类型
   - 响应类型
   - 查询参数类型

2. **验证 Schema** `src/validators/{resource}.ts`
   - 用 zod 定义请求验证

3. **Service 层** `src/services/{resource}.ts`
   - 业务逻辑
   - 数据库操作
   - 错误处理

4. **Route 层** `src/app/api/{resource}/route.ts`
   - 参数验证
   - 调用 Service
   - 格式化响应

5. **测试** `src/services/{resource}.test.ts`
   - 单元测试 Service 层
   - Mock 数据库

## 代码规范

- 所有函数必须有类型注解
- 请求参数必须用 zod 验证
- 错误用 AppError 类抛出
- 返回格式:`{ data: T, error: string | null, meta?: object }`
- 列表接口默认分页,每页 20 条
- 敏感字段(password 等)永远不返回

## 依赖检查

在生成代码前,先检查:
- 项目中是否已有类似的 API,保持风格一致
- 是否有已有的工具函数可以复用
- package.json 中是否有需要的依赖

实战 Skill 2:数据库迁移助手

---
name: db-migration
description: 安全地进行数据库 schema 迁移
tools: [Read, Write, Edit, Bash, Grep]
---

# 角色

你是一个资深 DBA,擅长数据库迁移和性能优化。

# 任务

当用户需要修改数据库 schema 时,按以下流程执行:

## 步骤 1:分析当前状态

- 读取 prisma/schema.prisma(或对应的 schema 文件)
- 理解当前表结构
- 检查已有的 migration 文件

## 步骤 2:评估影响

对每个变更分析:
1. 是否需要锁表?
2. 是否会导致数据丢失?
3. 是否需要数据迁移?
4. 对现有查询的性能影响?
5. 是否可以在线执行?

## 步骤 3:生成迁移

生成以下文件:

1. **Migration SQL**
   - UP:执行变更
   - DOWN:回滚变更
   - 每个步骤有注释说明

2. **数据迁移脚本**(如果需要)
   - 处理已有数据的转换
   - 分批处理大量数据
   - 有进度显示

3. **验证脚本**
   - 检查迁移是否成功
   - 验证数据完整性

## 安全规则

- 不允许 DROP TABLE(除非用户明确要求)
- 不允许删除有数据的列
- ALTER TABLE 添加列必须有默认值
- 大表迁移必须分批执行
- 必须提供回滚方案
- 生成执行前的备份命令

## 输出格式

```markdown
## 迁移计划

### 变更内容
[描述变更]

### 风险评估
- 🔴 高风险:[说明]
- 🟡 中风险:[说明]
- 🟢 低风险:[说明]

### 执行步骤
1. [步骤 1]
2. [步骤 2]

### 回滚方案
[怎么回滚]

### 预计时间
[预估执行时间]

### 实战 Skill 3:安全扫描器

```markdown
---
name: security-scan
description: 扫描代码中的安全漏洞
tools: [Read, Grep, Glob]
---

# 角色

你是一个安全工程师,擅长 OWASP Top 10 漏洞检测。

# 任务

扫描指定目录的代码,检查以下安全问题:

## 检查清单

### 1. 注入漏洞
- SQL 注入:检查原始 SQL 拼接
- NoSQL 注入:检查 MongoDB 查询拼接
- 命令注入:检查 exec/spawn 调用
- LDAP 注入:检查 LDAP 查询拼接

### 2. 认证问题
- 密码是否明文存储
- Session 配置是否安全
- JWT 密钥是否硬编码
- 是否有默认密码
- 登录是否有暴力破解防护

### 3. 授权问题
- API 是否有权限校验
- 是否有越权访问风险
- IDOR(不安全的直接对象引用)

### 4. 敏感数据
- API Key / Secret 是否硬编码
- 日志中是否打印敏感信息
- 错误信息是否泄露内部细节
- .env 文件是否在 .gitignore 中

### 5. 安全配置
- CORS 是否过于宽松
- CSP 是否配置
- HTTPS 是否强制
- Cookie 是否设置了 HttpOnly、Secure

### 6. 依赖安全
- 是否有已知漏洞的依赖
- 是否锁定了依赖版本

## 输出格式

```markdown
# 安全扫描报告

## 扫描范围
[目录和文件列表]

## 发现的问题

### 🔴 高危
[问题描述]
- 文件:[路径]
- 行号:[行号]
- 说明:[为什么危险]
- 修复:[怎么修]

### 🟡 中危
[同上]

### 🟢 低危
[同上]

## 建议
[整体安全建议]

### 实战 Skill 4:性能分析器

```markdown
---
name: perf-analyze
description: 分析代码性能瓶颈并给出优化建议
tools: [Read, Grep, Glob, Bash]
---

# 角色

你是一个性能工程师,擅长代码性能分析和优化。

# 任务

分析指定代码的性能问题:

## 分析维度

### 1. 时间复杂度
- 循环嵌套
- 递归调用
- 不必要的重复计算

### 2. 空间复杂度
- 大对象持有
- 闭包内存泄漏
- 缓存策略

### 3. IO 操作
- 数据库查询 N+1
- 同步 IO 阻塞
- 不必要的网络请求
- 缺少缓存

### 4. 并发
- 锁粒度过大
- 竞态条件
- 线程池配置

### 5. 算法选择
- 数据结构是否合适
- 是否有更优的算法
- 是否可以用内置优化函数

## 输出格式

```markdown
# 性能分析报告

## 热点函数
1. [函数名] — [预估耗时占比]
2. ...

## 瓶颈分析

### 瓶颈 1:[描述]
- 位置:[文件:行号]
- 当前复杂度:O(?)
- 优化后复杂度:O(?)
- 预估提升:X 倍
- 优化方案:[具体方案]
- 代码示例:[优化后的代码]

### 瓶颈 2:...

## 优化路线图
1. [优先级最高] — [预计收益]
2. [次优先级] — [预计收益]
3. ...

## Benchmark 建议
[如何测量优化效果]

---

## 四、Skill 组合使用

### 场景:新功能开发流程

```bash
# 1. 设计接口
/api-endpoint
"创建订单管理的 CRUD 接口"

# 2. 安全检查
/security-scan src/api/orders/

# 3. 性能检查
/perf-analyze src/services/order.ts

# 4. 生成测试
/test src/services/order.ts

场景:代码质量提升

# 1. 简化代码
/simplify src/utils/

# 2. 安全扫描
/security-scan src/

# 3. 性能分析
/perf-analyze src/services/

# 4. 代码审查
/review src/

场景:数据库变更

# 1. 设计变更
/db-migration
"给 orders 表添加 status 字段"

# 2. 生成 API
/api-endpoint
"添加订单状态更新接口"

# 3. 测试
/test src/services/order.ts

五、Skill 管理最佳实践

版本控制

# Skill 文件提交到 Git
git add .claude/skills/
git commit -m "feat: add custom skills"

# 团队成员 pull 后即可使用

Skill 文档化

在项目 README 中说明有哪些 Skill:

## 自定义 Skills

- `/api-endpoint` — 生成 RESTful API 接口
- `/db-migration` — 安全的数据库迁移
- `/security-scan` — 安全漏洞扫描
- `/perf-analyze` — 性能分析

使用方式:在 Claude Code 中输入 `/skill-name`

Skill 迭代

# 使用后发现 Skill 有问题
# 直接编辑 .claude/skills/xxx.md
# 下次使用自动生效

不要过度封装

# 差:封装太死
一个 Skill 试图做所有事

# 好:职责单一
/api-endpoint — 只做 API
/db-migration — 只做迁移
/security-scan — 只做扫描

六、Skill vs MCP vs Hooks 的正确选择

需求 用什么 原因
让 Claude 查数据库 MCP 需要实际连接数据库
让 Claude 按特定流程写 API Skill 是行为模式,不是能力
代码写完自动格式化 Hook 是自动化触发
让 Claude 访问 GitHub API MCP 需要实际调用外部 API
让 Claude 做安全审查 Skill 是审查流程,不是工具
每次编辑后跑测试 Hook 是自动化触发
让 Claude 搜索网页 MCP 需要实际联网能力
让 Claude 按团队规范提交 Skill 是规范,不是工具

七、实战常见问题与处理

问题:Skill 不生效(输入 /skill-name 没反应)

症状:在 Claude Code 中输入 /api-endpoint 没有任何反应

原因:
1. Skill 文件放错位置
2. 文件名和调用名不一致
3. frontmatter 格式错误
# 排查:
# 1. 检查文件位置
# 项目级:.claude/skills/api-endpoint.md
# 用户级:~/.claude/skills/api-endpoint.md

# 2. 检查文件名
# 调用 /api-endpoint → 文件必须是 api-endpoint.md
# 大小写敏感!

# 3. 检查 frontmatter 格式
# 必须有 --- 开头和结尾
---
name: api-endpoint    # 这个 name 要和文件名一致
description: 生成 API 接口
---
# content here...

# 4. 重启 Claude Code 后再试

问题:Skill 执行结果和预期不符

症状:Skill 触发了,但 Claude 的行为不是你想要的

原因:
1. Skill 的 prompt 写得不够具体
2. 和 CLAUDE.md 中的指令冲突
3. 上下文中有干扰信息
# 解决:
# 1. 在 Skill 中用更明确的指令
# 差:"生成一个 API 接口"
# 好:"生成一个 RESTful API 路由文件,使用 Express.js + TypeScript,
#     包含请求验证(zod)、错误处理(AppError)、日志记录(winston)"

# 2. 检查 CLAUDE.md 是否有冲突的指令
# 如果 CLAUDE.md 说"用 Fastify",但 Skill 说"用 Express",会冲突

# 3. 在 Skill 中指定工具限制
---
name: api-endpoint
tools: [Read, Write, Edit]   # 只允许这些工具
---

问题:多个 Skill 之间互相干扰

症状:用了一个 Skill 后,再用另一个 Skill,行为异常

原因:两个 Skill 有矛盾的指令
# 解决:
# 1. 确保 Skill 职责单一
# /api-endpoint 只管生成 API
# /db-migration 只管数据库迁移
# 不要让一个 Skill 同时做两件事

# 2. 如果需要组合使用,分步执行
/api-endpoint
"创建用户接口"
# 等完成
/security-scan src/api/users/
# 等完成
/test src/api/users/

# 3. 不要同时触发多个 Skill

问题:Skill 在不同项目间不通用

症状:在项目 A 写的 Skill,在项目 B 中不好用

原因:Skill 中硬编码了项目特定的信息
# 解决:
# 1. Skill 只写通用流程,项目特定信息放 CLAUDE.md
# Skill(通用):"生成 API 接口,遵循项目的技术栈和规范"
# CLAUDE.md(项目特定):"用 Express.js + Prisma + PostgreSQL"

# 2. 用变量代替硬编码
# 差:"生成 Express.js 路由"
# 好:"生成项目使用的框架的路由(参考 CLAUDE.md 中的技术栈)"

# 3. 用户级 Skill 放 ~/.claude/skills/
# 项目级 Skill 放 .claude/skills/
# 区分清楚

问题:Skill 执行太慢

症状:触发 Skill 后等很久才有响应

原因:
1. Skill 让 Claude 读取了太多文件
2. Skill 的流程太复杂
3. 让 Claude 做了多余的事
# 解决:
# 1. 在 Skill 中限制读取范围
---
name: security-scan
tools: [Read, Grep, Glob]   # 不允许 Bash,避免执行耗时命令
---

# 2. 简化 Skill 流程
# 差:一个 Skill 做扫描 + 修复 + 测试 + 提交
# 好:一个 Skill 只做扫描,修复另起一步

# 3. 在 Skill 中明确"不要做"
# "不要自动修复,只报告问题"
# "不要运行测试,只生成代码"
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。