05 - Claude Skills 详解
🎯 掌握 Claude Skills:让 AI 具备超能力的扩展系统
📋 本章目标
- ✅ 理解 Claude Skills 的核心概念
- ✅ 掌握所有内置 Skills 的使用
- ✅ 学会创建自定义 Skills
- ✅ 了解 Skills 的最佳实践和高级用法
预计阅读时间: 35分钟
🤔 什么是 Claude Skills?
核心概念
Claude Skills 是扩展 Claude 能力的插件系统,让 Claude 能够:
基础 Claude:
- 理解代码
- 生成代码
- 回答问题
Claude + Skills:
- 执行终端命令 ✨
- 读取文件系统 ✨
- 调用外部 API ✨
- 操作数据库 ✨
- 运行测试 ✨
- 部署应用 ✨
...无限可能
架构设计
┌─────────────────────────────────────┐
│ User (你的指令) │
└──────────────┬──────────────────────┘
│
↓
┌─────────────────────────────────────┐
│ Claude AI (理解+规划) │
└──────────────┬──────────────────────┘
│
↓
┌─────────────────────────────────────┐
│ Skills System │
│ ┌──────────┐ ┌──────────┐ │
│ │ Skill A │ │ Skill B │ ... │
│ └──────────┘ └──────────┘ │
└──────────────┬──────────────────────┘
│
↓
┌─────────────────────────────────────┐
│ External Systems │
│ (文件/API/数据库/终端...) │
└─────────────────────────────────────┘
📚 内置 Skills 完全指南
1. File System Skills 📁
功能:文件和目录操作
可用操作:
read_file- 读取文件内容write_file- 创建/更新文件delete_file- 删除文件list_directory- 列出目录内容search_files- 搜索文件file_exists- 检查文件是否存在
使用示例
示例1: 批量重命名文件
Prompt:
"将 src/components 目录下所有 .jsx 文件重命名为 .tsx,
并更新所有的引用"
Claude 会:
1. 使用 list_directory 列出所有文件
2. 用 read_file 读取每个文件
3. 转换为 TypeScript
4. 用 write_file 保存为 .tsx
5. 搜索所有引用并更新
示例2: 代码审计
Prompt:
"扫描整个项目,找出所有使用了 console.log 的地方"
Claude 会:
1. 使用 search_files 搜索 "console.log"
2. 列出所有匹配的文件和行号
3. 询问是否要批量删除或替换为 logger
最佳实践
✅ Do:
- 明确指定路径: "在 src/utils 目录下..."
- 使用通配符: "所有 .ts 文件"
- 备份重要文件: "先备份,然后..."
❌ Don't:
- 模糊指令: "找一些文件"
- 忽略权限: 确保有写入权限
- 批量操作无确认: 重要操作前要求确认
2. Terminal/Command Execution Skills 💻
功能:执行终端命令
可用操作:
run_command- 执行 shell 命令run_script- 运行脚本文件start_process- 启动后台进程stop_process- 停止进程
使用示例
示例1: 项目初始化
Prompt:
"初始化一个新的 Next.js 项目,
安装 Tailwind CSS 和 TypeScript"
Claude 会执行:
```bash
npx create-next-app@latest my-app --typescript
cd my-app
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
# 配置 tailwind.config.js
npm run dev
完全自动化!
示例2: 自动化测试和部署
Prompt:
"运行所有测试,如果通过则部署到 Vercel"
Claude 会:
```bash
# 1. 运行测试
npm test
# 2. 如果测试通过
if [ $? -eq 0 ]; then
# 构建项目
npm run build
# 部署
vercel --prod
echo "✅ 部署成功!"
else
echo "❌ 测试失败,取消部署"
fi
安全注意事项
⚠️ 危险命令 (Claude 会警告或拒绝):
- rm -rf /
- sudo commands (除非明确授权)
- 修改系统文件
- 网络攻击命令
✅ 安全实践:
- Claude 会显示命令预览
- 需要你确认才执行
- 敏感操作会二次确认
- 自动记录命令历史
3. Git Skills 🔀
功能:Git 版本控制操作
可用操作:
git_status- 查看状态git_diff- 查看差异git_commit- 提交更改git_branch- 分支操作git_log- 查看历史
使用示例
示例1: 智能提交
Prompt:
"查看我改了什么,生成有意义的 commit message,
然后提交"
Claude 会:
1. git diff 查看更改
2. 分析更改内容
3. 生成 conventional commit 格式的 message:
"feat(auth): add OAuth login with Google
- Implement Google OAuth flow
- Add user session management
- Update login UI with Google button"
4. 执行 git add + git commit
示例2: 代码审查前准备
Prompt:
"准备一个 PR,包括:
- 整理 commits (squash 小改动)
- 更新 CHANGELOG
- 运行 linter
- 确保测试通过"
Claude 自动化处理所有步骤!
4. API Skills 🌐
功能:调用外部 API
可用操作:
http_get- GET 请求http_post- POST 请求http_put- PUT 请求http_delete- DELETE 请求graphql_query- GraphQL 查询
使用示例
示例1: 数据获取和处理
Prompt:
"从 https://api.github.com/users/octocat
获取用户数据,然后生成一个用户卡片组件"
Claude 会:
1. 调用 API
2. 解析 JSON
3. 生成 React 组件:
```tsx
interface GitHubUser {
login: string
avatar_url: string
bio: string
// ...
}
function UserCard({ user }: { user: GitHubUser }) {
return (
<div className="card">
<img src={user.avatar_url} alt={user.login} />
<h2>{user.login}</h2>
<p>{user.bio}</p>
</div>
)
}
示例2: 测试 API 端点
Prompt:
"测试我的 REST API 的所有端点,
生成测试报告"
Claude 会:
1. 读取 API 文档/路由定义
2. 对每个端点发送测试请求
3. 验证响应状态和数据
4. 生成 Markdown 测试报告
5. Database Skills 🗄️
功能:数据库操作 (通过 MCP)
支持的数据库:
- PostgreSQL
- MySQL
- MongoDB
- SQLite
- Redis
可用操作:
query- 执行查询insert- 插入数据update- 更新数据delete- 删除数据schema- 查看表结构
使用示例
示例1: 数据分析
Prompt:
"分析 users 表,告诉我:
- 用户增长趋势
- 活跃用户占比
- 地区分布
生成可视化图表的代码"
Claude 会:
1. 查询数据库
2. 执行 SQL 聚合分析
3. 生成 Chart.js/Recharts 代码
示例2: 数据库迁移
Prompt:
"创建一个迁移脚本,
为 users 表添加 email_verified 字段"
Claude 生成:
```sql
-- Migration: add_email_verified_to_users
-- Created: 2024-12-22
ALTER TABLE users
ADD COLUMN email_verified BOOLEAN DEFAULT false;
CREATE INDEX idx_users_email_verified
ON users(email_verified);
-- Rollback
ALTER TABLE users DROP COLUMN email_verified;
6. Test Skills 🧪
功能:自动化测试
可用操作:
run_tests- 运行测试generate_tests- 生成测试用例coverage_report- 覆盖率报告debug_test- 调试失败的测试
使用示例
示例1: TDD 开发
Workflow:
1. "为用户登录功能生成测试用例"
→ Claude 生成全面的测试
2. "实现这些测试"
→ Claude 实现功能代码
3. "运行测试"
→ Claude 执行测试并报告结果
4. "修复失败的测试"
→ Claude 调整代码直到全部通过
示例2: 测试覆盖率优化
Prompt:
"检查测试覆盖率,
为覆盖率<80%的文件添加测试"
Claude 会:
1. 运行 jest --coverage
2. 分析报告
3. 识别覆盖不足的文件
4. 生成补充测试用例
5. 再次验证覆盖率
7. Browser Skills 🌐
功能:浏览器自动化
可用操作:
navigate- 访问 URLclick- 点击元素fill_form- 填写表单screenshot- 截图scrape_data- 抓取数据
使用示例
示例1: 端到端测试
Prompt:
"测试用户注册流程:
1. 打开注册页面
2. 填写表单
3. 提交
4. 验证跳转到首页"
Claude 会生成 Playwright/Puppeteer 测试:
```typescript
test('user registration flow', async ({ page }) => {
await page.goto('http://localhost:3000/register')
await page.fill('input[name="email"]', 'test@example.com')
await page.fill('input[name="password"]', 'SecurePass123!')
await page.click('button[type="submit"]')
await expect(page).toHaveURL('http://localhost:3000/dashboard')
await expect(page.locator('h1')).toContainText('Welcome')
})
🛠️ 创建自定义 Skills
自定义 Skill 结构
// my-custom-skill.ts
export const myCustomSkill = {
name: 'my_custom_skill',
description: '描述这个 Skill 做什么',
parameters: {
type: 'object',
properties: {
param1: {
type: 'string',
description: '参数1的说明'
},
param2: {
type: 'number',
description: '参数2的说明'
}
},
required: ['param1']
},
async execute(params: {
param1: string
param2?: number
}) {
// 实现你的逻辑
const result = await doSomething(params)
return result
}
}
示例:创建 Notion API Skill
// notion-skill.ts
import { Client } from '@notionhq/client'
export const notionSkill = {
name: 'notion_operations',
description: 'Interact with Notion databases and pages',
parameters: {
type: 'object',
properties: {
action: {
type: 'string',
enum: ['create_page', 'query_database', 'update_page'],
description: 'Action to perform'
},
database_id: {
type: 'string',
description: 'Notion database ID'
},
content: {
type: 'object',
description: 'Page content'
}
},
required: ['action']
},
async execute(params) {
const notion = new Client({
auth: process.env.NOTION_API_KEY
})
switch (params.action) {
case 'create_page':
return await notion.pages.create({
parent: { database_id: params.database_id },
properties: params.content
})
case 'query_database':
return await notion.databases.query({
database_id: params.database_id
})
// ... 其他操作
}
}
}
注册自定义 Skill
// .cursor/skills/index.ts
import { notionSkill } from './notion-skill'
import { slackSkill } from './slack-skill'
export const customSkills = [
notionSkill,
slackSkill,
// ... 更多自定义 Skills
]
使用自定义 Skill
Prompt:
"在 Notion 中创建一个新的项目任务"
Claude 会:
1. 识别 notion_operations skill
2. 调用 create_page action
3. 传入参数
4. 返回结果
💡 Skills 最佳实践
1. 组合使用 Skills
强大的组合示例:
Prompt:
"从 GitHub API 获取最近的 issues,
分析问题类型,
在 Notion 中创建任务看板,
发送 Slack 通知给团队"
Claude 会组合使用:
1. API Skill → 获取 GitHub issues
2. 分析和分类(AI 能力)
3. Database/Notion Skill → 创建任务
4. API Skill → 发送 Slack 消息
一个 Prompt 完成复杂工作流!
2. 错误处理
// Skill 中的错误处理
async execute(params) {
try {
const result = await riskyOperation(params)
return {
success: true,
data: result
}
} catch (error) {
return {
success: false,
error: error.message,
suggestion: '请检查参数是否正确'
}
}
}
Claude 会智能处理错误:
- 向用户报告问题
- 提供解决建议
- 必要时重试
3. 性能优化
// 缓存结果
const cache = new Map()
async execute(params) {
const cacheKey = JSON.stringify(params)
if (cache.has(cacheKey)) {
return cache.get(cacheKey)
}
const result = await expensiveOperation(params)
cache.set(cacheKey, result)
return result
}
4. 安全性
// 输入验证
import { z } from 'zod'
const ParamsSchema = z.object({
userId: z.string().uuid(),
email: z.string().email(),
role: z.enum(['admin', 'user', 'guest'])
})
async execute(params) {
// 验证输入
const validated = ParamsSchema.parse(params)
// 权限检查
if (validated.role !== 'admin') {
throw new Error('Insufficient permissions')
}
// 执行操作
return await secureOperation(validated)
}
🚀 高级用法
1. 条件执行链
Prompt:
"检查 API 健康状态,
如果不健康,重启服务,
如果重启失败,发送告警"
Claude 会创建执行链:
1. HTTP GET /health
2. IF status !== 200:
3. run_command('pm2 restart api')
4. IF restart failed:
5. send_alert('API down!')
2. 循环操作
Prompt:
"对 users 表的每一行:
1. 调用外部 API 获取用户详情
2. 更新数据库
3. 记录日志"
Claude 会处理循环,并智能:
- 批量处理(避免逐个请求)
- 并发控制(防止 API 限流)
- 进度报告
3. 数据流水线
Prompt:
"建立数据处理流水线:
GitHub issues → 清洗数据 → 分类标签 →
存入数据库 → 生成报告 → 发送邮件"
Claude 自动化整个流程!
📊 Skills 性能对比
| Skill 类型 | 执行速度 | 资源消耗 | 使用频率 |
|---|---|---|---|
| File System | ⚡ 极快 | 低 | 极高 |
| Terminal | ⚡ 快 | 中 | 高 |
| API | 🐌 取决网络 | 低 | 高 |
| Database | ⚡ 快 | 中 | 中 |
| Browser | 🐌 较慢 | 高 | 低 |
✅ 检查清单
完成本章后,你应该能够:
- [ ] 理解 Skills 的工作原理
- [ ] 熟练使用所有内置 Skills
- [ ] 创建简单的自定义 Skills
- [ ] 组合多个 Skills 完成复杂任务
- [ ] 处理 Skills 执行中的错误
- [ ] 优化 Skills 性能
🎯 实战练习
练习1: 自动化工作流
创建一个自动化脚本:
1. 从 Google Sheets 读取任务列表
2. 为每个任务创建 GitHub Issue
3. 在 Notion 中创建项目看板
4. 发送 Slack 通知
练习2: 自定义 Skill
创建一个 Weather Skill:
- 调用天气 API
- 缓存结果
- 提供友好的响应格式
练习3: 数据处理流水线
建立 ETL 流程:
Extract: 从 API 获取数据
Transform: 清洗和转换
Load: 存入数据库
📚 下一步
掌握了 Skills,你已经能让 Claude 做很多事情!
接下来学习:
- 06 - MCP 协议 - 更强大的扩展系统
- 07 - 高级功能 - 组合使用所有能力
- 08 - 最佳实践 - 生产环境使用指南
⚡ Skills 让 Claude 从"会说话"变成"会做事"
掌握 Skills,你就掌握了 AI 自动化的核心!