OpenClaw 自定义技能开发:打造专属 AI 助手
技能(Skill)是 OpenClaw 智能体的核心能力单元,定义了智能体如何处理特定类型的用户请求。通过开发自定义技能,你可以让智能体具备丰富的业务能力。
技能(Skill)概述
什么是技能?
技能是处理特定任务的代码模块,包括:
- 意图识别:判断用户请求是否属于该技能
- 参数提取:从用户消息中提取必要参数
- 业务逻辑:执行具体的业务逻辑
- 响应生成:生成回复消息
技能开发基础
1. 创建技能
# 使用 CLI 创建技能
openclaw create skill weather
# 手动创建
mkdir -p skills/weather
touch skills/weather/__init__.py
touch skills/weather/handler.py
2. 技能目录结构
skills/weather/
├── __init__.py # 技能入口
├── handler.py # 处理逻辑
├── config.yaml # 技能配置
└── tests/ # 测试文件
└── test_handler.py
编写技能处理逻辑
基础技能模板
from openclaw.core.skill import Skill, SkillContext, SkillResponse
from openclaw.utils.logger import get_logger
class WeatherSkill(Skill):
"""天气查询技能"""
def __init__(self):
super().__init__()
self.logger = get_logger(__name__)
async def can_handle(self, context: SkillContext) -> bool:
"""判断是否能处理该消息"""
message = context.message.lower()
keywords = ["天气", "气温", "天气预报"]
return any(kw in message for kw in keywords)
async def handle(self, context: SkillContext) -> SkillResponse:
"""处理消息"""
try:
# 提取城市名称
city = self._extract_city(context.message)
# 获取天气信息
weather_data = await self._get_weather(city)
# 生成回复
response = self._format_response(weather_data)
return SkillResponse(
message=response,
message_type="text"
)
except Exception as e:
self.logger.error(f"处理天气查询失败: {e}")
return SkillResponse(
message="查询天气失败,请稍后再试",
message_type="text"
)
高级技能功能
1. 参数提取
使用 OpenClaw 内置的参数提取工具:
from openclaw.core.nlp import EntityExtractor
extractor = EntityExtractor()
def extract_city(self, message: str) -> str:
"""提取城市名称"""
entities = extractor.extract(message)
return entities.get("city", "北京")
2. 多轮对话
使用上下文管理实现多轮对话:
async def handle(self, context: SkillContext) -> SkillResponse:
# 获取上下文
session_data = await context.session.get("weather", {})
if "city" not in session_data:
# 第一轮:询问城市
await context.session.set("weather", {"step": 1})
return SkillResponse(
message="请问您想查询哪个城市的天气?",
message_type="text"
)
技能最佳实践
1. 单一职责
每个技能只负责一个特定功能,保持简洁。
2. 错误处理
妥善处理异常,提供友好的错误提示。
3. 日志记录
记录关键操作和错误信息,便于调试。
下一步
掌握了技能开发后,在下一篇文章中,我们将学习如何使用工具插件,让智能体具备更强大的能力。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。







