🎯 什么是 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
#githubGitHubgithub-repo, github-issue
#slackSlackslack-msg, slack-channel

按复杂度

标签描述标准
#basic基础单一 API 调用,无状态
#intermediate中级多步骤,有状态管理
#advanced高级复杂工作流,多系统集成

🎓 学习路径

入门阶段

  1. 理解 Skill 基本概念
  2. 学习现有技能代码
  3. 修改简单技能参数

进阶阶段

  1. 开发新技能
  2. 集成第三方 API
  3. 实现错误处理

专家阶段

  1. 设计技能架构
  2. 优化性能和安全
  3. 建立技能生态

🔮 未来展望

随着 AI 技术的发展,Skill 系统将朝着以下方向演进:

  1. 自适应技能 - 根据用户行为自动优化
  2. 组合技能 - 多个技能自动编排
  3. 技能市场 - 共享和交易技能
  4. 自然语言定义 - 用自然语言创建技能

📚 相关资源

掌握技能开发,让你的 AI 智能体无所不能!