概述
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 自己发布
# 在聊天中告诉它:"帮我把天气技能发布到市场"