OpenClaw Skill 开发样例详解
OpenClaw Skill 是构建 AI Agent 扩展能力的核心模块,下面通过具体样例展示不同类型 Skill 的实现方式。
1. 纯文本描述型 Skill(零代码)
此类 Skill 仅通过 <em>SKILL</em>.md 文件描述能力,无需编写代码:
# 计算器技能 能力描述 我是一个智能计算器,可以帮您完成基本的数学运算,包括加减乘除、幂运算和平方根计算。 使用规则 - 用户可以用自然语言描述数学计算需求 - 支持整数、小数和负数的运算 - 复杂表达式会分步计算并解释过程 操作步骤 1. 解析用户输入中的数学表达式 2. 识别运算类型和数值 3. 执行计算并验证结果 4. 以清晰格式返回计算过程 输出格式
计算过程: 输入:3 + 5 × 2 步骤:先计算 5 × 2 = 10,再计算 3 + 10 = 13 结果:13
GPT plus 代充 只需 145
应用场景:简单的逻辑判断、信息查询、流程指导等不需要外部工具调用的场景 [ref_1]。
2. Python 代码型 Skill(文件处理示例)
以下是一个文件内容统计 Skill 的完整实现:
SKILL.md 文件:
# 文件统计分析技能 能力描述 我可以分析指定文本文件的基本统计信息,包括行数、字数、字符数和文件大小。 权限声明 需要读取用户指定文件路径的权限。 工具调用 - file_analyzer<em>:</em> 分析文件统计信息 使用示例 "请分析 document.txt 文件的统计信息" "统计 report.md 的字数和行数"
skill.py 文件:
GPT plus 代充 只需 145import asyncio import os from typing import Dict, Any async def file_analyzer(file_path<em>:</em> str) -> Dict[str, Any]<em>:</em> """ 分析文件统计信息 Args<em>:</em> file_path<em>:</em> 要分析的文件路径 Returns<em>:</em> 包含文件统计信息的字典 """ try<em>:</em> # 检查文件是否存在 if not os.path.exists(file_path)<em>:</em> return {"error"<em>:</em> f"文件 {file_path} 不存在"} # 获取文件大小 file_size = os.path.getsize(file_path) # 读取文件内容进行统计 with open(file_path, 'r', encoding='utf-8') as file<em>:</em> content = file.read() lines = content.split(' ') # 统计信息 stats = { "file_path"<em>:</em> file_path, "file_size_bytes"<em>:</em> file_size, "file_size_kb"<em>:</em> round(file_size / 1024, 2), "line_count"<em>:</em> len(lines), "word_count"<em>:</em> len(content.split()), "character_count"<em>:</em> len(content), "non_whitespace_chars"<em>:</em> len(content.replace(' ', '').replace(' ', '')) } return stats except Exception as e<em>:</em> return {"error"<em>:</em> f"分析文件<em>时</em>出错<em>:</em> {str(e)}"} # 异步函数注册 __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 文件:
GPT plus 代充 只需 145# 国内天气查询 能力描述 我可以查询中国主要城市的实<em>时</em>天气信息,包括温度、湿度、风向和天气状况。 工具调用 - get_weather<em>:</em> 获取指定城市的天气信息 使用规则 - 支持城市中文名称查询 - 自动处理城市名称模糊匹配 - 返回结构化天气数据 输出格式 以表格形式展示天气信息,包含温度区间、体感温度和建议。
skill.py 文件:
import asyncio import aiohttp import json from typing import Dict, List async def get_weather(city_name<em>:</em> str) -> Dict[str, Any]<em>:</em> """ 获取城市天气信息(使用国产 uapis.cn API) Args<em>:</em> city_name<em>:</em> 城市名称,如"北京"、"上海" Returns<em>:</em> 结构化天气信息 """ # API 配置(示例配置,实际需要申请密钥) API_URL = "https<em>:</em>//api.uapis.cn/weather/query" API_KEY = "your_api_key_here" # 需要在实际使用<em>时</em>替换 try<em>:</em> async with aiohttp.ClientSession() as session<em>:</em> params = { "city"<em>:</em> city_name, "key"<em>:</em> API_KEY } async with session.get(API_URL, params=params) as response<em>:</em> if response.status == 200<em>:</em> data = await response.json() # 解析返回数据 weather_info = °C - °C", "current_temp"<em>:</em> f"°C", "weather"<em>:</em> data.get("weather", "未知"), "humidity"<em>:</em> f"%", "wind"<em>:</em> data.get("wind", "未知"), "update_time"<em>:</em> data.get("reporttime", "未知") } return weather_info else<em>:</em> return {"error"<em>:</em> f"API 请求失败<em>:</em> {response.status}"} except Exception as e<em>:</em> return {"error"<em>:</em> f"获取天气信息失败<em>:</em> {str(e)}"} __all__ = ['get_weather']
部署配置:
GPT plus 代充 只需 145# 技能目录结构 ~/.<em>openclaw</em>/<em>skills</em>/weather_query/ ├── <em>SKILL</em>.md ├── <em>skill</em>.py └── config.json # 可选配置文件
4. 混合型 Skill(文本处理 + 文件输出)
结合自然语言处理和文件操作的复杂 Skill:
SKILL.md 文件:
# 文本摘要生成器 能力描述 我可以对长文本进行智能摘要,生成核心要点,并支持保存摘要结果到文件。 权限声明 需要读取输入文件和写入输出文件的权限。 工具调用 - generate_summary<em>:</em> 生成文本摘要 - save_summary_to_file<em>:</em> 保存摘要到指定文件 操作步骤 1. 读取源文本内容 2. 提取关键信息和核心观点 3. 生成结构化摘要 4. 可选保存到输出文件
skill.py 文件:
GPT plus 代充 只需 145import asyncio import os from typing import Dict, List async def generate_summary(text<em>:</em> str, max_length<em>:</em> int = 200) -> Dict[str, str]<em>:</em> """ 生成文本摘要 Args<em>:</em> text<em>:</em> 输入文本 max_length<em>:</em> 摘要最大长度 Returns<em>:</em> 包含摘要和关键点的字典 """ # 简单的摘要生成逻辑(实际可集成更复杂的 NLP 模型) sentences = text.split('。') key_sentences = sentences[<em>:</em>3] # 取前三个句子作为摘要 summary = '。'.join(key_sentences) + '。' # 提取关键词(简化示例) keywords = list(set([word for word in text.split() if len(word) > 1]))[<em>:</em>5] return { "summary"<em>:</em> summary[<em>:</em>max_length], "key_points"<em>:</em> keywords, "original_length"<em>:</em> len(text), "summary_length"<em>:</em> len(summary) } async def save_summary_to_file(summary_data<em>:</em> Dict, output_path<em>:</em> str) -> Dict[str, str]<em>:</em> """ 保存摘要到文件 Args<em>:</em> summary_data<em>:</em> 摘要数据 output_path<em>:</em> 输出文件路径 Returns<em>:</em> 操作结果信息 """ try<em>:</em> with open(output_path, 'w', encoding='utf-8') as f<em>:</em> f.write(f"文本摘要报告 ") f.write(f"============ ") f.write(f"摘要内容<em>:</em> {summary_data['summary']} ") f.write(f"关键点<em>:</em> {', '.join(summary_data['key_points'])} ") f.write(f"原文长度<em>:</em> {summary_data['original_length']} 字符 ") f.write(f"摘要长度<em>:</em> {summary_data['summary_length']} 字符 ") f.write(f"压缩率<em>:</em> {1 - summary_data['summary_length']/summary_data['original_length']<em>:</em>.1%} ") return {"status"<em>:</em> "success", "message"<em>:</em> f"摘要已保存到<em>:</em> {output_path}"} except Exception as e<em>:</em> return {"status"<em>:</em> "error", "message"<em>:</em> f"保存失败<em>:</em> {str(e)}"} __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. 创建技能目录 mkdir -p ~/.<em>openclaw</em>/<em>skills</em>/my_<em>skill</em> # 2. 编写核心文件 cd ~/.<em>openclaw</em>/<em>skills</em>/my_<em>skill</em> touch <em>SKILL</em>.md <em>skill</em>.py # 3. 启用调试模式 export <em>OPENCLAW</em>_DEBUG=true # 4. 重启 Gateway 加载技能 <em>openclaw</em> gateway restart # 5. 测试技能功能 <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/214596.html