文档技能社区更新日志教程 GitHub开始使用
技能开发

创建你的第一个技能

学习 ClawBot 技能系统架构,从零开发自定义技能插件。

概述

ClawBot 的技能系统是一套高度可扩展的插件架构。每个技能就是一个独立的模块,可以被 ClawBot 按需调用。技能可以是简单的信息查询,也可以是复杂的多步骤工作流。

热加载

无需重启,实时加载新技能

沙箱隔离

每个技能在独立沙箱中运行

TypeScript

完整的类型支持与代码提示

社区分享

一键发布到技能市场

技能结构

每个技能是一个包含以下文件的目录:

skills/
└── weather/
    ├── manifest.json     # 技能元信息
    ├── index.ts          # 主入口文件
    ├── tools.ts          # 工具定义
    ├── prompts.ts        # 提示词模板
    └── README.md         # 说明文档

manifest.json 示例

{
  "name": "weather",
  "version": "1.0.0",
  "displayName": "天气查询",
  "description": "查询全球城市实时天气与预报",
  "author": "clawbot-community",
  "tags": ["工具", "天气", "生活"],
  "permissions": ["network"],
  "triggers": ["天气", "weather", "气温", "下雨"]
}

生命周期

技能在以下生命周期中运行:

1

触发匹配

ClawBot 识别用户意图,匹配到对应技能

2

参数提取

从用户消息中提取关键参数

3

工具执行

调用技能定义的工具函数

4

结果格式化

将执行结果格式化为用户友好的回复

5

记忆存储

将关键信息写入长期记忆

示例:天气技能

一个完整的天气查询技能实现:

// skills/weather/index.ts
import { Skill, ToolResult } from '@clawbot/sdk'

export default class WeatherSkill extends Skill {
  name = 'weather'

  tools = [{
    name: 'get_weather',
    description: '查询指定城市的实时天气',
    parameters: {
      city: { type: 'string', description: '城市名称', required: true },
      days: { type: 'number', description: '预报天数', default: 1 }
    },
    execute: async ({ city, days }): Promise<ToolResult> => {
      const res = await fetch(
        `https://api.weatherapi.com/v1/forecast.json?q=${city}&days=${days}`
      )
      const data = await res.json()
      return {
        success: true,
        data: {
          city: data.location.name,
          temp: data.current.temp_c,
          condition: data.current.condition.text,
          forecast: data.forecast.forecastday
        }
      }
    }
  }]
}

发布技能

开发完成后,可以通过以下方式发布到社区:

# 验证技能格式
clawbot skill validate ./skills/weather

# 发布到技能市场
clawbot skill publish ./skills/weather

# 或者直接让 ClawBot 自己发布
# 在聊天中告诉它:"帮我把天气技能发布到市场"