🎯 什么是 AI 智能体 Skill?
Skill(技能) 是 AI 智能体的核心能力单元,它定义了智能体能够执行的具体任务和操作。就像人类通过学习掌握各种技能一样,AI 智能体通过 Skill 系统获得与外部世界交互的能力。
核心定义
Skill 是一个封装了特定功能模块的代码单元,它使 AI 能够:
- 感知外部环境(读取文件、查询 API、搜索信息)
- 执行具体操作(发送消息、创建文档、管理日程)
- 与用户进行有意义的交互
📚 Skill 的基本概念
1. 技能类型
根据功能领域,Skill 可以分为以下几类:
| 类型 | 描述 | 示例 |
|---|---|---|
| 信息查询 | 获取外部数据 | 天气查询、新闻搜索、文档读取 |
| 内容创作 | 生成或编辑内容 | 文章撰写、代码生成、图片处理 |
| 任务管理 | 执行工作流程 | 待办事项、日程安排、会议管理 |
| 系统集成 | 连接第三方服务 | 企业微信、飞书、GitHub |
| 系统运维 | 管理和监控 | 健康检查、备份、部署 |
2. 技能架构
一个完整的 Skill 通常包含以下组件:
skill-name/
├── SKILL.md # 技能定义和说明
├── index.ts # 主入口文件
├── handlers/ # 功能处理器
│ ├── query.ts # 查询处理
│ ├── create.ts # 创建处理
│ └── update.ts # 更新处理
├── utils/ # 工具函数
└── tests/ # 测试用例
3. 技能生命周期
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 触发识别 │ → │ 参数解析 │ → │ 执行处理 │
└─────────────┘ └─────────────┘ └─────────────┘
↓
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 结果返回 │ ← │ 错误处理 │ ← │ 权限验证 │
└─────────────┘ └─────────────┘ └─────────────┘
🔧 技能设计原则
1. 单一职责
每个 Skill 应该专注于一个明确的功能领域:
// ✅ 好的设计 - 专注于待办查询
export const wecomGetTodoList = {
name: "wecom-get-todo-list",
description: "查询企业微信待办事项列表",
handler: getTodoListHandler
};
// ❌ 不好的设计 - 功能过于混杂
export const wecomEverything = {
name: "wecom-everything",
description: "处理所有企业微信相关操作", // 太宽泛
handler: everythingHandler
};
2. 清晰的输入输出
// 明确的参数定义
interface GetTodoListParams {
startTime?: string; // 开始时间 (ISO 8601)
endTime?: string; // 结束时间 (ISO 8601)
status?: "pending" | "completed";
limit?: number; // 返回数量限制
}
// 明确的返回类型
interface TodoItem {
id: string;
title: string;
creator: string;
createTime: string;
status: "pending" | "completed";
}
3. 错误处理
async function getTodoList(params: GetTodoListParams) {
try {
// 参数验证
if (!params.startTime) {
throw new ValidationError("startTime is required");
}
// API 调用
const result = await wecomAPI.getTodos(params);
return {
success: true,
data: result
};
} catch (error) {
return {
success: false,
error: error.message,
code: error.code
};
}
}
4. 权限控制
// 在技能定义中声明所需权限
export const skillConfig = {
name: "wecom-edit-todo",
permissions: ["todo:read", "todo:write"],
rateLimit: {
requests: 100,
window: "1h"
}
};
💡 实际应用案例
案例 1:天气查询技能
// skills/weather/index.ts
export async function getWeather(city: string) {
const response = await fetch(`https://wttr.in/${city}?format=j1`);
const data = await response.json();
return {
city: data.nearest_area[0].areaName[0].value,
temperature: data.current_condition[0].temp_C,
condition: data.current_condition[0].weatherDesc[0].value,
humidity: data.current_condition[0].humidity
};
}
// SKILL.md
// ---
// name: weather
// description: 获取当前天气和预报
// triggers: ["天气", "temperature", "forecast"]
// ---
使用示例:
用户:北京今天天气怎么样?
AI: 北京当前温度 25°C,晴朗,湿度 45%
案例 2:企业微信待办管理
// skills/wecom-todo/index.ts
export const todoSkills = {
// 查询待办列表
list: async (params) => {
const todos = await wecomAPI.todo.list(params);
return formatTodoList(todos);
},
// 创建待办
create: async (data) => {
const todo = await wecomAPI.todo.create(data);
return { id: todo.id, message: "待办创建成功" };
},
// 更新待办状态
update: async (id, status) => {
await wecomAPI.todo.update(id, { status });
return { message: `待办已标记为${status}` };
},
// 删除待办
delete: async (id) => {
await wecomAPI.todo.delete(id);
return { message: "待办已删除" };
}
};
使用示例:
用户:帮我创建一个待办,明天下午 3 点开项目会议
AI: ✅ 已创建待办:明天下午 3 点开项目会议
用户:查看我这周的待办
AI: 您本周有 3 个待办:
1. 周一 10:00 - 团队周会
2. 周三 15:00 - 项目评审
3. 周五 17:00 - 周报提交
用户:标记第一个待办为完成
AI: ✅ 已完成:团队周会
案例 3:文档管理技能
// skills/doc-manager/index.ts
export const docManager = {
// 读取文档
read: async (docId) => {
const doc = await docAPI.get(docId);
const content = await docAPI.exportMarkdown(docId);
return { title: doc.title, content };
},
// 创建文档
create: async (title, content) => {
const doc = await docAPI.create({ title, content });
return { id: doc.id, url: doc.url };
},
// 更新文档
update: async (docId, content) => {
await docAPI.update(docId, { content });
return { message: "文档已更新" };
}
};
案例 4:健康检查技能
// skills/healthcheck/index.ts
export async function healthCheck() {
const checks = {
system: await checkSystemHealth(),
network: await checkNetwork(),
services: await checkServices(),
security: await checkSecurity()
};
const issues = Object.entries(checks)
.filter(([_, status]) => status !== "ok")
.map(([service, status]) => ({ service, status }));
return {
overall: issues.length === 0 ? "healthy" : "warning",
issues,
recommendations: generateRecommendations(issues)
};
}
🚀 技能开发最佳实践
1. 使用技能模板
# SKILL.md 模板
## 技能名称
{skill-name}
## 功能描述
{简短描述技能的核心功能}
## 触发条件
- 用户提到 "{keyword1}"
- 用户询问 "{keyword2}"
- 用户需要 "{action}"
## 输入参数
| 参数 | 类型 | 必填 | 描述 |
|------|------|------|------|
| param1 | string | 是 | 参数说明 |
## 输出格式
```json
{
"success": true,
"data": {}
}
错误处理
- 参数缺失:返回错误码 400
- 权限不足:返回错误码 403
- 服务异常:返回错误码 500
### 2. 添加技能标签
标签系统帮助分类和检索技能:
```yaml
tags:
- category: integration # 集成类
name: wecom # 企业微信
- category: function # 功能类
name: todo-management # 待办管理
- category: complexity # 复杂度
name: intermediate # 中级
3. 编写测试用例
// skills/weather/weather.test.ts
describe("Weather Skill", () => {
test("should return valid weather data", async () => {
const result = await getWeather("北京");
expect(result).toHaveProperty("temperature");
expect(result).toHaveProperty("condition");
});
test("should handle invalid city", async () => {
const result = await getWeather("invalid_city_xyz");
expect(result.success).toBe(false);
});
});
4. 文档化
## 使用示例
### 基本用法
查询北京天气
### 高级用法
查询北京未来 3 天的天气
### 常见问题
**Q: 支持哪些城市?**
A: 支持全球主要城市,使用中文或英文名称均可。
**Q: 数据更新频率?**
A: 实时获取,每次查询都是最新数据。
📊 技能标签体系
为了更好管理和发现技能,建议建立统一的标签体系:
按功能分类
| 标签 | 描述 | 示例技能 |
|---|---|---|
#query | 信息查询类 | weather, search, lookup |
#create | 内容创建类 | doc-create, todo-create |
#update | 更新修改类 | doc-edit, todo-update |
#delete | 删除操作类 | todo-delete, doc-delete |
#manage | 管理类 | schedule, meeting |
按集成平台
| 标签 | 描述 | 示例技能 |
|---|---|---|
#wecom | 企业微信 | wecom-msg, wecom-todo |
#feishu | 飞书 | feishu-doc, feishu-wiki |
#github | GitHub | github-repo, github-issue |
#slack | Slack | slack-msg, slack-channel |
按复杂度
| 标签 | 描述 | 标准 |
|---|---|---|
#basic | 基础 | 单一 API 调用,无状态 |
#intermediate | 中级 | 多步骤,有状态管理 |
#advanced | 高级 | 复杂工作流,多系统集成 |
🎓 学习路径
入门阶段
- 理解 Skill 基本概念
- 学习现有技能代码
- 修改简单技能参数
进阶阶段
- 开发新技能
- 集成第三方 API
- 实现错误处理
专家阶段
- 设计技能架构
- 优化性能和安全
- 建立技能生态
🔮 未来展望
随着 AI 技术的发展,Skill 系统将朝着以下方向演进:
- 自适应技能 - 根据用户行为自动优化
- 组合技能 - 多个技能自动编排
- 技能市场 - 共享和交易技能
- 自然语言定义 - 用自然语言创建技能
📚 相关资源
掌握技能开发,让你的 AI 智能体无所不能!