OpenClaw Skill 开发样例详解
OpenClaw Skill 是构建 AI Agent 扩展能力的核心模块,下面通过具体样例展示不同类型 Skill 的实现方式。
1. 纯文本描述型 Skill(零代码)
此类 Skill 仅通过 <em>SKILL</em>.md 文件描述能力,无需编写代码:
# 计算器<em>技能</em> 能力描述 我是一个智能计算器,可以帮您完成基本的数学运算,包括加减乘除、幂运算和平方根计算。 使用规则 - 用户可以用自然语言描述数学计算需求 - 支持整数、小数和负数的运算 - 复杂表达式会分步计算并解释过程 操作步骤 1. 解析用户输入中的数学表达式 2. 识别运算类型和数值 3. 执行计算并验证结果 4. 以清晰格式返回计算过程 输出格式
GPT plus 代充 只需 145
计算过程: 输入:3 + 5 × 2 步骤:先计算 5 × 2 = 10,再计算 3 + 10 = 13 结果:13
讯享网 应用场景:简单的逻辑判断、信息查询、流程指导等不需要外部工具调用的场景 [ref_1]。
2. Python 代码型 Skill(文件处理示例)
以下是一个文件内容统计 Skill 的完整实现:
SKILL.md 文件:
# 文件统计分析<em>技能</em> 能力描述 我可以分析指定文本文件的基本统计信息,包括行数、字数、字符数和文件大小。 权限声明 需要读取用户指定文件路径的权限。 工具调用 - file_analyzer: 分析文件统计信息 使用示例 "请分析 document.txt 文件的统计信息" "统计 report.md 的字数和行数" skill.py 文件:
讯享网import asyncio import os from typing import Dict, Any async def file_analyzer<em>(</em>file_path: str<em>)</em> -> Dict[str, Any]: """ 分析文件统计信息 Args: file_path: 要分析的文件路径 Returns: 包含文件统计信息的字典 """ try: # 检查文件是否存在 if not os.path.exists<em>(</em>file_path<em>)</em>: return {"error": f"文件 {file_path} 不存在"} # 获取文件大小 file_size = os.path.getsize<em>(</em>file_path<em>)</em> # 读取文件内容进行统计 with open<em>(</em>file_path, 'r', encoding='utf-8'<em>)</em> as file: content = file.read<em>(</em><em>)</em> lines = content.split<em>(</em>' '<em>)</em> # 统计信息 stats = { "file_path": file_path, "file_size_bytes": file_size, "file_size_kb": round<em>(</em>file_size / 1024, 2<em>)</em>, "line_count": len<em>(</em>lines<em>)</em>, "word_count": len<em>(</em>content.split<em>(</em><em>)</em><em>)</em>, "character_count": len<em>(</em>content<em>)</em>, "non_whitespace_chars": len<em>(</em>content.replace<em>(</em>' ', ''<em>)</em>.replace<em>(</em>' ', ''<em>)</em><em>)</em> } return stats except Exception as e: return {"error": f"分析文件时出错: {str<em>(</em>e<em>)</em>}"} # 异步函数注册 __all__ = ['file_analyzer'] 测试验证:
# 在 <em>OpenClaw</em> 环境中测试 <em>openclaw</em> --test-<em>skill</em> file_stats 安全实践:文件操作类 Skill 必须明确声明权限需求,并在执行前验证文件路径合法性 [ref_3]。
3. API 集成型 Skill(天气查询)
基于国内 API 服务的天气查询 Skill:
SKILL.md 文件:
讯享网# 国内天气查询 能力描述 我可以查询中国主要城市的实时天气信息,包括温度、湿度、风向和天气状况。 工具调用 - get_weather: 获取指定城市的天气信息 使用规则 - 支持城市中文名称查询 - 自动处理城市名称模糊匹配 - 返回结构化天气数据 输出格式 以表格形式展示天气信息,包含温度区间、体感温度和建议。 skill.py 文件:
import asyncio import <em>ai</em>ohttp import json from typing import Dict, List async def get_weather<em>(</em>city_name: str<em>)</em> -> Dict[str, Any]: """ 获取城市天气信息(使用国产 uapis.cn API) Args: city_name: 城市名称,如"北京"、"上海" Returns: 结构化天气信息 """ # API 配置(示例配置,实际需要申请密钥) API_URL = "https://api.uapis.cn/weather/query" API_KEY = "your_api_key_here" # 需要在实际使用时替换 try: async with <em>ai</em>ohttp.ClientSession<em>(</em><em>)</em> as session: params = { "city": city_name, "key": API_KEY } async with session.get<em>(</em>API_URL, params=params<em>)</em> as response: if response.status == 200: data = aw<em>ai</em>t response.json<em>(</em><em>)</em> # 解析返回数据 weather_info = °C - °C", "current_temp": f"°C", "weather": data.get<em>(</em>"weather", "未知"<em>)</em>, "humidity": f"%", "wind": data.get<em>(</em>"wind", "未知"<em>)</em>, "update_time": data.get<em>(</em>"reporttime", "未知"<em>)</em> } return weather_info else: return {"error": f"API 请求失败: {response.status}"} except Exception as e: return {"error": f"获取天气信息失败: {str<em>(</em>e<em>)</em>}"} __all__ = ['get_weather'] 部署配置:
讯享网# <em>技能</em>目录结构 ~/.<em>openclaw</em>/<em>skill</em>s/weather_query/ ├── <em>SKILL</em>.md ├── <em>skill</em>.py └── config.json # 可选配置文件 4. 混合型 Skill(文本处理 + 文件输出)
结合自然语言处理和文件操作的复杂 Skill:
SKILL.md 文件:
# 文本摘要生成器 能力描述 我可以对长文本进行智能摘要,生成核心要点,并支持保存摘要结果到文件。 权限声明 需要读取输入文件和写入输出文件的权限。 工具调用 - generate_summary: 生成文本摘要 - save_summary_to_file: 保存摘要到指定文件 操作步骤 1. 读取源文本内容 2. 提取关键信息和核心观点 3. 生成结构化摘要 4. 可选保存到输出文件 skill.py 文件:
讯享网import asyncio import os from typing import Dict, List async def generate_summary<em>(</em>text: str, max_length: int = 200<em>)</em> -> Dict[str, str]: """ 生成文本摘要 Args: text: 输入文本 max_length: 摘要最大长度 Returns: 包含摘要和关键点的字典 """ # 简单的摘要生成逻辑(实际可集成更复杂的 NLP 模型) sentences = text.split<em>(</em>'。'<em>)</em> key_sentences = sentences[:3] # 取前三个句子作为摘要 summary = '。'.join<em>(</em>key_sentences<em>)</em> + '。' # 提取关键词(简化示例) keywords = list<em>(</em>set<em>(</em>[word for word in text.split<em>(</em><em>)</em> if len<em>(</em>word<em>)</em> > 1]<em>)</em><em>)</em>[:5] return { "summary": summary[:max_length], "key_points": keywords, "original_length": len<em>(</em>text<em>)</em>, "summary_length": len<em>(</em>summary<em>)</em> } async def save_summary_to_file<em>(</em>summary_data: Dict, output_path: str<em>)</em> -> Dict[str, str]: """ 保存摘要到文件 Args: summary_data: 摘要数据 output_path: 输出文件路径 Returns: 操作结果信息 """ try: with open<em>(</em>output_path, 'w', encoding='utf-8'<em>)</em> as f: f.write<em>(</em>f"文本摘要报告 "<em>)</em> f.write<em>(</em>f"============ "<em>)</em> f.write<em>(</em>f"摘要内容: {summary_data['summary']} "<em>)</em> f.write<em>(</em>f"关键点: {', '.join<em>(</em>summary_data['key_points']<em>)</em>} "<em>)</em> f.write<em>(</em>f"原文长度: {summary_data['original_length']} 字符 "<em>)</em> f.write<em>(</em>f"摘要长度: {summary_data['summary_length']} 字符 "<em>)</em> f.write<em>(</em>f"压缩率: {1 - summary_data['summary_length']/summary_data['original_length']:.1%} "<em>)</em> return {"status": "success", "message": f"摘要已保存到: {output_path}"} except Exception as e: return {"status": "error", "message": f"保存失败: {str<em>(</em>e<em>)</em>}"} __all__ = ['generate_summary', 'save_summary_to_file'] 5. Skill 开发关键要点总结
| 技能类型 | 核心文件 | 技术要点 | 适用场景 |
|---|---|---|---|
| 纯文本型 | SKILL.md | 自然语言描述、结构化输出 | 简单查询、流程指导 [ref_1] |
| Python 代码型 | SKILL.md + skill.py | 异步函数、工具调用、错误处理 | 文件操作、数据处理 [ref_5] |
| API 集成型 | SKILL.md + skill.py | HTTP 请求、数据解析、密钥管理 | 天气查询、数据获取 [ref_4] |
| 混合复杂型 | 完整技能包 | 多工具协作、权限管理 | 文本处理、自动化任务 [ref_6] |
开发流程验证:
# 1. 创建<em>技能</em>目录 mkdir -p ~/.<em>openclaw</em>/<em>skill</em>s/my_<em>skill</em> # 2. 编写核心文件 cd ~/.<em>openclaw</em>/<em>skill</em>s/my_<em>skill</em> touch <em>SKILL</em>.md <em>skill</em>.py # 3. 启用调试模式 export <em>OPENCLAW</em>_DEBUG=true # 4. 重启 Gateway 加载<em>技能</em> <em>openclaw</em> gateway restart # 5. 测试<em>技能</em>功能 <em>openclaw</em> --test-<em>skill</em> my_<em>skill</em> 安全注意事项:
- 所有文件操作必须进行路径验证和权限检查 [ref_3]
- API 密钥等敏感信息应使用环境变量或配置文件管理
- 输入数据需要进行 sanitization 处理,防止注入攻击
通过以上样例可以看出,OpenClaw Skill 开发具有高度的灵活性,从简单的文本描述到复杂的代码集成都能很好支持。开发者可以根据具体需求选择合适的 Skill 类型,遵循 MCP 协议规范,构建安全可靠的 AI Agent 扩展能力 [ref_2]。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/212552.html